{
 "schema": "aprime-asset-manifest/1",
 "repo": "gm-c6-assetprov",
 "generated_by": "tools/asset-provenance/build_manifest.py",
 "items": [
  {
   "id": "music-loop",
   "file": "music-loop.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "audio/assets/resources/native/31/3105bfa1-2c4f-43fb-a0c6-d089ba26c89a.15860.ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 30.089,
   "purpose": "**对局** BGM `music.play`（经典 / 冒险 / 失败横幅 / 复活 / 通关面板；设置里 Music 只关 BGM）",
   "post": null,
   "provenance_via": "MANIFEST.md",
   "event": "music.play"
  },
  {
   "id": "music-menu",
   "file": "music-menu.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "audio/assets/gl_hall/native/63/63f83f6b-4592-4bac-84a6-6f5974121f09.dbe8e.ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 17.149,
   "purpose": "**主菜单 / 加载 / 地图 / 结算** BGM `music.menu`（设置弹窗不换曲）",
   "post": null,
   "provenance_via": "MANIFEST.md",
   "event": "music.menu"
  },
  {
   "id": "sfx-clear-bass",
   "file": "sfx-clear-bass.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "sand_audio/native/5b/5b5f54fc-80e8-4d77-af32-632cbe39c8b1…mp3",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.42,
   "purpose": "消 ≥2 线加厚层 `clearBass`",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.clearBass"
  },
  {
   "id": "sfx-clear-shock",
   "file": "sfx-clear-shock.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "DynamicSoundTrait/native/e4/e41b61bb-5e11-4517-af5b-ae1dd77775ae…mp3",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.288,
   "purpose": "消 ≥3 线额外层 `clearShock`",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.clearShock"
  },
  {
   "id": "sfx-clear1",
   "file": "sfx-clear1.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "resources/native/0b/0ba0fa9e-1fad-40e4-b7d7-01b2d1073067…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.353,
   "purpose": "消 1 线 `clear1`（≥2 线为基底层）",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.clear1"
  },
  {
   "id": "sfx-combo",
   "file": "sfx-combo.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "gl_mahjong/native/e0/e0731c71-2312-4166-8328-efa8c57f8be8…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.19,
   "purpose": "连击 `combo`（随 N 升调：playbackRate 1 + (N−2)×0.08，封顶 6 级）",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.combo"
  },
  {
   "id": "sfx-ding",
   "file": "sfx-ding.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "resources/native/7c/7cf3c039-952d-4374-b179-87678f971986…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 1.124,
   "purpose": "「叮」`ding`（按钮抬起首响、结算滚分到顶）",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.ding"
  },
  {
   "id": "sfx-gameover",
   "file": "sfx-gameover.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "resources/native/41/41701843-6eed-4cb5-93fe-c0d982d6c941…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.785,
   "purpose": "无路可走 `gameover`",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.gameover"
  },
  {
   "id": "sfx-gem",
   "file": "sfx-gem.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "gl_mahjong/native/e2/e23fb1d0-c3b0-4681-bd7e-89050dc334bc…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.264,
   "purpose": "宝石收集 `gem`",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.gem"
  },
  {
   "id": "sfx-newbest",
   "file": "sfx-newbest.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "resources/native/dd/ddaebabe-d002-42bc-991a-fdb113dcd186…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.834,
   "purpose": "新纪录 `newbest`",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.newbest"
  },
  {
   "id": "sfx-pickup",
   "file": "sfx-pickup.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "chapter/native/c9/c9a5d1a5-979b-40ab-a882-459e01e5576c…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.092,
   "purpose": "拾起托盘块 `pickup`",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.pickup"
  },
  {
   "id": "sfx-place",
   "file": "sfx-place.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "resources/native/91/9131ae8f-0d09-402e-9fa5-1fc709e9e64c…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.211,
   "purpose": "落定 `place`",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.place"
  },
  {
   "id": "sfx-praise1",
   "file": "sfx-praise1.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "gl_hall/native/a5/a557e779-8d48-43e0-9456-c797237e1a1d…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.121,
   "purpose": "赞词 Good! `praise1`",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.praise1"
  },
  {
   "id": "sfx-praise2",
   "file": "sfx-praise2.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "gl_hall/native/35/352435b8-dcf9-4795-93ea-7c4a19ea3a8f…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.121,
   "purpose": "赞词 Great! `praise2`",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.praise2"
  },
  {
   "id": "sfx-praise3",
   "file": "sfx-praise3.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "gl_mahjong/native/8e/8ea47db8-b344-4e7d-aec5-fc3c5891d886…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.213,
   "purpose": "赞词 Amazing! `praise3`",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.praise3"
  },
  {
   "id": "sfx-tick",
   "file": "sfx-tick.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "resources/native/6c/6ce8f259-c755-4ea8-8890-20af17517251…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.164,
   "purpose": "滴答 `tick`（滚分每 60 ms、复活倒计时、宝石到达、按钮三连后两响）",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.tick"
  },
  {
   "id": "sfx-win",
   "file": "sfx-win.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "chapter/native/f7/f7bbb083-afa7-470a-9b0d-a44dc21dfd08…ogg",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.957,
   "purpose": "通关 `win`",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.win"
  },
  {
   "id": "sfx-wipe",
   "file": "sfx-wipe.ogg",
   "kind": "audio",
   "role": "ship",
   "source": "PACK",
   "origin": "BlockBackPlayAudioTrait/native/70/70566cf4-c408-4ed1-9857-fc1311e8021b…mp3",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": 0.186,
   "purpose": "复活清盘逐行「刷」`wipe`；开场/过关扫场逐行（变调 0.9 + 0.06·行）",
   "post": null,
   "provenance_via": "MANIFEST.md(bare-path⇒PACK)",
   "event": "sfx.wipe"
  },
  {
   "id": "font-roboto-bold",
   "file": "font-roboto-bold.ttf",
   "kind": "font",
   "role": "ship",
   "source": "PACK",
   "origin": "fonts/assets/gl_hall/native/23/239835e6-…/Roboto-Bold.ttf",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": null,
   "purpose": "数字（分数/计数，§8「数字等宽」路径）",
   "post": null,
   "provenance_via": "MANIFEST.md"
  },
  {
   "id": "font-roboto-bold-woff2",
   "file": "font-roboto-bold.woff2",
   "kind": "font",
   "role": "ship",
   "source": "PACK",
   "origin": "fonts/assets/gl_hall/native/23/239835e6-…/Roboto-Bold.ttf",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": null,
   "purpose": "数字（分数/计数，§8「数字等宽」路径）（加载优先件：Latin 子集 woff2，.ttf 兜底）",
   "post": "fontTools.subset 子集（同上）→ woff2；字形零改动",
   "provenance_via": "MANIFEST.md"
  },
  {
   "id": "font-rubik-medium",
   "file": "font-rubik-medium.ttf",
   "kind": "font",
   "role": "ship",
   "source": "PACK",
   "origin": "fonts/assets/gl_hall/native/6a/6a7f7ebc-…/Rubik-Medium.ttf",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": null,
   "purpose": "全部界面文字（§8「圆润粗黑体」）",
   "post": null,
   "provenance_via": "MANIFEST.md"
  },
  {
   "id": "font-rubik-medium-woff2",
   "file": "font-rubik-medium.woff2",
   "kind": "font",
   "role": "ship",
   "source": "PACK",
   "origin": "fonts/assets/gl_hall/native/6a/6a7f7ebc-…/Rubik-Medium.ttf",
   "derived_from_competitor": true,
   "slot_geom": null,
   "max_render_px": null,
   "duration_s": null,
   "purpose": "全部界面文字（§8「圆润粗黑体」）（加载优先件：Latin 子集 woff2，.ttf 兜底）",
   "post": "fontTools.subset 子集（Latin-1+通用标点+UI 符号，layout-features 全保留）→ woff2；字形零改动",
   "provenance_via": "MANIFEST.md"
  },
  {
   "id": "back",
   "file": "back.png",
   "kind": "image",
   "role": "ship",
   "source": "GEN",
   "origin": "https://run.ceo/artifacts/assets/116ef2faef1eb8b4eb20193a312f65e7c333c96b505cc743f89915df3a2806a6.png",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 256,
    "h": 256,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 110,
   "duration_s": null,
   "purpose": "back icon",
   "post": "紧裁 alpha bbox + 4 px → 正方 → 256²",
   "provenance_via": "gen-derive.json"
  },
  {
   "id": "bg-result",
   "file": "bg-result.webp",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/fail-revive-01-5.png#bbox=0,0,36,2400",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 1080,
    "h": 2400,
    "anchor": "stretch",
    "nine_slice_insets": null
   },
   "max_render_px": 2400,
   "duration_s": null,
   "purpose": "result screen background",
   "post": "最左 36 px 竖条（纯紫色渐变，无文字）横向拉伸到 1080×2400（纵向 1:1，v2.3 禁放大），webp q82",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "block-blue",
   "file": "block-blue.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/adventure-L1-clear-01-2.png#bbox=65,1417,181,1535",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 116,
    "h": 118,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "block blue",
   "post": "格 r7c0：按空盘帧格线标定的网格取整格，斜面外各留 1 px 本块暗色边框，边框外侧与棋盘底色不可分（色差 ≤24）的像素软抠 alpha 并反混色；不缩放（源尺寸）",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "block-cyan",
   "file": "block-cyan.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/fail-revive-01-4.png#bbox=183,702,301,819",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 118,
    "h": 117,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "block cyan",
   "post": "格 r1c1：按空盘帧格线标定的网格取整格，斜面外各留 1 px 本块暗色边框，边框外侧与棋盘底色不可分（色差 ≤24）的像素软抠 alpha 并反混色；不缩放（源尺寸）",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "block-green",
   "file": "block-green.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/fail-revive-01-4.png#bbox=780,1298,897,1415",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 117,
    "h": 117,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "block green",
   "post": "格 r6c6：按空盘帧格线标定的网格取整格，斜面外各留 1 px 本块暗色边框，边框外侧与棋盘底色不可分（色差 ≤24）的像素软抠 alpha 并反混色；不缩放（源尺寸）",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "block-locked",
   "file": "block-locked.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/adventure-L1-clear-01-2.png#bbox=65,1417,181,1535",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 116,
    "h": 118,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "locked / preset tile",
   "post": "蓝块饱和度 ×0.12、明度 ×0.8（灰砖）；不缩放",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "block-orange",
   "file": "block-orange.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/fail-revive-01-4.png#bbox=899,1179,1016,1295",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 117,
    "h": 116,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "block orange",
   "post": "格 r5c7：按空盘帧格线标定的网格取整格，斜面外各留 1 px 本块暗色边框，边框外侧与棋盘底色不可分（色差 ≤24）的像素软抠 alpha 并反混色；不缩放（源尺寸）",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "block-pink",
   "file": "block-pink.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/fail-revive-01-4.png#bbox=422,583,539,699",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 117,
    "h": 116,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "block pink",
   "post": "紫块（主色相 267.3°）色相 +63°→330° 粉（参照件调色板无粉色族）；不缩放",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "block-purple",
   "file": "block-purple.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/fail-revive-01-4.png#bbox=422,583,539,699",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 117,
    "h": 116,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "block purple",
   "post": "格 r0c3：按空盘帧格线标定的网格取整格，斜面外各留 1 px 本块暗色边框，边框外侧与棋盘底色不可分（色差 ≤24）的像素软抠 alpha 并反混色；不缩放（源尺寸）",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "block-red",
   "file": "block-red.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/adventure-L1-clear-01-2.png#bbox=661,821,777,939",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 116,
    "h": 118,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "block red",
   "post": "格 r2c5：按空盘帧格线标定的网格取整格，斜面外各留 1 px 本块暗色边框，边框外侧与棋盘底色不可分（色差 ≤24）的像素软抠 alpha 并反混色；不缩放（源尺寸）",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "block-yellow",
   "file": "block-yellow.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/fail-revive-01-4.png#bbox=661,940,777,1057",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 116,
    "h": 117,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "block yellow",
   "post": "格 r3c5：按空盘帧格线标定的网格取整格，斜面外各留 1 px 本块暗色边框，边框外侧与棋盘底色不可分（色差 ≤24）的像素软抠 alpha 并反混色；不缩放（源尺寸）",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "btn-white",
   "file": "btn-white.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/fail-revive-01-5.png#bbox=224,1586,856,1747",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 483,
    "h": 167,
    "anchor": "nine-slice",
    "nine_slice_insets": null
   },
   "max_render_px": 520,
   "duration_s": null,
   "purpose": "blank rounded button (tinted at runtime)",
   "post": "黄色 ▶ 按钮：取左 38% + 右 38% 拼接去掉图标；四角按 软 alpha（键色距 [40,100] 线性 + 羽化 1 px）+ 边缘带反解前景色并向内侧 7×7 回拉 50% 去色晕；去饱和并把最亮抬到 245（运行时乘主题色）；1:1 不缩放（v2.3 禁放大，9-slice 角按源角半径切）",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "check",
   "file": "check.png",
   "kind": "image",
   "role": "ship",
   "source": "GEN",
   "origin": "https://run.ceo/artifacts/assets/726adaffb74ff4459eb99045f409c29bffd4c4b1520e3bb501fe21b4431920c2.png",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 256,
    "h": 256,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 56,
   "duration_s": null,
   "purpose": "check icon",
   "post": "紧裁 alpha bbox + 4 px → 正方 → 256²",
   "provenance_via": "gen-derive.json"
  },
  {
   "id": "cover",
   "file": "cover.webp",
   "kind": "image",
   "role": "ship",
   "source": "GEN",
   "origin": null,
   "derived_from_competitor": false,
   "slot_geom": {
    "w": 1280,
    "h": 720,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "play 面封面 keyart（16:9，零文字）",
   "post": null,
   "provenance_via": "MANIFEST.md(heading)"
  },
  {
   "id": "crown",
   "file": "crown.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/fail-revive-01-5.png#bbox=418,486,661,665",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 256,
    "h": 256,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 90,
   "duration_s": null,
   "purpose": "crown (HUD best / result / menu)",
   "post": "结算屏顶部金皇冠（紫色渐变底，键色按行估计；阈值抬到 30/95 并回拉 70% 以切掉紫色晕带）；软 alpha（键色距 [30,95] 线性 + 羽化 1 px）+ 边缘带反解前景色并向内侧 7×7 回拉 50% 去色晕 →256²",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "fx-beam-band",
   "file": "fx-beam-band.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/clear-single-01-fx-076.png#bbox=548,804,644,952",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 1080,
    "h": 148,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "A8 beam soft band (tint at runtime)",
   "post": "同行 1 格宽柔光带（1 格 120 + 外发光各 14，§8/A8），减底色转 alpha、增益 2.4 提亮，沿线 95 px 中值去带内粒子（只留跨带剖面），去饱和→白，沿线周期平铺（接缝 24 px 交叉淡化）到 1080；运行时乘族色",
   "provenance_via": "fx-crops.json"
  },
  {
   "id": "fx-beam-core",
   "file": "fx-beam-core.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/clear-single-01-fx-056.png#bbox=550,846,646,910",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 1080,
    "h": 64,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "A8 beam core (white)",
   "post": "行 2 光束亮芯段（亮芯 36 + 外发光各 14，§8），减棋盘底色转 straight alpha，饱和度 ×0.12 →白，沿线周期平铺（接缝 24 px 交叉淡化）到 1080",
   "provenance_via": "fx-crops.json"
  },
  {
   "id": "fx-burst",
   "file": "fx-burst.png",
   "kind": "image",
   "role": "ship",
   "source": "GEN",
   "origin": "(M3 session master, see MANIFEST GEN row)",
   "derived_from_competitor": false,
   "slot_geom": {
    "w": 512,
    "h": 512,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 194,
   "duration_s": null,
   "purpose": "burst flare (lighter)",
   "post": "紧裁 alpha bbox + 6 px → 正方 → 512²（原 192² 导出对 389 的束头光斑是 2× 放大，v2.3 起改 512²）",
   "provenance_via": "gen-derive.json"
  },
  {
   "id": "fx-diamond",
   "file": "fx-diamond.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/clear-single-01-fx-068.png#bbox=439,1222,461,1244",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 22,
    "h": 22,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "A8 spark (diamond)",
   "post": "青色小方钻 14² 原尺寸，减底色转 alpha，去饱和→白；运行时乘族色",
   "provenance_via": "fx-crops.json"
  },
  {
   "id": "fx-spark-dot",
   "file": "fx-spark-dot.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/clear-single-01-fx-064.png#bbox=684,1092,712,1120",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 28,
    "h": 28,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "A8 spark (dot)",
   "post": "橙色圆粒子 24² 原尺寸，减底色转 alpha，去饱和→白；运行时乘族色",
   "provenance_via": "fx-crops.json"
  },
  {
   "id": "fx-spark-white",
   "file": "fx-spark-white.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/clear-single-01-fx-054.png#bbox=427,1026,456,1055",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 29,
    "h": 29,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "A8 spark (square)",
   "post": "洋红方形粒子 21² 原尺寸，减底色转 alpha，去饱和→白；运行时乘族色",
   "provenance_via": "fx-crops.json"
  },
  {
   "id": "fx-star4",
   "file": "fx-star4.png",
   "kind": "image",
   "role": "ship",
   "source": "GEN",
   "origin": "(M3 session master, see MANIFEST GEN row)",
   "derived_from_competitor": false,
   "slot_geom": {
    "w": 512,
    "h": 512,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 389,
   "duration_s": null,
   "purpose": "star4 flare (lighter)",
   "post": "紧裁 alpha bbox + 6 px → 正方 → 512²（原 192² 导出对 389 的束头光斑是 2× 放大，v2.3 起改 512²）",
   "provenance_via": "gen-derive.json"
  },
  {
   "id": "fx-star5",
   "file": "fx-star5.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/clear-single-01-fx-062.png#bbox=698,997,737,1034",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 39,
    "h": 37,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "A8 spark (star)",
   "post": "淡金五角星 31×29 原尺寸，减底色转 alpha，去饱和→白；运行时乘族色",
   "provenance_via": "fx-crops.json"
  },
  {
   "id": "gear",
   "file": "gear.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/fail-revive-01-4.png#bbox=933,162,1021,249",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 256,
    "h": 256,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 88,
   "duration_s": null,
   "purpose": "settings gear",
   "post": "对局 HUD 右上齿轮（蓝底，键色只取左缘列以避开右侧角标）：去掉红色震动角标（膨胀 4 px）后以左半镜像补右半；软 alpha（键色距 [16,70] 线性 + 羽化 1 px）+ 边缘带反解前景色并向内侧 7×7 回拉 50% 去色晕 →256²",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "gem-a",
   "file": "gem-a.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/level-L3-01-2.png#bbox=596,293,710,406",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 118,
    "h": 118,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 90,
   "duration_s": null,
   "purpose": "gem A (blue)",
   "post": "HUD 金五边形宝石图标（主色相 33.8°）：同法抠 alpha；只对宝石体色相窗 ±60° 内像素按 h′=215°+0.4·(h−33.8°) 平移到蓝并收窄色相散布（金体的深褐描边落到深蓝而非青），白高光不动；不缩放",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "gem-b",
   "file": "gem-b.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/level-L3-01-2.png#bbox=373,290,483,410",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 124,
    "h": 124,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 90,
   "duration_s": null,
   "purpose": "gem B (red)",
   "post": "HUD 红星宝石图标：按 HUD 底色距软抠 alpha（alpha 高斯 0.7 去截图颗粒锯齿；≥50% 覆盖像素反混色、<50% 取最近实心像素色），只留最大连通域，四周留 2 px；不缩放",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "gem-c",
   "file": "gem-c.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/level-L3-01-2.png#bbox=373,290,483,410",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 124,
    "h": 124,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 90,
   "duration_s": null,
   "purpose": "gem C (green)",
   "post": "HUD 红星宝石图标（主色相 1.9°）：只对宝石体色相窗 ±60° 内像素平移 +118°→120° 绿，深蓝描边与白高光不动；不缩放",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "icon-music",
   "file": "icon-music.png",
   "kind": "image",
   "role": "ship",
   "source": "GEN",
   "origin": null,
   "derived_from_competitor": false,
   "slot_geom": {
    "w": 256,
    "h": 256,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 72,
   "duration_s": null,
   "purpose": "设置行 2 图标",
   "post": null,
   "provenance_via": "MANIFEST.md(heading)"
  },
  {
   "id": "icon-sound",
   "file": "icon-sound.png",
   "kind": "image",
   "role": "ship",
   "source": "GEN",
   "origin": null,
   "derived_from_competitor": false,
   "slot_geom": {
    "w": 256,
    "h": 256,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 72,
   "duration_s": null,
   "purpose": "设置行 1 图标（§6.9）",
   "post": null,
   "provenance_via": "MANIFEST.md(heading)"
  },
  {
   "id": "icon-vibration",
   "file": "icon-vibration.png",
   "kind": "image",
   "role": "ship",
   "source": "GEN",
   "origin": null,
   "derived_from_competitor": false,
   "slot_geom": {
    "w": 256,
    "h": 256,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 72,
   "duration_s": null,
   "purpose": "设置行 3 图标",
   "post": null,
   "provenance_via": "MANIFEST.md(heading)"
  },
  {
   "id": "lock",
   "file": "lock.png",
   "kind": "image",
   "role": "ship",
   "source": "GEN",
   "origin": null,
   "derived_from_competitor": false,
   "slot_geom": {
    "w": 256,
    "h": 256,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 60,
   "duration_s": null,
   "purpose": "地图未解锁关（§6.7「灰」）",
   "post": null,
   "provenance_via": "MANIFEST.md(heading)"
  },
  {
   "id": "logo",
   "file": "logo.webp",
   "kind": "image",
   "role": "ship",
   "source": "GEN",
   "origin": null,
   "derived_from_competitor": false,
   "slot_geom": {
    "w": 900,
    "h": 499,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 864,
   "duration_s": null,
   "purpose": "主菜单 / 加载屏 logo「BLOCK ADVENTURE」",
   "post": null,
   "provenance_via": "MANIFEST.md(heading)"
  },
  {
   "id": "medal",
   "file": "medal.png",
   "kind": "image",
   "role": "ship",
   "source": "SHOT",
   "origin": "shots/level-L2-01-6.png#bbox=352,1157,514,1315",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 256,
    "h": 256,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": 150,
   "duration_s": null,
   "purpose": "daily-victories card badge / menu medal",
   "post": "每日连胜卡左侧 WIN 皇冠徽章（浅色卡面上，非蓝底右上奖章）；软 alpha（键色距 [22,90] 线性 + 羽化 1 px）+ 边缘带反解前景色并向内侧 7×7 回拉 50% 去色晕 →256²",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "panel-light",
   "file": "panel-light.png",
   "kind": "image",
   "role": "ship",
   "source": "GEN",
   "origin": "https://run.ceo/artifacts/assets/d3cf9d067d8588a9d51cecfcab1c9a16d565e781e92d368a83d2e139c00100f1.png",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 1024,
    "h": 296,
    "anchor": "nine-slice",
    "nine_slice_insets": null
   },
   "max_render_px": 40,
   "duration_s": null,
   "purpose": "popup panel (9-slice)",
   "post": "紧裁 alpha bbox → 宽 1024（高 296）；渲染 9-slice 源角半径由 render.js cornerInset() 从 alpha 顶行实测",
   "provenance_via": "gen-derive.json"
  },
  {
   "id": "tile-orange",
   "file": "tile-orange.jpg",
   "kind": "image",
   "role": "ship",
   "source": "PACK",
   "origin": "textures/lottie/anr/plana/images/img_3.jpg",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 106,
    "h": 106,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "加载屏旋转方块图标（§6.2）",
   "post": null,
   "provenance_via": "MANIFEST.md"
  },
  {
   "id": "ref/back",
   "file": "ref/back.png",
   "kind": "image",
   "role": "ref",
   "source": "SHOT",
   "origin": "shots/adventure-L1-clear-01-2.png#bbox=73,158,125,242",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 256,
    "h": 256,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "back chevron",
   "post": "对局 HUD 左上返回箭头（蓝底）；软 alpha（键色距 [16,70] 线性 + 羽化 1 px）+ 边缘带反解前景色并向内侧 7×7 回拉 50% 去色晕 →256²",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "ref/check",
   "file": "ref/check.png",
   "kind": "image",
   "role": "ref",
   "source": "SHOT",
   "origin": "shots/level-L2-01-6.png#bbox=788,1260,830,1303",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 256,
    "h": 256,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "check mark (map cleared / gem goal met)",
   "post": "每日连胜卡右下绿勾（浅色卡面上）；软 alpha（键色距 [22,90] 线性 + 羽化 1 px）+ 边缘带反解前景色并向内侧 7×7 回拉 50% 去色晕 →256²",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "ref/fx-beam-blue",
   "file": "ref/fx-beam-blue.png",
   "kind": "image",
   "role": "ref",
   "source": "SHOT",
   "origin": "shots/adventure-L1-clear-01-2.png#bbox=399,586,564,995",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 409,
    "h": 165,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "column-clear beam",
   "post": "同上，色相 +220°→220° 蓝",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "ref/fx-beam-yellow",
   "file": "ref/fx-beam-yellow.png",
   "kind": "image",
   "role": "ref",
   "source": "SHOT",
   "origin": "shots/adventure-L1-clear-01-2.png#bbox=399,586,564,995",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 409,
    "h": 165,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "row-clear beam",
   "post": "红色竖光束段，减棋盘底色转 straight alpha，转横向，跨束余弦淡出 35%/两端 8%，色相 +50°→50° 黄",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "ref/fx-diamond-cyan",
   "file": "ref/fx-diamond-cyan.png",
   "kind": "image",
   "role": "ref",
   "source": "SHOT",
   "origin": "shots/adventure-L1-clear-01-2.png#bbox=482,1560,504,1582",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 64,
    "h": 64,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "diamond particle cyan",
   "post": "棋盘下缘外青色小菱形粒子，减局部底色转 alpha →64²",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "ref/fx-diamond-gold",
   "file": "ref/fx-diamond-gold.png",
   "kind": "image",
   "role": "ref",
   "source": "SHOT",
   "origin": "shots/adventure-L1-clear-01-2.png#bbox=482,1560,504,1582",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 64,
    "h": 64,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "diamond particle gold",
   "post": "同上，色相 +251°→45° 金",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "ref/fx-spark-gold",
   "file": "ref/fx-spark-gold.png",
   "kind": "image",
   "role": "ref",
   "source": "SHOT",
   "origin": "shots/adventure-L1-clear-01-2.png#bbox=370,1435,398,1463",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 64,
    "h": 64,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "spark gold",
   "post": "小方粒子，减底色转 alpha →64²",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "ref/fx-spark-purple",
   "file": "ref/fx-spark-purple.png",
   "kind": "image",
   "role": "ref",
   "source": "SHOT",
   "origin": "shots/adventure-L1-clear-01-2.png#bbox=587,1288,607,1308",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 64,
    "h": 64,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "spark purple",
   "post": "小方粒子，减底色转 alpha →64²",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "ref/fx-spark-white",
   "file": "ref/fx-spark-white.png",
   "kind": "image",
   "role": "ref",
   "source": "SHOT",
   "origin": "shots/adventure-L1-clear-01-2.png#bbox=455,1286,496,1326",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 64,
    "h": 64,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "spark white",
   "post": "小方粒子，减底色转 alpha →64²，去饱和",
   "provenance_via": "shot-crops.json"
  },
  {
   "id": "ref/panel-light",
   "file": "ref/panel-light.png",
   "kind": "image",
   "role": "ref",
   "source": "SHOT",
   "origin": "shots/level-L2-01-6.png#bbox=224,1130,857,1329",
   "derived_from_competitor": true,
   "slot_geom": {
    "w": 421,
    "h": 129,
    "anchor": "center",
    "nine_slice_insets": null
   },
   "max_render_px": null,
   "duration_s": null,
   "purpose": "popup panel (9-slice)",
   "post": "每日连胜卡浅色主体：内部填卡面中值色抹掉徽章/文字，下半镜像到上半得到四角圆角面板；四角按 软 alpha（键色距 [45,110] 线性 + 羽化 1 px）+ 边缘带反解前景色并向内侧 7×7 回拉 50% 去色晕；缩放 0.66",
   "provenance_via": "shot-crops.json"
  }
 ]
}
