{
  "scope": "key-visual",
  "revision": "2026-10-27-key-visual-37",
  "title": "生活号主视觉创作",
  "textFit": {
    "mode": "contain-top",
    "constraint": "fixed-width-and-height",
    "scale": "uniform",
    "fontSize": "adaptive",
    "verticalAlign": "visible-glyph-top-within-measured-block",
    "independentRoles": [
      "title",
      "subtitle"
    ],
    "limit": "first-axis-to-boundary",
    "rule": "新组件主、副标题先分别按各自宽高上限等比适配，宽或高先触边即停止；用实际可见主标题高度、固定间距和实际可见副标题高度组成文字组，并在总文字区内垂直居中。横向对齐保持组件规定；原始单层y只作参考，实际y由文字组推导。字数不作为固定字号或容量上限。",
    "placement": "visible-text-group-center",
    "yPolicy": "source-region-y-is-reference; derive-visible-y-from-textGroup"
  },
  "contrastPolicy": {
    "rule": "检查文字与Logo实际落区；深蓝或其他深色背景使用白色文字和白色原Logo，浅色背景使用批准深色文字和原Logo。",
    "darkText": "#FFFFFF",
    "sample": "actual-text-and-logo-regions",
    "blueSurface": "饱和蓝色且非浅青留白按深色处理；不以整图平均亮度推断。"
  },
  "versionCheck": {
    "tool": "get_rule_version",
    "revisionField": "keyVisualRevision",
    "expectedRevisionArgument": "expectedRevision",
    "scope": "key-visual",
    "required": true,
    "checkAt": [
      "task-start",
      "before-generation",
      "before-finalize"
    ],
    "versionUrl": "/assets/design-reference/key-visual/composition/version.json",
    "rendererProtocolVersion": 3,
    "minimumRendererVersion": "2.2.1",
    "staleStatus": "needs-refresh",
    "currentRevision": "2026-10-27-key-visual-37"
  },
  "url": "/assets/design-reference/key-visual/common-rules.json",
  "loading": {
    "mode": "common-first-selected-family-then-exact-layout",
    "imageDelivery": "selected-input-files-only",
    "layoutParameters": "templateId-only",
    "styleParameters": "after-background; active component light/dark from actual text and header Logo regions; legacy approvedAppearance policy preserved",
    "fontDelivery": "renderer-reads-selected-font-binary-on-demand",
    "previewPolicy": "thumbnails-for-selection; input-images-for-generation"
  },
  "intake": {
    "direction": {
      "requiredBeforeGeneration": true,
      "reuseExistingChoice": true,
      "askWhenMissing": "这次主视觉使用横版还是竖版？",
      "defaults": {
        "portrait": {
          "width": 1200,
          "height": 1600
        },
        "landscape": {
          "width": 1920,
          "height": 1080
        }
      },
      "note": "方向先确定，已有尺寸沿用；未指定尺寸时使用对应默认尺寸。模型输出尺寸受限时先按同方向与比例生成，再扩图或裁切到目标尺寸。"
    },
    "content": {
      "requiredUserInputs": [
        "主题或一句话需求"
      ],
      "finalRequired": [
        "主标题",
        "副标题"
      ],
      "optional": [
        "时间"
      ],
      "autoExtractFromBrief": true,
      "note": "一句话即可开始，提取完整主副标题；按文本框范围自适应字号，不沿用旧固定字号字数上限。不新增业务事实。",
      "subtitlePolicy": "副标题先从已有事实提炼；无法得到有意义的卖点时只追问一句关键卖点，不编造优惠数字，也不用无信息的同义复述凑副标题。",
      "capacitySource": "fixed text-box bounds and actual fitted glyph bounds",
      "textCapacityPolicy": {
        "requiredBeforeInternalLayout": true,
        "capacitySource": "text-box-bounds-and-actual-glyph-measurement",
        "withinCapacity": "新组件主、副标题先分别按各自宽高上限等比适配，宽或高先触边即停止；用实际可见主标题高度、固定间距和实际可见副标题高度组成文字组，并在总文字区内垂直居中。横向对齐保持组件规定；原始单层y只作参考，实际y由文字组推导。字数不作为固定字号或容量上限。",
        "clearlyOverCapacity": {
          "action": "fit-within-selected-box",
          "guide": "先调整字号适配框内；不因旧固定字号或旧字数提示擅自删改文案。"
        },
        "slightlyOverCapacity": {
          "action": "fit-within-selected-box",
          "guide": "按文本框实测自适应，不再沿用旧固定字号字数上限。"
        },
        "mixedScript": "真实字体或真实透明字稿测量，保持字形比例。",
        "forbidden": [
          "stretch-text",
          "move-text-box",
          "inherit-reference-line-breaks",
          "add-lines-outside-template-range"
        ],
        "afterFit": "在目标投放尺寸下检查实际文字可读性与主副标题层级。框内适配后仍不可读或层级失衡时，停止继续缩字，不导出正式成品；优先换用适合原文的批准模板并重新排版，仍不适配则明确提示调整内容，未经用户同意不删改文案。"
      }
    },
    "interpretation": {
      "requiredBeforePrompt": true,
      "template": "此页面解读为：面向 <受众> 的 <页面类型>，采用 <风格> 语言，倾向于 <设计系统或美学风格>。",
      "guide": "先从已有需求判断受众与用途，结合实际采用的参考确定风格。生成Prompt前必须向用户输出下列一行解读，填入实际内容；这是一句说明，不是额外问卷或审批步骤，也不属于画面文案。"
    }
  },
  "delivery": {
    "mode": "two-completed-posters",
    "count": 2,
    "routes": [
      {
        "option": "A",
        "referenceMode": "past-kv",
        "count": 1,
        "backgroundGenerationRequired": true
      },
      {
        "option": "B",
        "referenceMode": "style-reference",
        "count": 1,
        "backgroundGenerationRequired": true,
        "subjectSelection": {
          "field": "subjectAssetId",
          "source": "selected-style-reference",
          "required": true,
          "allowedAssetIds": [
            "3D-01",
            "3D-03",
            "3D-04"
          ],
          "onMissing": "stop-and-refresh-selected-asset",
          "guide": "按所选风格素材的 subjectAssetId 获取 Logo 原始 PNG；不按风格名猜测，不默认全部使用彩色版。"
        }
      }
    ],
    "shared": [
      "approved-copy",
      "orientation",
      "dimensions",
      "brand-logo-specification"
    ],
    "selectionStage": "after-both-completed",
    "guide": "每次新需求先完成A已有KV、B风格图两张完整海报，再让用户2选1；不预先让用户选参考、路线或排版。两路分别真实图生图并准确合成，不能同一路重复两次、拼成一张或仅交付背景。 两路须各自通过背景构图与模板视觉对齐两道硬门；失败方案返修，不将未验收的图作为完成品。",
    "parameterLoading": "先读通用规则与三套组件索引，只取所选templateId的geometry；背景完成后按实际落区读取同组件的light/dark style，不加载全集。新组件保持同一几何，按文字和页眉Logo实际落区选light/dark；深蓝或深色使用白字和白色原Logo。旧数字画板仍按approvedAppearance及pairedTemplateId处理，不静默换几何。",
    "defaultBackgroundLayoutPolicy": "横版使用LANDSCAPE-LEFT；竖版使用PORTRAIT-LEFT或PORTRAIT-CENTER。旧数字画板仅兼容显式请求，沿用各自独立几何和明暗配对。 所有新组件均用于A/B真实图生图，不直接复用旧成品底图。",
    "unavailableRoute": "某路缺少可用真实参考或生图能力时如实说明，保留已完成方案，不将单张或同路线两张冒充双方案。"
  },
  "referenceModes": [
    {
      "id": "past-kv",
      "name": "旧 KV 延展",
      "preferredCount": 1,
      "guide": "实际附加所选参考图片；提示词仅使用图片编号与排版位置，不追加风格特征描述。"
    },
    {
      "id": "style-reference",
      "name": "风格参考创作",
      "preferredCount": 1,
      "guide": "默认选一组风格参考与其历史配对 Logo，分别作为真实图片输入。历史提示词作为记录，新分类提示词待用户确认；当前通用短模板保留。",
      "subjectSelection": {
        "field": "subjectAssetId",
        "source": "selected-style-reference",
        "required": true,
        "allowedAssetIds": [
          "3D-01",
          "3D-03",
          "3D-04"
        ],
        "onMissing": "stop-and-refresh-selected-asset",
        "guide": "按所选风格素材的 subjectAssetId 获取 Logo 原始 PNG；不按风格名猜测，不默认全部使用彩色版。"
      }
    },
    {
      "id": "subject-composition",
      "name": "品牌底图＋主题主体",
      "guide": "实际附加所选参考图片；提示词仅使用图片编号与排版位置，不追加风格特征描述。"
    }
  ],
  "selection": {
    "guide": "按用途分别选A已有KV与B风格图。横版使用LANDSCAPE-LEFT；竖版使用PORTRAIT-LEFT或PORTRAIT-CENTER。旧数字画板仅兼容显式请求，沿用各自独立几何和明暗配对。 先锁定文字与非核心外围范围，核心主体自由构图并避让文字和页眉Logo，再内部排版和图生图。新组件保持同一几何，按文字和页眉Logo实际落区选light/dark；深蓝或深色使用白字和白色原Logo。旧数字画板仍按approvedAppearance及pairedTemplateId处理，不静默换几何。",
    "loading": "先读分类与缩略图，再按明确ID获取所选生成输入图。缩略图用于选图；正式生成必须实际加载足够清晰的输入图。原图按需下载，并核对SHA256。",
    "purposeGuide": "清单purpose使用feature、event、promotion供筛选，purposeLabel展示功能点、活动宣传、促销。先按用途筛选，再看主体、版式和文字空间是否适配；KV序号对应人工库中的显示编号，实际获取使用清单准确ID。用途表达内容目的，不固定配色。 画布 2 新风格图暂不推定业务用途，按主体适配性、结构及文字空间选择，并读取其 subjectAssetId 配对 Logo。",
    "whenNoSamePurpose": "某一路缺少同用途可适配参考时，说明缺口及相近参考的替代依据，再选择该类中可用素材；不默默跨用途，不把旧KV冒充风格图。",
    "rationale": {
      "requiredBeforePrompt": true,
      "template": "选图依据：<用途匹配>；<所选参考及原因>。",
      "guide": "生成Prompt前，在页面解读之后简短说明A、B两路所选参考及用途匹配原因；缺少同用途素材时说明替代依据，不增设确认步骤。"
    },
    "historicalFacts": "历史KV含与当前需求不符的日期、优惠或权益等旧事实时排除该候选；仅用户明确指定此图时按当前需求适配，缺信息只补问必要事实，不一律擦除旧图文字。",
    "referenceRoles": "已有KV附所选真实KV，风格路线附实际选定风格图和主体图；提示词只说明图号和排版位置。当前三套组件文字使用本地批准汉仪雅库黑静态字体后期合成，TYPE-02仅供旧模板兼容。 画布 2 的风格参考按 subjectAssetId 选择白模、贝母或彩色版；默认一组独立工作流，不将不同 Logo 配对混为一组。"
  },
  "referenceAppearance": {
    "stage": "after-background",
    "resolveAfter": "background-production",
    "selection": "先锁定排版组件固定区域；实际背景完成后检查文字与顶部标识落区，深色用白字白Logo、浅色用批准深色字及Logo。新组件几何不因明暗改变；旧模板继续按各自approvedAppearance与配对策略处理。",
    "darkPastKvAssetIds": [
      "KV-DEA0EA1ED2AA",
      "KV-3CB0CC50E858",
      "KV-12C7A73BD139",
      "KV-C8B6CBCCC236"
    ],
    "unassignedPolicy": "inspect-final-text-and-logo-regions; never-infer-light-from-list-complement-or-reference-style",
    "guide": "检查文字与Logo实际落区；深蓝或其他深色背景使用白色文字和白色原Logo，浅色背景使用批准深色文字和原Logo。"
  },
  "brand": {
    "priority": "在品牌规范内满足用户已确认的用途、参考和美术偏好；不得无说明切换方向。Token控制精确品牌色、正式Logo与基础规范，文字表现按本次字体参考或用户选择执行。具体冲突应说明，不把局部修改或示例扩展成全局规则。",
    "colorGuide": "配色与光影直接参考本次选定图片，旧KV保留原表现；留白表示排版空间，不指定白色背景，不为先定字色改换背景。成图后才按文字与Logo实际落区读取批准配色与Logo样式；不追加固定色域、布光参数或效果禁用清单。",
    "gradientGuide": "需要精确复用品牌渐变时直接使用批准的背景素材；一般生图直接参考图片。",
    "decorationGuide": "保留必要排版空间，不新增用户未要求的装饰文字。",
    "visualLanguage": "直接参考选定图片的视觉表现；新创默认3D艺术与工作室渲染质感，历史KV和真实主体保留原表现。"
  },
  "orientationRouting": {
    "portrait": "PORTRAIT-LEFT prefers two semantic title lines with short/indivisible exceptions and preserves explicit breaks; PORTRAIT-CENTER remains content-driven; title uses approved HYYaKuHeiX-75W with a 10-degree right slant, subtitle uses LanTingHei Regular wght=340; main-title visible line gaps equal half the fixed title/subtitle gap; fit both regions and vertically center the visible stack",
    "landscape": {
      "rules": "/assets/design-reference/key-visual/landscape-flow.json",
      "requiredAssetIds": [
        "FONT-YAKU-75W",
        "FONT-LANTING-REGULAR",
        "FONT-YAKU-45W",
        "DETAIL-01"
      ],
      "textMode": "approved-static-font-composition",
      "directFontTypesettingAllowed": true,
      "systemFontFallbackAllowed": false,
      "subtitleDecorationRequired": true,
      "layoutComponentId": "LANDSCAPE-LEFT",
      "titleLineBreakPolicy": {
        "mode": "semantic-prefer-two-lines",
        "preferredLines": 2,
        "preserveExplicitBreaks": true,
        "allowSingleLineWhen": "short-or-indivisible",
        "guide": "横版及竖版居左主标题按内容语义尽量拆为两行，不机械按字数中点切分；短标题或不可合理拆分的内容保持单行，尊重用户明确换行。竖版居中按当前内容决定行数，不强制两行。"
      }
    }
  },
  "typography": {
    "editableFontMetricsApplyTo": "all-current-components",
    "subtitleLineBreakPolicy": {
      "mode": "component-box-fit",
      "required": true,
      "failBlocking": true,
      "guide": "优先完整表达副标题，在独立区域内适配；不继承示意行数，几何通过后仍检查可读性。",
      "portraitMeasurement": "approved font at adaptive font size within text box",
      "landscapeMeasurement": "approved LanTingHei Regular wght=340 at the adaptive fitted size after DETAIL-01 reservation",
      "availableRegion": "use full fixed or allocated subtitle region; do not narrow region to manufacture overflow",
      "forbidden": [
        "inherit-sample-line-count",
        "stretch-text",
        "narrow-region-to-manufacture-overflow"
      ],
      "portraitUserRequestEvidence": {
        "field": "copy.subtitleLineBreakIntent",
        "reason": "user-requested",
        "sourceQuote": "original explicit line-break instruction, not the current subtitle copy; required",
        "sourceText": "full original user instruction containing sourceQuote; required"
      },
      "landscapeEvidence": {
        "field": "receipt.metrics.subtitle",
        "required": [
          "fontAssetId",
          "fontSize",
          "fixedBox",
          "resolvedPixelBounds"
        ],
        "overflow": "actual LanTingHei Regular Canvas measurement inside the subtitle region after DETAIL-01 reservation"
      },
      "receipt": "portrait: metrics.subtitleLineBreakDecision; landscape: metrics.lineBreakDecision; actual measurement and reason retained",
      "onFailure": "停止交付，返回内部排版/字稿生成后重验；不静默合并、缩字或移动固定模板。",
      "templateLineLimitOverridesExplicitBreakRequest": false,
      "legacyTemplatePolicy": "旧数字模板按各自历史行数限制。"
    },
    "titleLineBreakPolicy": {
      "mode": "selected-component-policy",
      "required": true,
      "guide": "横版及竖版居左主标题按内容语义尽量拆为两行，不机械按字数中点切分；短标题或不可合理拆分的内容保持单行，尊重用户明确换行。竖版居中按当前内容决定行数，不强制两行。",
      "landscape": {
        "mode": "semantic-prefer-two-lines",
        "preferredLines": 2,
        "preserveExplicitBreaks": true,
        "allowSingleLineWhen": "short-or-indivisible",
        "guide": "横版及竖版居左主标题按内容语义尽量拆为两行，不机械按字数中点切分；短标题或不可合理拆分的内容保持单行，尊重用户明确换行。竖版居中按当前内容决定行数，不强制两行。"
      },
      "portrait": {
        "mode": "selected-component-policy",
        "components": {
          "PORTRAIT-LEFT": {
            "mode": "semantic-prefer-two-lines",
            "preferredLines": 2,
            "preserveExplicitBreaks": true,
            "allowSingleLineWhen": "short-or-indivisible",
            "guide": "横版及竖版居左主标题按内容语义尽量拆为两行，不机械按字数中点切分；短标题或不可合理拆分的内容保持单行，尊重用户明确换行。竖版居中按当前内容决定行数，不强制两行。"
          },
          "PORTRAIT-CENTER": {
            "mode": "content-driven-box-fit",
            "preserveExplicitBreaks": true,
            "preferredLines": null
          }
        }
      },
      "legacyTemplatePolicy": "数字画板仍保留各自历史行数和显式换行证据检查。"
    },
    "verticalAlign": "visible-text-group-center",
    "textFit": {
      "mode": "contain-top",
      "constraint": "fixed-width-and-height",
      "scale": "uniform",
      "fontSize": "adaptive",
      "verticalAlign": "visible-glyph-top-within-measured-block",
      "independentRoles": [
        "title",
        "subtitle"
      ],
      "limit": "first-axis-to-boundary",
      "rule": "新组件主、副标题先分别按各自宽高上限等比适配，宽或高先触边即停止；用实际可见主标题高度、固定间距和实际可见副标题高度组成文字组，并在总文字区内垂直居中。横向对齐保持组件规定；原始单层y只作参考，实际y由文字组推导。字数不作为固定字号或容量上限。",
      "placement": "visible-text-group-center",
      "yPolicy": "source-region-y-is-reference; derive-visible-y-from-textGroup"
    },
    "metrics": "selected-geometry.title-or-subtitle.textLayout",
    "fontRoles": {
      "title": {
        "assetId": "FONT-YAKU-75W",
        "role": "title",
        "family": "HYYaKuHeiX",
        "styleName": "75W",
        "postScriptName": "HYYaKuHeiX-75W",
        "weight": 500,
        "url": "/assets/design-reference/key-visual/composition/fonts/HYYaKuHeiX-75W.ttf",
        "format": "ttf",
        "static": true,
        "bytes": 2633916,
        "sha256": "868c8d248e17587fb4d240e16548a1b01c07a72fbb50a1221470f4b69943c132",
        "metrics": {
          "unitsPerEm": 1000,
          "ascent": 1088,
          "descent": -333,
          "lineGap": 0
        }
      },
      "subtitle": {
        "url": "/assets/design-reference/key-visual/composition/fonts/FZVariable-LanTingHeiK-340.ttf",
        "format": "ttf",
        "weight": 340,
        "static": true,
        "bytes": 6227120,
        "sourceUrl": "/assets/fonts/FZVariable-LanTingHeiK.woff2",
        "metrics": {
          "unitsPerEm": 1000,
          "ascent": 896,
          "descent": -287,
          "lineGap": 0
        },
        "assetId": "FONT-LANTING-REGULAR",
        "role": "subtitle",
        "family": "FZVariable-LanTingHeiK",
        "styleName": "Regular",
        "postScriptName": "FZVariable-LanTHK-GBK1-0",
        "sourceNamedInstance": "Regular",
        "axis": {
          "wght": 340
        },
        "sha256": "9fac9cb20d7a582441e6342308a8d0ece1a926464921d951440af59287921c11"
      },
      "auxiliary": {
        "assetId": "FONT-YAKU-45W",
        "role": "auxiliary",
        "family": "HYYaKuHeiX",
        "styleName": "45W",
        "postScriptName": "HYYaKuHeiX-45W",
        "weight": 200,
        "url": "/assets/design-reference/key-visual/composition/fonts/HYYaKuHeiX-45W.ttf",
        "format": "ttf",
        "static": true,
        "bytes": 2670460,
        "sha256": "3969f73a60015f6345639154ca45c723f30ea1df98a22549f21266b0f9fa381a",
        "metrics": {
          "unitsPerEm": 1000,
          "ascent": 1017,
          "descent": -333,
          "lineGap": 0
        }
      }
    },
    "guide": "新组件主、副标题先分别按各自宽高上限等比适配，宽或高先触边即停止；用实际可见主标题高度、固定间距和实际可见副标题高度组成文字组，并在总文字区内垂直居中。横向对齐保持组件规定；原始单层y只作参考，实际y由文字组推导。字数不作为固定字号或容量上限。 当前三套组件主标题统一使用汉仪雅酷黑X 75W（HYYaKuHeiX-75W，OS/2 500），向右倾斜10°；副标题统一使用方正兰亭黑Regular（原字库命名实例wght=340），保持正体；辅助文字仍为45W。双行主标题的实际可见行间空隙固定为主副标题间距的1/2。程序读取批准静态字体并校验SHA256，文字在背景完成后合成。",
    "titleLineGapPolicy": {
      "mode": "fixed-visible-gap",
      "ratio": 0.5,
      "relativeTo": "textGroup.gapPx",
      "measurement": "next-line-visible-top minus previous-line-visible-bottom",
      "guide": "双行主标题之间的实际可见空隙等于主标题与副标题固定间距的一半；倾斜后测量，不使用字体默认行高。"
    }
  },
  "composition": {
    "guide": "/assets/design-reference/key-visual/composition/guide.md",
    "renderer": "/assets/design-reference/key-visual/composition/font-compose.mjs",
    "versionUrl": "/assets/design-reference/key-visual/composition/version.json",
    "supportedTemplateIds": [
      "LANDSCAPE-LEFT",
      "PORTRAIT-LEFT",
      "PORTRAIT-CENTER"
    ],
    "preflightBeforeBackground": true,
    "fontFallbackAllowed": false,
    "logoPlaceholderAllowed": false,
    "versionPolicy": "match-live-version-geometry-style",
    "guideSummary": "先固定总文字区、页眉Logo及非核心外围范围，再制作背景；核心主体没有专属矩形，位置与比例自由，仅避让实际文字组和页眉Logo。当前三套组件主标题统一使用汉仪雅酷黑X 75W（HYYaKuHeiX-75W，OS/2 500），向右倾斜10°；副标题统一使用方正兰亭黑Regular（原字库命名实例wght=340），保持正体；辅助文字仍为45W。双行主标题的实际可见行间空隙固定为主副标题间距的1/2。程序读取批准静态字体并校验SHA256，文字在背景完成后合成。",
    "failurePolicy": "字体身份/字重/基线/行高/Logo/溢出/版本或实际视觉验收未通过时返回未完成，保留诊断草稿，不交付标称完成的海报。Agent自行验收，不向用户请求排版或审核确认。 doctor、draft、finalize均实时读取线上version.json；网络失败、旧revision、旧合成协议或过低renderer版本一律停止正式导出。 主体材质或重点色未继承、白模本体仍白、缺少所选风格素材和材质视觉证据时，同样停止finalize。",
    "rendererProtocolVersion": 3,
    "minimumRendererVersion": "2.2.1",
    "onlineVersionRequired": true,
    "textFit": {
      "mode": "contain-top",
      "constraint": "fixed-width-and-height",
      "scale": "uniform",
      "fontSize": "adaptive",
      "verticalAlign": "visible-glyph-top-within-measured-block",
      "independentRoles": [
        "title",
        "subtitle"
      ],
      "limit": "first-axis-to-boundary",
      "rule": "新组件主、副标题先分别按各自宽高上限等比适配，宽或高先触边即停止；用实际可见主标题高度、固定间距和实际可见副标题高度组成文字组，并在总文字区内垂直居中。横向对齐保持组件规定；原始单层y只作参考，实际y由文字组推导。字数不作为固定字号或容量上限。",
      "placement": "visible-text-group-center",
      "yPolicy": "source-region-y-is-reference; derive-visible-y-from-textGroup"
    },
    "contrastPolicy": {
      "rule": "检查文字与Logo实际落区；深蓝或其他深色背景使用白色文字和白色原Logo，浅色背景使用批准深色文字和原Logo。",
      "darkText": "#FFFFFF",
      "sample": "actual-text-and-logo-regions",
      "blueSurface": "饱和蓝色且非浅青留白按深色处理；不以整图平均亮度推断。"
    },
    "readabilityRule": "在目标投放尺寸下检查实际文字可读性与主副标题层级。框内适配后仍不可读或层级失衡时，停止继续缩字，不导出正式成品；优先换用适合原文的批准模板并重新排版，仍不适配则明确提示调整内容，未经用户同意不删改文案。",
    "defaultTemplateIds": [
      "PORTRAIT-LEFT",
      "PORTRAIT-CENTER"
    ],
    "legacyRenderer": "/assets/design-reference/key-visual/composition/portable-compose.mjs",
    "dependencies": [
      "/assets/design-reference/key-visual/composition/text-layout.mjs",
      "/assets/design-reference/key-visual/composition/reference-material.mjs"
    ],
    "referenceEvidence": {
      "required": true,
      "routeArgument": "--route",
      "allowedRoutes": [
        "past-kv",
        "style-reference"
      ],
      "styleAssetArgument": "--style-reference-asset",
      "requiredFor": "style-reference",
      "guide": "doctor和draft显式声明路线；风格路线绑定本次get_material_assets准确素材JSON及其materialPolicy。finalize必须检查该素材要求的材质验收项和实际视觉证据。"
    },
    "materialReview": {
      "required": true,
      "failBlocking": true,
      "when": "after-background-before-style",
      "appliesTo": "style-reference",
      "guide": "并列查看所选风格参考、配对Logo输入与实际生成主体，核对主体材质与配色。白模只提供造型，必须使用参考重点色，主体不能仍为大面积白色白模；背景或装饰变色不能代替主体材质迁移。 若所选素材 materialPolicy.colorOverride 指定配色，显式配色优先于继承参考配色；仅该素材生效，实际全图配色未通过不得交付。",
      "checks": [
        "referenceMaterialInherited",
        "coreUsesAccentColor",
        "whiteModelBodyAbsent"
      ],
      "onFailure": "重新图生图并复核主体材质、配色与图文避让；材质失败不能因字体、尺寸或避让通过而标记完成。",
      "evidence": [
        "referenceAssetId",
        "subjectAssetId",
        "coreMaterialDescription",
        "coreBaseColorDescription",
        "whiteBodyAbsent",
        "referenceAndOutputVisuallyCompared"
      ]
    },
    "appliesTo": "all current Section 2 components; legacy numbered templates use legacyRenderer"
  },
  "productSubjects": {
    "guide": "旧KV沿用原主体和卡片关系，不附加或替换独立卡面；原稿保字样规则只适用于本次选用的独立产品素材。本次旺卡仅在风格参考路线需要展示卡片时附加VIP/SVIP两张原稿，其他主题不默认两卡；不虚构权益或价格关系。"
  },
  "people": {
    "guide": "P01转为人物素材参考，沿用批准人物的服装、姿态、光影和商业摄影质感；人物结构、手部与手机应可信。原P01成套海报流程暂时隐藏，不套用旧标题、压板或旧业务内容。",
    "screenPolicy": "素材中的手机历史界面只属于样例。需要表现本次产品界面时使用真实截图并后期贴屏，保护手指与边框；未提供截图不得照搬历史界面当成当前事实，或生成虚构功能与数据。"
  },
  "logo": {
    "guide": "位置和大小先取geometry，成图后按Logo实际落区读取style的批准黑白原稿并等比合成，不交给生图决定。"
  },
  "portraitTemplates": {
    "layoutIndex": "/assets/design-reference/key-visual/layout-index.json",
    "retiredTemplateIds": [
      "PORTRAIT-02",
      "PORTRAIT-06"
    ],
    "appearanceVariants": {
      "scope": "independent-fixed-geometry-templates",
      "source": "Figma Section 1, 413:7336",
      "pairs": {
        "1": 5,
        "3": 7,
        "4": 8
      },
      "selection": "content-family-first-lock-template-geometry; after-background-verify-appearance",
      "onMismatch": "needs-replan",
      "guide": "本项仅适用旧数字模板的独立明暗配对。新居左/居中组件各自支持light/dark，几何保持不变。"
    },
    "selection": {
      "guide": "优先选竖版居左或居中组件；独立适配主副字形后按固定间距组成文字组并在总文字区垂直居中。旧画板仅供显式兼容。",
      "defaultTemplateId": "PORTRAIT-LEFT",
      "activeTemplateIds": [
        "PORTRAIT-LEFT",
        "PORTRAIT-CENTER"
      ],
      "overflow": "intake.content.textCapacityPolicy",
      "legacyTemplateIds": [
        "PORTRAIT-01",
        "PORTRAIT-03",
        "PORTRAIT-04",
        "PORTRAIT-05",
        "PORTRAIT-07",
        "PORTRAIT-08"
      ]
    },
    "confirmation": {
      "required": false,
      "audience": "agent",
      "before": "background-production",
      "guide": "排版确认仅指Agent内部实排与检查，不向用户展示模板候选或要求选择/确认；完成全图后再交付用户判断满意度。"
    },
    "workflow": "先选居左或居中组件，读取文字尺寸上限、总文字区及固定间距，实测字形并推导位置；页眉Logo固定，核心主体自由构图并避让实际文字组及页眉Logo，外围仅限制非核心元素；成图后检查实际落区及黑白字色。",
    "internalLayoutReview": {
      "required": true,
      "audience": "agent",
      "guide": "新组件主、副标题先分别按各自宽高上限等比适配，宽或高先触边即停止；用实际可见主标题高度、固定间距和实际可见副标题高度组成文字组，并在总文字区内垂直居中。横向对齐保持组件规定；原始单层y只作参考，实际y由文字组推导。字数不作为固定字号或容量上限。 新组件仅保护实际文字组及页眉Logo，核心主体没有专属内框；外围框仅约束非核心元素。旧数字模板保留其历史主体放置规则。",
      "regionPlan": {
        "coordinatesInPrompt": false,
        "subjectPlanRequired": true,
        "subjectPlanGuide": "记录核心Logo及非核心前景元素实际可见范围；核心主体位置和比例自由，仅避让实际文字组与页眉Logo；人工视觉估计明确标记，不冒充自动语义分割。",
        "guide": "按选定参数真实实排，保护区、主体区及目标位置占比保存在内部；实际背景Prompt只用比例、参考角色、目标主体区位置和上方/左侧留白。"
      },
      "afterBackgroundGeneration": "新组件实审核心主体避让实际文字组及页眉Logo，不限制其内框或外围框包含关系；非核心前景位于外围范围且不遮挡文字或页眉。旧数字模板继续其历史主体约束。按实际背景决定字色，合成后核对对齐和可读性。"
    }
  },
  "layoutSelection": {
    "index": "/assets/design-reference/key-visual/layout-index.json",
    "tool": "get_material_rules",
    "requiredArguments": [
      "scope",
      "templateId",
      "expectedRevision"
    ],
    "scope": "key-visual",
    "appliesTo": "portrait; landscape uses orientationRouting.landscape without a portrait templateId",
    "styleStage": {
      "stage": "style",
      "requiredArguments": [
        "scope",
        "templateId",
        "appearance",
        "expectedRevision"
      ],
      "appearanceValues": [
        "light",
        "dark"
      ],
      "when": "after-background-production"
    },
    "guide": "新任务选定组件geometry，读取textGroup总文字区和固定间距。主副标题分别先触宽高边界适配，再按实际可见高度组合居中；横版及竖版居左标题按语义尽量两行。背景完成后取light/dark样式，旧模板仅显式兼容。"
  },
  "prompt": {
    "backgroundTemplates": {
      "pastKv": "{{ratio}}，参考【图1】，按目标画幅重新构图，主体置于{{subjectPlacement}}，画面{{whitespace}}留白。",
      "styleReference": "{{ratio}}，参考{{styleImage}}，使用{{subjectImage}}作为核心视觉元素，重新设计海报背景。主体置于{{subjectPlacement}}，画面{{whitespace}}留白。"
    },
    "subjectPlacement": {
      "selection": "reference-and-composition-with-text-header-exclusion",
      "values": {
        "上方": "按参考与构图自由安排，避开上方文字和页眉Logo",
        "左侧": "按参考与构图自由安排，避开左侧文字和页眉Logo"
      },
      "guide": "新组件不设核心Logo主体专属区域，主体的位置与比例按参考和构图自由安排，仅避让实际文字组及页眉Logo；外围框只约束非核心前景元素，不作为核心主体边界，不要求填满。纯背景可铺满画布。"
    },
    "backgroundOutput": "仅生成背景；文字与正式Logo后置合成。",
    "styleSubject": {
      "name": "配对 Logo",
      "required": true,
      "field": "subjectAssetId",
      "source": "selected-style-reference",
      "allowedAssetIds": [
        "3D-01",
        "3D-03",
        "3D-04"
      ],
      "onMissing": "stop-and-refresh-selected-asset",
      "guide": "按所选风格素材的 subjectAssetId 获取 Logo 原始 PNG；不按风格名猜测，不默认全部使用彩色版。"
    },
    "promptEngineeringReview": {
      "status": "active-white-model-material-policy",
      "newTemplatesActive": false,
      "historicalPromptPolicy": "archived source remains evidence-only; explicitly curated material/color clauses are published in selected asset materialPolicy; old layout clauses are not production instructions",
      "whiteModelPolicyActive": true,
      "originalMaterialClausesActive": true
    },
    "promptPolicy": {
      "rule": "保留所选工作流原有的材质、配色和重点色约束；白模必须追加whiteModelMaterial。仅额外加入真实附图编号、画幅、排版位置与留白，不自行新增材质、质感、画风或字形描述。原工作流旧位置要求由当前实排位置替代，文字由批准字体后置合成。 若所选素材 materialPolicy.colorOverride 指定配色，显式配色优先于继承参考配色；仅该素材生效，实际全图配色未通过不得交付。",
      "referenceNamesInPrompt": false,
      "imageRoleSubstitution": "styleImage与subjectImage只填【图N】，不拼接素材名称；多张风格图时主体图号跟随真实附图顺序。",
      "preserveOriginalMaterialConstraints": true,
      "whiteModelConstraintRequired": true,
      "selectedAssetPolicyField": "materialPolicy"
    },
    "whiteModelMaterial": {
      "id": "WHITE-MODEL-MATERIAL-01",
      "revision": "2026-10-27-key-visual-37",
      "required": true,
      "subjectAssetId": "3D-04",
      "inputRole": "geometry-only",
      "appearanceSource": "selected-style-reference-core",
      "mustUseAccentColor": true,
      "whiteCoreBodyAllowed": false,
      "promptAddition": "{{subjectImage}}白模仅提供Logo造型；主体材质和配色继承{{styleImage}}的核心元素，必须使用重点色，主体不能保留白色白模外观。",
      "guide": "白模配对只规定输入造型，不规定最终白色外观。保留所选原工作流已有材质、层次、光影、重点色及条件配色要求；不自行增加具体材质名或画风词。自然反光不等同于大面积白色本体。",
      "reviewChecks": [
        "referenceMaterialInherited",
        "coreUsesAccentColor",
        "whiteModelBodyAbsent"
      ]
    },
    "guide": "内部排版确定上方或左侧留白；图片输入清单与视觉Prompt分开，不追加坐标表、字体规格或整份Skill。"
  },
  "iteration": {
    "local": "用户2选1后，局部修改只处理选定方案并保留未要求改变的内容，不重新拉全库或默认再生两张；用户明确要求新一轮双方案时再按两路制作。",
    "global": "两张成品都不满意时，按当前用途提供最多4张旧KV与最多4张风格图供选择，再依用户选定方向重做；这些是参考候选，不是额外8张成品。候选不足按实展示并说明替代原因。",
    "candidateLimits": {
      "past-kv": 4,
      "style-reference": 4
    }
  },
  "governance": {
    "guide": "素材库与规则由品牌团队人工维护、审核和发布。新生成KV只作为本次项目资产，不自动加入过往KV库或风格库；库更新后新任务读取最新版本，进行中的项目保留所用素材ID、SHA256与规则版本。",
    "autoIngest": false,
    "manualReviewRequiredForLibrary": true
  },
  "acceptance": {
    "guide": "当前三套组件统一使用汉仪雅酷黑X 75W（HYYaKuHeiX-75W，OS/2 500）主标题，并向右倾斜10°；副标题统一使用方正兰亭黑Regular（原字库命名实例wght=340），保持正体；辅助文字仍为45W。双行主标题的实际可见行间空隙固定为主副标题间距的1/2。程序读取批准静态字体并校验SHA256，文字在背景完成后合成。核对准确文案、倾斜后实际字形边界、固定文本框、主副间距、文字组垂直居中、DETAIL-01和正式Logo；深色落区用白字。 风格路线必须核对主体材质继承；白模本体不得保持白色，重点色必须落在主体上。",
    "checks": [
      "purpose-match",
      "reference-purpose",
      "orientation-and-dimensions",
      "verified-copy",
      "product-artwork-preserved",
      "visual-review",
      "official-logo-composite",
      "generation-image-input-if-required",
      "portrait-fixed-template-composition",
      "title-art-reference-image-input",
      "title-art-cutout-composition",
      "portrait-internal-layout-reviewed",
      "background-prompt-protected-regions",
      "subject-clear-of-text-and-logo",
      "selected-reference-appearance",
      "dark-background-transition-preserved",
      "dark-text-and-logo-composition",
      "two-completed-posters",
      "distinct-past-kv-and-style-reference-routes",
      "same-copy-and-dimensions",
      "selection-after-both-completed",
      "geometry-without-appearance",
      "style-after-background",
      "actual-title-subtitle-glyph-spacing",
      "target-frame-subject-recomposition",
      "background-composition-review-passed",
      "no-inherited-unused-whitespace",
      "template-visual-alignment-review-passed",
      "exact-approved-font-no-fallback",
      "official-logo-no-placeholder",
      "version-consistency",
      "compositor-draft-before-finalize",
      "landscape-title-and-subtitle-image-input",
      "landscape-generated-transparent-text-layers",
      "landscape-exact-copy-and-type02-character",
      "landscape-subtitle-trailing-detail01",
      "landscape-no-direct-font-fallback",
      "subtitle-single-line-first",
      "content-capacity-before-layout",
      "portrait-01-05-shared-type02-reference",
      "core-logo-protected-regions-clear",
      "non-core-foreground-inside-outer-region",
      "component-text-size-limits",
      "fixed-visible-title-subtitle-gap",
      "text-group-vertical-centering",
      "semantic-landscape-title-lines",
      "style-reference-material-inherited",
      "white-model-core-uses-accent-color",
      "white-model-body-absent"
    ],
    "backgroundCompositionReview": {
      "required": true,
      "failBlocking": true,
      "when": "after-background-before-style",
      "audience": "agent",
      "appliesTo": [
        "past-kv",
        "style-reference"
      ],
      "orientationChanges": [
        "landscape-to-portrait",
        "portrait-to-landscape",
        "same-orientation-recomposition"
      ],
      "reference": "current composition and actual visible text/header protection; active core subject has no dedicated region",
      "checks": [
        {
          "id": "subject-placement",
          "guide": "新组件核心主体的位置与比例自由安排，记录实际可见边界并检查避让文字组与页眉Logo；不要求落在专属矩形或外围框内。旧数字模板保留各自主体放置规则。"
        },
        {
          "id": "subject-scale",
          "guide": "主体比例按参考与当前构图判断，保留元素完整性，不设统一尺寸、固定中心或矩形占满要求。"
        },
        {
          "id": "no-inherited-unused-whitespace",
          "guide": "除已规划的文字、Logo保护区和必要安全边距，不得因沿用原横竖构图留下大块无用途侧边空白；上方留字不能同时无故保留原横版左侧空白。"
        },
        {
          "id": "reference-integrity",
          "guide": "已有KV核心造型、材质、配色和主要关系保留，整体等比缩放，核心元素完整、不拉伸、不擅自新增或替换。"
        },
        {
          "id": "protected-regions-clear",
          "guide": "主体、强对比边缘和装饰避开实际文字及Logo保护区，不以移动固定文字来腾位置。"
        },
        {
          "id": "core-logo-protected-regions-clear",
          "guide": "记录coreLogoBounds作为实际可见边界证据；新组件只检查与实际文字组及页眉Logo的避让，不作内框或外围包含校验。旧数字模板按自身历史约束。"
        },
        {
          "id": "non-core-images-inside-outer-region",
          "guide": "实审非核心前景元素并记录nonCoreImageBounds；无非核心元素时为空数组，纯背景不受此框限制。"
        },
        {
          "id": "style-reference-material-inherited",
          "guide": "并列查看所选风格参考、配对Logo输入与实际生成主体，核对主体材质与配色。白模只提供造型，必须使用参考重点色，主体不能仍为大面积白色白模；背景或装饰变色不能代替主体材质迁移。"
        }
      ],
      "evidence": [
        "reference-and-composition-intent",
        "planned-subject-placement-and-scale",
        "actual-subject-visible-bounds-or-explicit-visual-estimate",
        "protected-region-overlap-review",
        "rendered-background-visual-review"
      ],
      "onFailure": "暂停该路后续合成，调整当前构图或重新图生图后复验文字与页眉避让、非核心外围范围及可读性；不移动固定文字、拉伸图形或通过新增装饰掩盖问题。缺少实际视觉证据不得标记通过。",
      "imageZones": {
        "rule": "新组件不设核心Logo主体专属区域，主体的位置与比例按参考和构图自由安排，仅避让实际文字组及页眉Logo；外围框只约束非核心前景元素，不作为核心主体边界，不要求填满。纯背景可铺满画布。",
        "coreLogoMeaning": "main visual subject, not the separate header brand signature",
        "outerRegionMeaning": "only non-core foreground containment; never a core-subject boundary or occupancy target",
        "background": "full-canvas allowed",
        "measurement": "actual visible bounds from visual inspection, not automatic semantic segmentation",
        "reviewFields": [
          "coreLogoBounds",
          "nonCoreImageBounds"
        ],
        "coreLogoConstraint": "unrestricted-except-text-and-header"
      }
    },
    "templateVisualAlignmentReview": {
      "required": true,
      "failBlocking": true,
      "guide": "当前三套组件统一使用汉仪雅酷黑X 75W（HYYaKuHeiX-75W，OS/2 500）主标题，并向右倾斜10°；副标题统一使用方正兰亭黑Regular（原字库命名实例wght=340），保持正体；辅助文字仍为45W。双行主标题的实际可见行间空隙固定为主副标题间距的1/2。程序读取批准静态字体并校验SHA256，文字在背景完成后合成。核对准确文案、倾斜后实际字形边界、固定文本框、主副间距、文字组垂直居中、DETAIL-01和正式Logo；深色落区用白字。",
      "checks": [
        "text-size-limits",
        "actual-visible-fixed-gap",
        "text-group-center",
        "maximal-contain-fit",
        "original-font-and-weight",
        "logo-placement",
        "contrast",
        "readability-at-target-display-size",
        "title-subtitle-hierarchy"
      ],
      "readabilityRule": "在目标投放尺寸下检查实际文字可读性与主副标题层级。框内适配后仍不可读或层级失衡时，停止继续缩字，不导出正式成品；优先换用适合原文的批准模板并重新排版，仍不适配则明确提示调整内容，未经用户同意不删改文案。",
      "referenceRule": "验收只按当前问题选少量批准模板或已批准成品对照，不读取整个素材库。对照来源必须标明批准范围；生成候选、待修稿和背景参考不能当作完整成品通过基准。缺少对应合格成品时明确记录待补，继续实际视觉检查，不虚构批准状态。",
      "onFailure": "needs-replan-or-content-adjustment"
    },
    "subtitleLineBreakReview": {
      "required": true,
      "guide": "新组件按准确文案与独立宽高区域适配，不继承参考图断行；旧数字模板保留其兼容行数检查。"
    },
    "textCapacityReview": {
      "required": true,
      "guide": "新组件主、副标题先分别按各自宽高上限等比适配，宽或高先触边即停止；用实际可见主标题高度、固定间距和实际可见副标题高度组成文字组，并在总文字区内垂直居中。横向对齐保持组件规定；原始单层y只作参考，实际y由文字组推导。字数不作为固定字号或容量上限。",
      "checks": [
        "actual-glyph-size-within-limits",
        "uniform-scaling",
        "visible-text-group-inside-total-region",
        "fixed-gap-preserved",
        "preserve-exact-copy"
      ],
      "readabilityRule": "在目标投放尺寸下检查实际文字可读性与主副标题层级。框内适配后仍不可读或层级失衡时，停止继续缩字，不导出正式成品；优先换用适合原文的批准模板并重新排版，仍不适配则明确提示调整内容，未经用户同意不删改文案。"
    },
    "textGroupReview": {
      "required": true,
      "guide": "新组件主、副标题先分别按各自宽高上限等比适配，宽或高先触边即停止；用实际可见主标题高度、固定间距和实际可见副标题高度组成文字组，并在总文字区内垂直居中。横向对齐保持组件规定；原始单层y只作参考，实际y由文字组推导。字数不作为固定字号或容量上限。",
      "checks": [
        "visible-title-bottom-to-visible-subtitle-top-equals-gapPx",
        "visible-group-center-equals-textGroup-region-center",
        "group-inside-total-region",
        "individual-width-height-limits",
        "header-logo-and-image-regions-unchanged"
      ]
    },
    "landscapeFontReview": {
      "required": true,
      "guide": "主标题必须使用FONT-YAKU-75W并向右倾斜10°；副标题必须使用FONT-LANTING-REGULAR（wght=340）。双行主标题可见间隙为固定主副间距一半，核对SHA256、字形边界、字号、组合居中和DETAIL-01尾随位置。"
    },
    "styleReferenceMaterialReview": {
      "required": true,
      "failBlocking": true,
      "when": "after-background-before-style",
      "appliesTo": "style-reference",
      "guide": "并列查看所选风格参考、配对Logo输入与实际生成主体，核对主体材质与配色。白模只提供造型，必须使用参考重点色，主体不能仍为大面积白色白模；背景或装饰变色不能代替主体材质迁移。 若所选素材 materialPolicy.colorOverride 指定配色，显式配色优先于继承参考配色；仅该素材生效，实际全图配色未通过不得交付。",
      "checks": [
        "referenceMaterialInherited",
        "coreUsesAccentColor",
        "whiteModelBodyAbsent"
      ],
      "onFailure": "重新图生图并复核主体材质、配色与图文避让；材质失败不能因字体、尺寸或避让通过而标记完成。",
      "evidence": [
        "referenceAssetId",
        "subjectAssetId",
        "coreMaterialDescription",
        "coreBaseColorDescription",
        "whiteBodyAbsent",
        "referenceAndOutputVisuallyCompared"
      ]
    }
  },
  "layoutComponents": {
    "url": "/assets/design-reference/key-visual/layout-components.json",
    "resourceUri": "brand://shenghuohao/key-visual/layout-components",
    "componentIds": [
      "LANDSCAPE-LEFT",
      "PORTRAIT-LEFT",
      "PORTRAIT-CENTER"
    ],
    "imageZonePolicy": {
      "rule": "新组件不设核心Logo主体专属区域，主体的位置与比例按参考和构图自由安排，仅避让实际文字组及页眉Logo；外围框只约束非核心前景元素，不作为核心主体边界，不要求填满。纯背景可铺满画布。",
      "coreLogoMeaning": "main visual subject, not the separate header brand signature",
      "outerRegionMeaning": "only non-core foreground containment; never a core-subject boundary or occupancy target",
      "background": "full-canvas allowed",
      "measurement": "actual visible bounds from visual inspection, not automatic semantic segmentation",
      "reviewFields": [
        "coreLogoBounds",
        "nonCoreImageBounds"
      ],
      "coreLogoConstraint": "unrestricted-except-text-and-header"
    },
    "textGroupPolicy": {
      "rule": "新组件主、副标题先分别按各自宽高上限等比适配，宽或高先触边即停止；用实际可见主标题高度、固定间距和实际可见副标题高度组成文字组，并在总文字区内垂直居中。横向对齐保持组件规定；原始单层y只作参考，实际y由文字组推导。字数不作为固定字号或容量上限。",
      "placementFormula": "groupHeight=titleVisibleHeight+gapPx+subtitleVisibleHeight; titleY=region.y+(region.height-groupHeight)/2; subtitleY=titleY+titleVisibleHeight+gapPx",
      "bounds": "actual visible glyph bounds; transparent canvas margins excluded",
      "overflow": "stop and replan; never shrink the fixed gap or move the total text region",
      "legacyTemplates": "without textGroup retain their historical placement"
    }
  },
  "production": {
    "workflow": "common-first-selected-family-then-exact-layout",
    "imageInputRequired": true,
    "textOnlyFallback": false,
    "orientationPolicy": "reuse-existing; ask-only-if-missing",
    "requiredInputs": [
      "orientation",
      "brief"
    ],
    "prompt": "/assets/design-reference/key-visual/prompt.txt",
    "inputEvidence": "记录实际背景图片输入、准确文案、75W及兰亭黑Regular静态字体文件与SHA256、主标题倾斜角、固定文本框、实际fit字号、双行可见间距、背景落区及规则版本。",
    "modelPolicy": "可使用用户指定的 ChatGPT Image、Nano Banana 或 Seedream 系列。先核对实际可用模型与图像输入能力；版本名称不能代替能力验证。不可用时明确说明，不静默改成纯文生图。",
    "layoutParameters": {
      "tool": "get_material_rules",
      "scope": "key-visual",
      "requiredArguments": [
        "templateId",
        "expectedRevision"
      ]
    },
    "styleParameters": {
      "tool": "get_material_rules",
      "scope": "key-visual",
      "stage": "style",
      "requiredArguments": [
        "templateId",
        "appearance",
        "expectedRevision"
      ],
      "when": "after-background-production; actual-text-and-header-logo-regions; active-components-light-or-dark; legacy-approvedAppearance-only",
      "onMismatch": "active-components: select-correct-light-or-dark-style-with-unchanged-geometry; legacy-templates: needs-replan-with-pairedTemplateId"
    }
  }
}
