{
  "schemaVersion": 1,
  "status": "runtime-extracted-assembly-not-art-approval",
  "date": "2026-11-02",
  "sampleType": "从真实运行组件抽取的可复现装配样板；不是游戏运行截图、不是完整玩法、不是基于整图背景的假装配",
  "sourceRoot": "/Users/dingzhuqi/Documents/ChatGPT/NP/prototype/public",
  "sources": [
    {
      "file": "ink-hub.js",
      "sha256": "be966fb19f06caf718b2671c72b3e1b48158b94821cfbc75d9830fbf208811e2"
    },
    {
      "file": "ink-hub.css",
      "sha256": "887d7460fadde804e5d6e069de7b83675c943be0f8e7e5bcf708194536f340ff"
    },
    {
      "file": "hub.css",
      "sha256": "1b6400dcf68f6855ed76ff89746594b1ef6788cf5e9ecf0b5af9e3fef253d195"
    },
    {
      "file": "ink.html",
      "sha256": "91cf8e8f70d0b1be2bce6d83058a73c394463e1370f06dd69f15a797c1e91fb8"
    }
  ],
  "extractedFunctions": [
    {
      "function": "renderResources",
      "source": "prototype/public/ink-hub.js",
      "line": 157,
      "sourceSha256": "5adae5c19f197fc9e96847332a05aa890dcc715c3b651e6253c7014cbac27f3f",
      "change": "Verbatim function body"
    },
    {
      "function": "heading",
      "source": "prototype/public/ink-hub.js",
      "line": 205,
      "sourceSha256": "d94b4ca45065b3704c33a1bb8478318da3e7f56fa57b79fda089d5b05a06693c",
      "change": "Verbatim function body"
    },
    {
      "function": "locked",
      "source": "prototype/public/ink-hub.js",
      "line": 209,
      "sourceSha256": "6590ca9328bbd2aeedea1ded8aab420717585d18c77a766b41cc135931bbd23c",
      "change": "Verbatim function body"
    },
    {
      "function": "icon",
      "source": "prototype/public/ink-hub.js",
      "line": 213,
      "sourceSha256": "7002d5a8134df3532f939847b57ca81fcc14123ff0b08de33fd0992a2e107de8",
      "change": "Verbatim function body"
    },
    {
      "function": "rankData",
      "source": "prototype/public/ink-hub.js",
      "line": 283,
      "sourceSha256": "bd362dcce21a1a9630cbc32fc6f7cd5c757de0057708b6cd30b1d027f02bcff3",
      "change": "Verbatim function body"
    },
    {
      "function": "rankBadge",
      "source": "prototype/public/ink-hub.js",
      "line": 284,
      "sourceSha256": "e429391e2c9ac6a1bef8aa75cc7a7850492af30cf9f677f8f24899044a94f5a9",
      "change": "Verbatim function body"
    },
    {
      "function": "rankChangeMarkup",
      "source": "prototype/public/ink-hub.js",
      "line": 245,
      "sourceSha256": "73ba01fb76712237ea995b9138e1a66aab420609162f3ef65fabd54d1b4ab429",
      "change": "Verbatim function body"
    },
    {
      "function": "stageArt",
      "source": "prototype/public/ink-hub.js",
      "line": 311,
      "sourceSha256": "39883f89fef8cc1e18ce30c05ff49ebaaf62aa98aa869931f58cc4f223e2da11",
      "change": "Only asset URL remapped"
    },
    {
      "function": "featureEntry",
      "source": "prototype/public/ink-hub.js",
      "line": 314,
      "sourceSha256": "7c5a0d7c9ab0619b2bf8de38242f380413e806155feaa19dc89d2be52b51f818",
      "change": "Verbatim function body"
    },
    {
      "function": "renderHome",
      "source": "prototype/public/ink-hub.js",
      "line": 321,
      "sourceSha256": "3dfd039a9ef52467afee72aafbb39fac80d4881eb3d70dbd1da4f2725f471199",
      "change": "Verbatim function body"
    },
    {
      "function": "renderTraining",
      "source": "prototype/public/ink-hub.js",
      "line": 328,
      "sourceSha256": "1bca9f3cd2f013fcf97b9884bd3a571c42ec8ea713e7ac889d7eba28914328fc",
      "change": "Verbatim function body"
    },
    {
      "function": "renderHeroes",
      "source": "prototype/public/ink-hub.js",
      "line": 333,
      "sourceSha256": "2f0e1c1883f3292654da1519cef33724d98346cb511561822e83b87387077ef2",
      "change": "Verbatim function body"
    },
    {
      "function": "heroDialog",
      "source": "prototype/public/ink-hub.js",
      "line": 339,
      "sourceSha256": "293df5ff04d691a8b867ec2bc08436c5de847159182761ff60370fbf15dc5d95",
      "change": "Verbatim function body"
    },
    {
      "function": "renderRecruit",
      "source": "prototype/public/ink-hub.js",
      "line": 350,
      "sourceSha256": "68b1855ba54936f0c73206dfcaa2ed7019421e311fea03352cbf7f1fa4f20780",
      "change": "Verbatim function body"
    },
    {
      "function": "featureUnlocked",
      "source": "prototype/public/ink-hub.js",
      "line": 131,
      "sourceSha256": "549eee2b369782c8bac87877e81429619c4bc7bd2807226bff75ba37319b0edd",
      "change": "Verbatim function body"
    },
    {
      "function": "unlockCondition",
      "source": "prototype/public/ink-hub.js",
      "line": 135,
      "sourceSha256": "24a9b3bc47e3a76bdfe7d4e4c561017ae5926aaa3e89fa1aa4ca47eacefe220b",
      "change": "Verbatim function body"
    },
    {
      "function": "openDialog",
      "source": "prototype/public/ink-hub.js",
      "line": 106,
      "sourceSha256": "b0332ea8080b6633e09d9a8cbf1577b82574f02ed2af9bb7648f7ea428968425",
      "change": "Verbatim function body"
    },
    {
      "function": "settlementDialog",
      "source": "prototype/public/ink-hub.js",
      "line": 516,
      "sourceSha256": "5217036f94c31f431aeff1273df8e82a9211a12b096d2ef9fd60ece4d1954204",
      "change": "Verbatim function body"
    }
  ],
  "assetBase": "/resources/yizi-chengbing/atlas/resources/",
  "scripts": {
    "runtime-components.js": "真实函数正文+只读离线fixture适配；不引入账户API、存档、音频或按钮业务事件"
  },
  "css": {
    "runtime-hub.css": "hub.css原样复制",
    "runtime-ink-hub.css": "ink-hub.css仅替换3处素材路径，无样式参数改动"
  },
  "fixture": "fixture.json",
  "fixtureNote": "合成展示状态，不冒充线上账号数据或规则配置",
  "components": [
    {
      "id": "paper",
      "name": "宣纸背景",
      "selector": ".app-shell",
      "assetIds": [
        "v25-paper-texture"
      ],
      "rule": "linear-gradient overlay + paper texture center / 600px",
      "source": "ink-hub.css .app-shell"
    },
    {
      "id": "corner-frame",
      "name": "四角金线角花与细外框",
      "selector": ".peripheral-frame",
      "assetIds": [],
      "rule": "CSS border + four i elements and :before/:after rotated corners; no image",
      "source": "ink-hub.css .peripheral-frame"
    },
    {
      "id": "resources",
      "name": "顶资源栏与设置",
      "selector": ".game-header",
      "assetIds": [
        "icon-coins-svg",
        "icon-stamina-svg",
        "icon-tickets-svg",
        "icon-settings-header-svg"
      ],
      "rule": "runtime inline SVG paths + live text + CSS grid 1fr/1.08fr/.8fr; resource frames CSS",
      "source": "renderResources + ink.html settings SVG + hub.css/ink-hub.css"
    },
    {
      "id": "rank",
      "name": "段位徽章与文字",
      "selector": ".rank-display",
      "assetIds": [
        "rank-silver-svg"
      ],
      "rule": "rankBadge() inline SVG and rank class colors; name/rating/progress or tower record text generated",
      "source": "rankBadge + ink-hub.css .rank-*"
    },
    {
      "id": "sun",
      "name": "淡太阳",
      "selector": ".scene-sun",
      "assetIds": [],
      "rule": "CSS radial-gradient circle; tower variant uses separate size/top",
      "source": "ink-hub.css .scene-sun / .is-tower .scene-sun"
    },
    {
      "id": "building",
      "name": "主城或塔建筑",
      "selector": ".stage-art",
      "assetIds": [
        "hub-city",
        "hub-tower"
      ],
      "rule": "independent transparent PNG; object-fit:contain; actual runtime width/height/max-height",
      "source": "stageArt + .stage-art"
    },
    {
      "id": "letters",
      "name": "主城前刀兵弓牌",
      "selector": ".home-letters",
      "assetIds": [
        "font-peripheralbrush"
      ],
      "rule": "3 independent spans with runtime font, CSS frame, gradient, rotation; not a composite screenshot",
      "source": "stageArt + .home-letters"
    },
    {
      "id": "features",
      "name": "左训练/武将与右招募入口",
      "selector": ".feature-rail",
      "assetIds": [
        "icon-training-svg",
        "icon-heroes-svg",
        "icon-recruit-svg"
      ],
      "rule": "actual featureEntry() inline SVG + CSS button frame; two left entries, one right",
      "source": "featureEntry + .feature-rail/.feature-icon"
    },
    {
      "id": "tabs",
      "name": "对战/通天塔页签",
      "selector": ".mode-switch",
      "assetIds": [],
      "rule": "actual semantic tab buttons and aria-selected CSS; no bitmap",
      "source": "renderHome + .mode-switch"
    },
    {
      "id": "cta",
      "name": "开始挑战按钮",
      "selector": ".challenge-button",
      "assetIds": [
        "font-peripheralbrush"
      ],
      "rule": "CSS green gradient/border/inset shadows + :before triangle + :after interior gold lines + real text",
      "source": "button helper + ink-hub.css .challenge-button"
    },
    {
      "id": "training",
      "name": "训练卡片",
      "selector": ".unit-grid",
      "assetIds": [
        "font-peripheralbrush"
      ],
      "rule": "renderTraining() generated articles, glyph text, comparison values, buttons; CSS grids and card borders",
      "source": "renderTraining + .unit-card/.unit-grid"
    },
    {
      "id": "recruit",
      "name": "招募三签",
      "selector": ".recruit-display",
      "assetIds": [
        "v25-card-paper",
        "font-peripheralbrush",
        "icon-heroes-svg"
      ],
      "rule": "renderRecruit() generated individual summon-card elements; CSS clipping, paper, transforms and separate text",
      "source": "renderRecruit + .summon-*"
    },
    {
      "id": "hero-detail",
      "name": "武将详情弹窗",
      "selector": "dialog",
      "assetIds": [
        "v25-paper-texture",
        "font-peripheralbrush"
      ],
      "rule": "heroDialog() + actual openDialog() and ::backdrop; current runtime differs from art concept",
      "source": "heroDialog + openDialog + dialog CSS"
    },
    {
      "id": "settlement",
      "name": "胜利结算弹窗",
      "selector": ".settlement-dialog",
      "assetIds": [
        "v25-paper-texture",
        "font-peripheralbrush",
        "icon-coins-svg"
      ],
      "rule": "settlementDialog() actual markup; CSS medal rather than art concept gold coin illustration",
      "source": "settlementDialog + .settlement-*"
    }
  ],
  "screens": [
    {
      "id": "UI05",
      "title": "主界面",
      "html": "UI05.html",
      "referenceConceptId": "CONCEPT01",
      "status": "runtime-component-assembly",
      "matchesReferencePixels": false,
      "screenshots": [
        {
          "nodes": "screenshots/UI05-390x844-nodes.json",
          "file": "screenshots/UI05-390x844.png",
          "viewport": {
            "width": 390,
            "height": 844
          },
          "deviceScaleFactor": 1,
          "type": "runtime-extracted-assembly-capture",
          "state": "fixture.json"
        },
        {
          "nodes": "screenshots/UI05-375x667-nodes.json",
          "file": "screenshots/UI05-375x667.png",
          "viewport": {
            "width": 375,
            "height": 667
          },
          "deviceScaleFactor": 1,
          "type": "runtime-extracted-assembly-capture",
          "state": "fixture.json"
        }
      ],
      "knownDifferences": [
        "已忠实提取现行原型的顶部资源栏、纸底/太阳/角花、徽章、建筑、左右功能栏、页签和CTA。",
        "现行主CTA是CSS渐变金线，不是原效果图不规则毛边金饰；徽章为inline SVG，不是参考图立体金边。",
        "当前建筑取hub-city透明PNG，原稿与运行部件仍需逐区域比对，不声明母图一致。"
      ],
      "stateId": "UI05-runtime-fixture-unlocked",
      "source": {
        "runtime": "prototype/public/ink-hub.js",
        "sha256": "be966fb19f06caf718b2671c72b3e1b48158b94821cfbc75d9830fbf208811e2",
        "css": [
          "runtime-hub.css",
          "runtime-ink-hub.css"
        ],
        "fixture": "fixture.json"
      },
      "referenceArtApproved": false,
      "screenshotKind": "assembly-render-from-extracted-runtime-components",
      "available": true
    },
    {
      "id": "UI06",
      "title": "通天塔模式",
      "html": "UI06.html",
      "referenceConceptId": "CONCEPT03",
      "status": "runtime-component-assembly",
      "matchesReferencePixels": false,
      "screenshots": [
        {
          "nodes": "screenshots/UI06-390x844-nodes.json",
          "file": "screenshots/UI06-390x844.png",
          "viewport": {
            "width": 390,
            "height": 844
          },
          "deviceScaleFactor": 1,
          "type": "runtime-extracted-assembly-capture",
          "state": "fixture.json"
        },
        {
          "nodes": "screenshots/UI06-375x667-nodes.json",
          "file": "screenshots/UI06-375x667.png",
          "viewport": {
            "width": 375,
            "height": 667
          },
          "deviceScaleFactor": 1,
          "type": "runtime-extracted-assembly-capture",
          "state": "fixture.json"
        }
      ],
      "knownDifferences": [
        "保留段位徽章；下方最高记录/5层两行来自当前rankBadge(tower=true)。",
        "旧参考图仍有段位积分条与重复通天塔标题，当前已按用户后续指令移除，不能为了像素相似恢复旧流程。",
        "塔建筑取独立hub-tower PNG；主CTA和徽章的原稿差异与主城共用。"
      ],
      "stateId": "UI06-runtime-fixture-tower-record5",
      "source": {
        "runtime": "prototype/public/ink-hub.js",
        "sha256": "be966fb19f06caf718b2671c72b3e1b48158b94821cfbc75d9830fbf208811e2",
        "css": [
          "runtime-hub.css",
          "runtime-ink-hub.css"
        ],
        "fixture": "fixture.json"
      },
      "referenceArtApproved": false,
      "screenshotKind": "assembly-render-from-extracted-runtime-components",
      "available": true
    },
    {
      "id": "UI13",
      "title": "训练",
      "html": "UI13.html",
      "referenceConceptId": "CONCEPT04",
      "status": "runtime-component-assembly",
      "matchesReferencePixels": false,
      "screenshots": [
        {
          "nodes": "screenshots/UI13-390x844-nodes.json",
          "file": "screenshots/UI13-390x844.png",
          "viewport": {
            "width": 390,
            "height": 844
          },
          "deviceScaleFactor": 1,
          "type": "runtime-extracted-assembly-capture",
          "state": "fixture.json"
        },
        {
          "nodes": "screenshots/UI13-375x667-nodes.json",
          "file": "screenshots/UI13-375x667.png",
          "viewport": {
            "width": 375,
            "height": 667
          },
          "deviceScaleFactor": 1,
          "type": "runtime-extracted-assembly-capture",
          "state": "fixture.json"
        }
      ],
      "knownDifferences": [
        "实际renderTraining为每张卡内一键升级，且当前窄屏数值上下排列；与原效果图的横排比较和底部一键升级不同。",
        "截图为视口内实际结果，390×844时训练内容可纵向滚动；不裁掉内容后声称一屏还原。",
        "训练数值为可复现展示fixture，不代表最新数值表。"
      ],
      "stateId": "UI13-runtime-fixture-unlocked",
      "source": {
        "runtime": "prototype/public/ink-hub.js",
        "sha256": "be966fb19f06caf718b2671c72b3e1b48158b94821cfbc75d9830fbf208811e2",
        "css": [
          "runtime-hub.css",
          "runtime-ink-hub.css"
        ],
        "fixture": "fixture.json"
      },
      "referenceArtApproved": false,
      "screenshotKind": "assembly-render-from-extracted-runtime-components",
      "available": true
    },
    {
      "id": "UI16",
      "title": "招募",
      "html": "UI16.html",
      "referenceConceptId": "CONCEPT05",
      "status": "runtime-component-assembly",
      "matchesReferencePixels": false,
      "screenshots": [
        {
          "nodes": "screenshots/UI16-390x844-nodes.json",
          "file": "screenshots/UI16-390x844.png",
          "viewport": {
            "width": 390,
            "height": 844
          },
          "deviceScaleFactor": 1,
          "type": "runtime-extracted-assembly-capture",
          "state": "fixture.json"
        },
        {
          "nodes": "screenshots/UI16-375x667-nodes.json",
          "file": "screenshots/UI16-375x667.png",
          "viewport": {
            "width": 375,
            "height": 667
          },
          "deviceScaleFactor": 1,
          "type": "runtime-extracted-assembly-capture",
          "state": "fixture.json"
        }
      ],
      "knownDifferences": [
        "当前招募签由CSS几何框+纸底+独立文字组成；与原图金饰签边细节不同。",
        "当前保底进度为连续填充条，原图为分段节点；该差异如实保留。",
        "当前按钮缺少原图完整金纹边框，不能当美术通过。"
      ],
      "stateId": "UI16-runtime-fixture-unlocked",
      "source": {
        "runtime": "prototype/public/ink-hub.js",
        "sha256": "be966fb19f06caf718b2671c72b3e1b48158b94821cfbc75d9830fbf208811e2",
        "css": [
          "runtime-hub.css",
          "runtime-ink-hub.css"
        ],
        "fixture": "fixture.json"
      },
      "referenceArtApproved": false,
      "screenshotKind": "assembly-render-from-extracted-runtime-components",
      "available": true
    },
    {
      "id": "UI15",
      "title": "武将详情",
      "html": "UI15.html",
      "referenceConceptId": "CONCEPT08",
      "status": "runtime-component-assembly",
      "matchesReferencePixels": false,
      "screenshots": [
        {
          "nodes": "screenshots/UI15-390x844-nodes.json",
          "file": "screenshots/UI15-390x844.png",
          "viewport": {
            "width": 390,
            "height": 844
          },
          "deviceScaleFactor": 1,
          "type": "runtime-extracted-assembly-capture",
          "state": "fixture.json"
        },
        {
          "nodes": "screenshots/UI15-375x667-nodes.json",
          "file": "screenshots/UI15-375x667.png",
          "viewport": {
            "width": 375,
            "height": 667
          },
          "deviceScaleFactor": 1,
          "type": "runtime-extracted-assembly-capture",
          "state": "fixture.json"
        }
      ],
      "knownDifferences": [
        "真实heroDialog显示角色名为对话框标题，技能说明文字更长；与原图武将详情标题和星级内容面板不同。",
        "当前没有原图同形金饰大面板和碎片独立进度条，实拍保持现行实现。",
        "背底为真实renderHeroes组成的列表，再经dialog::backdrop暗化，不以整图充当背底。"
      ],
      "stateId": "UI15-runtime-fixture-zhaoyun-star1",
      "source": {
        "runtime": "prototype/public/ink-hub.js",
        "sha256": "be966fb19f06caf718b2671c72b3e1b48158b94821cfbc75d9830fbf208811e2",
        "css": [
          "runtime-hub.css",
          "runtime-ink-hub.css"
        ],
        "fixture": "fixture.json"
      },
      "referenceArtApproved": false,
      "screenshotKind": "assembly-render-from-extracted-runtime-components",
      "available": true
    },
    {
      "id": "UI31",
      "title": "胜利结算",
      "html": "UI31.html",
      "referenceConceptId": "CONCEPT06",
      "status": "runtime-component-assembly",
      "matchesReferencePixels": false,
      "screenshots": [
        {
          "nodes": "screenshots/UI31-390x844-nodes.json",
          "file": "screenshots/UI31-390x844.png",
          "viewport": {
            "width": 390,
            "height": 844
          },
          "deviceScaleFactor": 1,
          "type": "runtime-extracted-assembly-capture",
          "state": "fixture.json"
        },
        {
          "nodes": "screenshots/UI31-375x667-nodes.json",
          "file": "screenshots/UI31-375x667.png",
          "viewport": {
            "width": 375,
            "height": 667
          },
          "deviceScaleFactor": 1,
          "type": "runtime-extracted-assembly-capture",
          "state": "fixture.json"
        }
      ],
      "knownDifferences": [
        "当前为真实settlementDialog弹窗，原效果图为大幅全屏结算版式。",
        "当前胜利徽记是CSS多边形加胜字，未用原图金色奖章；清晰标记为视觉缺口。",
        "弹窗奖励/段位/战报/按钮取真实函数，显示fixture并非服务器结算；不称线上实战截图。"
      ],
      "stateId": "UI31-runtime-fixture-win-undoubled",
      "source": {
        "runtime": "prototype/public/ink-hub.js",
        "sha256": "be966fb19f06caf718b2671c72b3e1b48158b94821cfbc75d9830fbf208811e2",
        "css": [
          "runtime-hub.css",
          "runtime-ink-hub.css"
        ],
        "fixture": "fixture.json"
      },
      "referenceArtApproved": false,
      "screenshotKind": "assembly-render-from-extracted-runtime-components",
      "available": true
    }
  ],
  "unavailable": [
    {
      "id": "UI24",
      "name": "战斗暂停",
      "reason": "属于独立战斗iframe，其画布、ink-art/ink-fidelity与暂停modal需另行提取；不使用旧ui-states模板填充。"
    },
    {
      "id": "UI08",
      "name": "战斗",
      "reason": "不在此次外围runtime提取范围。"
    }
  ],
  "limits": [
    "所有截图只是该离线样板的浏览器渲染，不标成Unity或真实账号运行截图。",
    "目标参考与当前游戏实现存在真实差异；样板忠实展示现行组件，不宣称恢复原稿。",
    "无网络API、无账号写入、无游戏规则变更。"
  ],
  "inspection": {
    "script": "inspect-nodes.js",
    "allCaptures": "dom-nodes.json",
    "nodeSelector": "data-assembly-node",
    "coordinateSystem": "CSS viewport pixels; top-left; DPR recorded per capture",
    "pseudoElements": "computed style recipes including content/background/border/transform; no invented pseudo-element bounding boxes",
    "engineStatus": "not Unity measured"
  },
  "qa": {
    "file": "browser-qa.json",
    "result": "PASS",
    "scope": "6 pages × 2 viewports; no page errors/missing assets/API requests; real font loaded; UI05/UI06 viewport overflow and feature arrangement checks passed",
    "artAcceptance": "not_evaluated"
  }
}