| 1 | # Chart Template Authoring Guide |
| 2 | |
| 3 | `templates/charts/` 的模板负责可视化结构、数据编码和信息关系,不负责最终项目风格。模板必须保持源码可读、独立可渲染,并允许 Executor 根据项目 Design Spec 与 `spec_lock.md` 重做字体、配色和装饰。 |
| 4 | |
| 5 | ## 0. 上游规范 |
| 6 | |
| 7 | **Hard rule**: 本指南只定义 Chart 模板库的结构与中性预览合同。通用 SVG 语法、效果、原生数据接口和 PowerPoint 结构分别由以下权威文件定义: |
| 8 | |
| 9 | | 合同 | 权威文件 | |
| 10 | |---|---| |
| 11 | | 通用 SVG | [`shared-standards.md`](../../references/shared-standards.md) | |
| 12 | | 效果与兼容输入 | [`svg-effects.md`](../../references/svg-effects.md) | |
| 13 | | Native Chart/Table | [`native-data-interface.md`](../../references/native-data-interface.md) | |
| 14 | | 画布格式 | [`canvas-formats.md`](../../references/canvas-formats.md) | |
| 15 | |
| 16 | **Forbidden — second SVG specification**: 不在本指南复述或放宽上游语法。发生冲突时以上游权威文件为准。 |
| 17 | |
| 18 | --- |
| 19 | |
| 20 | ## 1. 所有权边界 |
| 21 | |
| 22 | ### 1.1 模板与项目 |
| 23 | |
| 24 | | Chart 模板拥有 | 项目拥有 | |
| 25 | |---|---| |
| 26 | | 可视化类型与数据到图形的映射 | 项目字体与字号体系 | |
| 27 | | 节点、连接、轴、系列和标签关系 | 项目调色板与品牌色 | |
| 28 | | 可视化类型、构图骨架和阅读顺序 | 实际分组、框架数量、项目数量与容量适配 | |
| 29 | | 必要的状态与语义区分 | 页面背景、页头、页脚和品牌 chrome | |
| 30 | | 独立预览所需的中性样式 | 最终强调策略与页面级视觉层级 | |
| 31 | |
| 32 | **Hard rule**: Executor 适配模板时保留可视化类型、信息关系和数据准确性;最终视觉必须来自当前项目,而不是继承模板的示例审美。 |
| 33 | |
| 34 | **Reference — not a constraint**: 模板的分组、框架数、项目数和示例容量用于展示结构,不是项目上限。Executor 可按实际内容调整,但不能改变已选可视化类型、关系或数据语义。 |
| 35 | |
| 36 | ### 1.2 保留判断 |
| 37 | |
| 38 | 对每个视觉元素按顺序判断: |
| 39 | |
| 40 | | 判断 | 处理 | |
| 41 | |---|---| |
| 42 | | 删除后会改变数据含义、关系、状态或阅读顺序 | 保留 | |
| 43 | | 删除后会弱化分组、层级、边界或文本容量 | 保留结构表达;只简化不承载信息的样式层 | |
| 44 | | 只让示例显得更精致、立体、品牌化或“高级” | 作为简化候选;通过文本与前后渲染核对后再删除 | |
| 45 | | 只对某个项目风格成立 | 交给 Executor 重建 | |
| 46 | |
| 47 | **Default — structure first (may override when semantics require it)**: 优先使用清楚的线、面、标签和留白。装饰不能成为理解结构的前提。 |
| 48 | |
| 49 | ### 1.3 保真优先 |
| 50 | |
| 51 | **Hard rule — fidelity before slimming**: 模板瘦身不得改写或删除原有可见标题、标签、说明、数值、单位、状态、来源、顺序、容量和关系。占位内容保持原文;只有明确重复的信息可以删除,并记录理由。 |
| 52 | |
| 53 | **Hard rule — structural frames survive**: 框线、底色、分隔、标签页或面板只要表达真实的信息单元、父子层级、阶段范围、绘图区或输出区,就属于结构。可以减少叠加效果,但不得为了 token 数字把有效层级压平。 |
| 54 | |
| 55 | **Forbidden — compression by rewriting**: 不用缩写、概括、换词或删句降低 token。体积优化来自属性继承、重复样式合并和非语义效果简化,不来自内容编辑。 |
| 56 | |
| 57 | --- |
| 58 | |
| 59 | ## 2. 中性预览 |
| 60 | |
| 61 | ### 2.1 独立可渲染 |
| 62 | |
| 63 | **Hard rule**: 每个模板保持完整 `<svg>`、`viewBox="0 0 1280 720"` 和一个直接的白色全画布背景,使文件无需外部样式即可打开审阅。 |
| 64 | |
| 65 | ```xml |
| 66 | <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 720" width="1280" height="720" |
| 67 | font-family="-apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Microsoft YaHei', sans-serif"> |
| 68 | <rect width="1280" height="720" fill="#FFFFFF"/> |
| 69 | <!-- semantic content --> |
| 70 | </svg> |
| 71 | ``` |
| 72 | |
| 73 | 白色背景是预览基线,不是项目背景指令。Executor 必须按当前页面风格处理最终背景。 |
| 74 | |
| 75 | ### 2.2 中性参考色 |
| 76 | |
| 77 | 以下色值只保证模板独立展示时清晰。它们不是最终项目调色板: |
| 78 | |
| 79 | | 角色 | 中性参考值 | 使用边界 | |
| 80 | |---|---|---| |
| 81 | | 主文本 | `#0F172A` | 标题、关键值 | |
| 82 | | 正文 | `#475569` | 描述、图例 | |
| 83 | | 次文本 | `#64748B` | 轴标签、辅助说明 | |
| 84 | | 弱线 | `#CBD5E1` / `#E2E8F0` | 网格、边界、分隔 | |
| 85 | | 参考强调 | `#2563EB` | 第一系列、当前状态或结构焦点 | |
| 86 | | 正向语义 | `#059669` | 仅表示上升、完成、达标 | |
| 87 | | 负向语义 | `#E11D48` | 仅表示下降、异常、未达标 | |
| 88 | | 警示语义 | `#D97706` | 仅表示风险或待处理 | |
| 89 | |
| 90 | **Hard rule**: 多系列数据必须可区分;正负、完成/计划等语义状态必须可辨认。颜色承担这些信息时保留,颜色只承担装饰时移除。 |
| 91 | |
| 92 | **Forbidden — fixed catalog palette**: 不要求每个卡片、步骤或能力点使用不同 Tailwind hue。项目配色不从模板示例反向推导。 |
| 93 | |
| 94 | ### 2.3 页面 chrome |
| 95 | |
| 96 | | 元素 | 模板行为 | |
| 97 | |---|---| |
| 98 | | 标题/副标题 | 可用简短占位文本展示层级和可用空间;不附带装饰条、徽章或品牌图形 | |
| 99 | | 数据来源 | 仅当该可视化结构需要来源/脚注槽时保留;不是每个模板的固定页脚 | |
| 100 | | 页码、Logo、部门名 | 省略 | |
| 101 | | 进度徽章、状态胶囊 | 只有状态本身属于信息时保留,移除纯装饰外壳 | |
| 102 | |
| 103 | --- |
| 104 | |
| 105 | ## 3. 装饰与效果 |
| 106 | |
| 107 | ### 3.1 减少冗余效果 |
| 108 | |
| 109 | **Default — one clear treatment (may override when structure requires depth)**: 中性模板避免阴影、发光、纹理、渐变和多层框同时叠加;保留能帮助读者识别真实边界、重叠或空间关系的最少效果。 |
| 110 | |
| 111 | | 效果 | 默认 | 允许条件 | |
| 112 | |---|---|---| |
| 113 | | 阴影/filter | 有描边或底色已能分组时省略 | 重叠、浮层或空间深度本身属于结构 | |
| 114 | | 渐变 | 只承担审美时可换成实色 | 连续色阶、流量、深度面或方向确实承载编码 | |
| 115 | | 透明光晕 | 省略 | 透明度本身编码范围或不确定性 | |
| 116 | | 圆角卡片 | 保留真实信息单元的一层边界 | 圆角值与最终外观由项目适配 | |
| 117 | | 图标底板 | 非默认 | 需要明确图标槽位或状态边界 | |
| 118 | |
| 119 | **Hard rule**: Heatmap 色阶、Sankey 流量宽度、系列区分、Isometric 面向关系和真实模块边界属于信息编码或结构。普通卡片阴影、气泡高光、无含义色带和不承担顺序的大号淡色编号通常不属于;删除前仍需确认没有弱化层级。 |
| 120 | |
| 121 | ### 3.2 容器克制 |
| 122 | |
| 123 | **Hard rule**: 每个真实信息单元保留至少一种清楚的边界表达:留白、分隔线、描边或底色。通常只需一种;父级区域与子级内容确实表达两个层级时可以保留两层。不要同时叠加无语义的描边、阴影、渐变和多层圆角框。 |
| 124 | |
| 125 | **Reference — not a constraint**: 项目最终可能采用强装饰风格。那是 Executor 根据 Design Spec 重建的项目决策,不是共享模板的默认形态。 |
| 126 | |
| 127 | --- |
| 128 | |
| 129 | ## 4. 源码可读性与体积 |
| 130 | |
| 131 | ### 4.1 语义压缩 |
| 132 | |
| 133 | **Hard rule**: 缩小模板时保留正常换行、缩进、语义 `id` 和必要分区注释。压缩目标是减少重复信息,不是把 XML 变成一行。 |
| 134 | |
| 135 | | 做法 | 要求 | |
| 136 | |---|---| |
| 137 | | 字体继承 | 公共 `font-family` 放在根 `<svg>` 或清楚的父 `<g>` | |
| 138 | | 属性继承 | 同组重复的 `fill`、`stroke`、字号或锚点可提升到父组 | |
| 139 | | 注释 | 保留结构、语义和机器标记;删除色名、营销解释和重复说明 | |
| 140 | | 文本 | 普通单行直接写在 `<text>`;只有多 run/多行需要 `<tspan>` | |
| 141 | | 坐标 | 页面坐标使用必要精度;按上游合同运行 `compact_svg_coordinates.py` | |
| 142 | | ID | 使用 `chart-area`、`series-1`、`card-1` 等结构名称,避免示例业务名 | |
| 143 | |
| 144 | ### 4.2 禁止的压缩 |
| 145 | |
| 146 | **Forbidden — opaque source**: |
| 147 | |
| 148 | - 单行 minify、随机缩写 ID 或删除结构注释。 |
| 149 | - 为省字符把核心构图拆成难以追踪的深层 `<symbol>/<use>` 图。 |
| 150 | - 把模板必要信息藏进外部 CSS、脚本或未登记依赖。 |
| 151 | - 用 Base64、压缩字符串或生成器说明替代可读的可视几何。 |
| 152 | |
| 153 | 静态同文档 `<use>` 只在重复原语保持清晰、且满足上游条件合同时使用;它不是默认瘦身手段。 |
| 154 | |
| 155 | ### 4.3 文本可读性 |
| 156 | |
| 157 | | 角色 | 中性范围 | |
| 158 | |---|---| |
| 159 | | 页面标题 | `30–36`,`700–800` | |
| 160 | | 区域标题 | `18–24`,`600–700` | |
| 161 | | 正文/标签 | `13–16` | |
| 162 | | Caption/轴刻度 | `12–14` | |
| 163 | |
| 164 | **Hard rule**: 所有文本 `font-size >= 12`,使用有限无单位数值。需要成为一个 PowerPoint 文本框的多格式逻辑行使用一个 `<text>` 加非定位 `<tspan>`;独立文本框使用独立 `<text>`。 |
| 165 | |
| 166 | --- |
| 167 | |
| 168 | ## 5. 结构与边界 |
| 169 | |
| 170 | ### 5.1 语义分组 |
| 171 | |
| 172 | **Hard rule**: 使用描述性顶层 `<g id>` 表达页面级逻辑单元,例如 Header、Chart、Legend、Card Grid 或 Process。不要为每条文字、图标或数据点建立一个直属根组。 |
| 173 | |
| 174 | | 顶层组 | 典型内容 | |
| 175 | |---|---| |
| 176 | | `header` | 标题与副标题 | |
| 177 | | `chart-area` / replacement carrier | 轴、数据系列、标签、必要 metadata | |
| 178 | | `legend` | 系列或状态说明 | |
| 179 | | `card-1` / `feature-card-1` | 一个完整信息单元 | |
| 180 | | `timeline-track` | 时间轴与阶段标签 | |
| 181 | | `milestone-cards` | 同一结构的一组里程碑卡片 | |
| 182 | |
| 183 | ### 5.2 `data-pptx-bounds` |
| 184 | |
| 185 | **Hard rule**: 每个可见直属根 `<g>` 都声明正数、根坐标系的 `data-pptx-bounds="x y width height"`。即使该组已有 native chart/table frame,也保留 bounds。 |
| 186 | |
| 187 | ```xml |
| 188 | <g id="header" data-pptx-bounds="60 40 1160 72"> |
| 189 | <text x="60" y="74" font-size="32">Title</text> |
| 190 | </g> |
| 191 | |
| 192 | <g id="card-1" data-pptx-bounds="60 150 560 250"> |
| 193 | <!-- complete card --> |
| 194 | </g> |
| 195 | ``` |
| 196 | |
| 197 | | 边界要求 | 行为 | |
| 198 | |---|---| |
| 199 | | 坐标系 | 使用根 `viewBox` 坐标,不使用局部 transform 后坐标 | |
| 200 | | 范围 | 覆盖该逻辑单元允许使用的布局子画布,不从示例文字紧包围盒推断 | |
| 201 | | 精度 | 最多两位小数 | |
| 202 | | 嵌套组 | 不写;Checker 忽略嵌套 bounds | |
| 203 | | 背景/defs | 直接背景 primitive 与非可见定义不需要 bounds | |
| 204 | |
| 205 | **Forbidden — bounds noise**: 不给每个嵌套 `<g>`、图标、数据点或实现碎片添加 bounds。 |
| 206 | |
| 207 | ### 5.3 Shape-first |
| 208 | |
| 209 | | 对象 | 模板表达 | |
| 210 | |---|---| |
| 211 | | 基础节点/容器 | `<rect>`、`<circle>`、`<ellipse>` | |
| 212 | | 直线关系/分隔/引线 | `<line>` | |
| 213 | | 预设可精确表达的弯折/曲线关系 | 完整 compact authored `bentConnector*` / `curvedConnector*` `<g>`;端点不附着 | |
| 214 | | 标准块箭头/流程节点 | 仅在 preset 精确匹配时使用完整 compact authored-preset `<g>` | |
| 215 | | 单一预设不能表达、但封闭形状可组合的对象 | 优先用 `shape_boolean_svg.py` 物化 Merge Shapes 结果 | |
| 216 | | 图元、预设、Boolean 都不能表达的数据/语义/锁定风格几何 | `<path>`、`<polygon>`、`<polyline>` | |
| 217 | | 数据图表 | 默认 Shape fallback;符合条件时附带 native replacement marker | |
| 218 | |
| 219 | **Forbidden — inferred native semantics**: 概念图、流程图和框架图不添加 `data-pptx-replace-with="chart"`;普通关系线不添加 Connector attachment metadata。 |
| 220 | |
| 221 | --- |
| 222 | |
| 223 | ## 6. 数据图表合同 |
| 224 | |
| 225 | ### 6.1 绘图区标记 |
| 226 | |
| 227 | **Hard rule**: calculator-supported 数据图表在 `<g id="chartArea">` 内、轴之后、首个数据元素之前保留精确机器注释: |
| 228 | |
| 229 | ```xml |
| 230 | <!-- chart-plot-area: 140,150,1160,550 --> |
| 231 | ``` |
| 232 | |
| 233 | Pie、Donut、Radar 使用对应中心和半径格式。该注释是工具输入,不得作为“清理注释”删除。 |
| 234 | |
| 235 | ### 6.2 Native Chart/Table |
| 236 | |
| 237 | **Hard rule**: 只有 [`native-data-interface.md`](../../references/native-data-interface.md) 支持的真实数据图表或纯文本表格使用 replacement marker。JSON metadata 与可见 fallback 必须表达同一份数据。 |
| 238 | |
| 239 | ```xml |
| 240 | <g id="line-chart" |
| 241 | data-pptx-bounds="100 140 1080 460" |
| 242 | data-pptx-replace-with="chart"> |
| 243 | <metadata type="application/json">...</metadata> |
| 244 | <g id="chartArea">...</g> |
| 245 | </g> |
| 246 | ``` |
| 247 | |
| 248 | **Hard rule**: 项目颜色适配时同步修改可见系列颜色和 metadata `style.colors`。默认 Shape 输出与显式 native 输出都必须可验证。 |
| 249 | |
| 250 | ### 6.3 数据装饰边界 |
| 251 | |
| 252 | | 元素 | 分类 | |
| 253 | |---|---| |
| 254 | | 轴、刻度、网格、图例 | 结构 | |
| 255 | | 系列颜色、正负语义色 | 数据编码 | |
| 256 | | 数据点节点 | `lineMarker` 等类型需要时保留 | |
| 257 | | Area fill | 面积/累计量是信息时保留;普通 line chart 仅在确认填充不承担范围、基线或强调含义后简化 | |
| 258 | | 柱体渐变、节点高光、卡片阴影 | 只承担审美时可简化;若用于区分重叠、层级或状态则保留结构作用 | |
| 259 | | 来源与注释 | 内容需要时保留,不作为全库固定 chrome | |
| 260 | |
| 261 | --- |
| 262 | |
| 263 | ## 7. 占位内容与注册 |
| 264 | |
| 265 | ### 7.1 占位内容 |
| 266 | |
| 267 | **Hard rule**: 模板占位文本使用英文,展示真实文本容量和数据格式,但不承载具体项目事实。 |
| 268 | |
| 269 | | 应展示 | 示例 | |
| 270 | |---|---| |
| 271 | | 标题长度 | `Revenue Trend`、`Implementation Plan` | |
| 272 | | 数据格式 | `$245.5M`、`98.5%`、`2026 Q1` | |
| 273 | | 正常换行 | 2–3 行短描述 | |
| 274 | | 结构容量 | 真实建议数量范围内的 series/items/nodes | |
| 275 | |
| 276 | **Forbidden — placeholder storytelling**: 不写长篇营销文案、部门归属、真实品牌或无法复用的项目背景。 |
| 277 | |
| 278 | ### 7.2 `charts_index.json` |
| 279 | |
| 280 | 新增模板必须登记 `<key>.summary`: |
| 281 | |
| 282 | ```json |
| 283 | "line_chart": { |
| 284 | "summary": "Pick for 1-3 time-series on a continuous axis showing direction. Skip if cumulative volume matters (use area_chart)." |
| 285 | } |
| 286 | ``` |
| 287 | |
| 288 | **Hard rule**: `summary` 是选型句,使用 `Pick for ... Skip if ...`,不是视觉描述;`key` 与文件名一致,`meta.total` 与 catalog 数量一致。 |
| 289 | |
| 290 | --- |
| 291 | |
| 292 | ## 8. 迁移边界 |
| 293 | |
| 294 | 本指南是新建和修改模板的目标合同。当前目录中的 76 个 SVG 均已纳入该合同;后续不得以历史文件为由恢复无语义装饰,也不得把中性化误解为删除结构边界。 |
| 295 | |
| 296 | **Current reference set**: |
| 297 | |
| 298 | | 模板 | 覆盖结构 | |
| 299 | |---|---| |
| 300 | | `timeline.svg` | 时间、状态和里程碑卡片 | |
| 301 | | `kpi_cards.svg` | KPI 值、单位与趋势 | |
| 302 | | `labeled_card.svg` | 2×2 标签卡片结构 | |
| 303 | | `icon_grid.svg` | 2×3 图标槽与能力卡片 | |
| 304 | | `line_chart.svg` | 双系列折线与 native chart metadata | |
| 305 | | `pipeline_with_stages.svg` | 分阶段管线、贯通流程和输出链 | |
| 306 | | `layered_architecture.svg` | 分层架构、能力输出和底座 | |
| 307 | | `stacked_area_chart.svg` | 累计面积、图例和统计卡片 | |
| 308 | | `heatmap_chart.svg` | 时间×日期矩阵、连续色阶和统计侧栏 | |
| 309 | | `bubble_chart.svg` | 三变量气泡、象限、系列清单和尺寸图例 | |
| 310 | | `quadrant_text_bullets.svg` | 二轴四象限、分区说明和行动标签 | |
| 311 | | `financial_statement_table.svg` | 财务层级、数值列和强调合计行 | |
| 312 | | `box_plot_chart.svg` | 五数分布、异常值、图例和统计摘要 | |
| 313 | | `dual_axis_line_chart.svg` | 双轴序列、阶段带和数据标注 | |
| 314 | | `stacked_bar_chart.svg` | 堆叠分类、总量标签和洞察侧栏 | |
| 315 | | `segmented_wheel.svg` | 中心主题、等权扇区和配对说明卡 | |
| 316 | | `sankey_chart.svg` | 零损耗流向、节点层级和流量编码 | |
| 317 | | `roadmap_vertical.svg` | 纵向里程碑、状态轨道和目标侧栏 | |
| 318 | | `snake_flow.svg` | 多行蛇形长流程、顺序节点和配对里程碑卡 | |
| 319 | | `concentric_circles.svg` | 同心优先级、资源占比和分层说明卡 | |
| 320 | | `scatter_chart.svg` | 双系列散点、回归趋势、置信区间和统计洞察 | |
| 321 | | `area_chart.svg` | 双系列累计面积、月度趋势和摘要指标 | |
| 322 | | `chevron_process.svg` | 连续阶段箭头、周期带和阶段交付物 | |
| 323 | | `radar_chart.svg` | 多维能力对比、系列面积和基准数据表 | |
| 324 | | `module_composition.svg` | 父模块边界、三级处理链和端到端数据流 | |
| 325 | | `fishbone_diagram.svg` | 核心问题、六类原因分支和具体成因标签 | |
| 326 | | `numbered_steps.svg` | 编号步骤、连接顺序、任务卡和阶段时长 | |
| 327 | | `pareto_chart.svg` | 80/20 分界、降序柱体、累计曲线和行动洞察 | |
| 328 | | `top_down_tree.svg` | 父子层级、汇报连线和末级节点摘要 | |
| 329 | | `butterfly_chart.svg` | 共用中轴、双侧镜像系列和对称刻度 | |
| 330 | | `chevron_chain_with_tail.svg` | 连续箭头阶段、支撑标签和结果汇总尾块 | |
| 331 | | `gauge_chart.svg` | 单项指标、目标区间、当前值和状态说明 | |
| 332 | | `gantt_chart.svg` | 任务行、时间跨度、依赖关系和当前时间标记 | |
| 333 | | `waterfall_chart.svg` | 起始值、增减贡献、连接基线和最终合计 | |
| 334 | | `hub_inward_arrows.svg` | 外围输入、向心关系和中心结论 | |
| 335 | | `treemap_chart.svg` | 层级面积编码、分类色块、标签和解释注记 | |
| 336 | | `hub_spoke.svg` | 中心枢纽、径向连接、能力节点和参考环 | |
| 337 | | `matrix_2x2.svg` | 双轴象限、点位分布、象限标签和优先级说明 | |
| 338 | | `process_flow.svg` | 顺序节点、连接关系、阶段时长和状态图例 | |
| 339 | | `donut_chart.svg` | 环形占比、中心总值、系列图例和摘要指标 | |
| 340 | | `grouped_bar_chart.svg` | 多系列并列柱、共用分类轴和系列图例 | |
| 341 | | `pyramid_isometric.svg` | 分层金字塔、等距深度面和层级说明 | |
| 342 | | `progress_bar_chart.svg` | 多项进度、目标标记、当前值和状态分组 | |
| 343 | | `basic_table.svg` | 表头、数据行、对齐列和状态单元格 | |
| 344 | | `mind_map.svg` | 中心主题、放射分支、二级节点和分支骨架 | |
| 345 | | `comparison_columns.svg` | 并列方案列、价格层级、功能清单和推荐状态 | |
| 346 | | `bullet_chart.svg` | 定性区间、实际值、目标线和多指标对照 | |
| 347 | | `comparison_table.svg` | 多方案表头、横向属性行和结果强调 | |
| 348 | | `client_server_flow.svg` | 客户端与服务端分区、请求响应和交互方向 | |
| 349 | | `dumbbell_chart.svg` | 双状态端点、变化连线、差值和项目排序 | |
| 350 | | `pyramid_chart.svg` | 递进层级、分层容量和层级说明 | |
| 351 | | `vertical_pillars.svg` | 并列支柱、分类标题、要点列表和底部结论 | |
| 352 | | `journey_map.svg` | 阶段轨道、用户行动、情绪曲线和痛点卡片 | |
| 353 | | `consulting_table.svg` | 分层行列、指标数值、数据条和重点结论 | |
| 354 | | `pros_cons_chart.svg` | 正反双栏、判断轴、论据列表和建议结论 | |
| 355 | | `project_schedule_table.svg` | 任务表格、负责人、状态和横向排期 | |
| 356 | | `horizontal_bar_chart.svg` | 长标签排名、横向数值条和洞察侧栏 | |
| 357 | | `funnel_chart.svg` | 递减阶段、转化率、流失关系和摘要指标 | |
| 358 | | `isometric_stairs.svg` | 递进台阶、阶段标签、空间顺序和接地基线 | |
| 359 | | `pie_chart.svg` | 单层占比、扇区标签、图例和总量摘要 | |
| 360 | | `circular_stages.svg` | 环形阶段、循环方向、阶段说明和中心主题 | |
| 361 | | `team_roster.svg` | 成员卡片、头像槽、姓名职务和简介容量 | |
| 362 | | `harvey_balls_table.svg` | 评价行列、分级圆点、评分图例和汇总状态 | |
| 363 | | `column_chart.svg` | 单系列分类柱、数值标签、坐标轴和基准线 | |
| 364 | | `arc_anchored_list.svg` | 弧线主轴、锚点节点、顺序条目和配对说明 | |
| 365 | | `vertical_list.svg` | 纵向轨道、顺序节点、内容卡片和阶段状态 | |
| 366 | | `sunburst_chart.svg` | 多层环形层级、父子占比、叶子图例和解释面板 | |
| 367 | | `agenda_list.svg` | 编号议程、条目说明、时长信息和纵向导轨 | |
| 368 | | `stock_chart.svg` | OHLC 蜡烛、日期轴、价格区间和指标摘要 | |
| 369 | | `feature_matrix_table.svg` | 功能行、产品列、二元状态和方案对照 | |
| 370 | | `histogram_chart.svg` | 连续分箱、频数柱、统计标记和分布解释 | |
| 371 | | `venn_diagram.svg` | 集合边界、交集区域、关系标签和结论说明 | |
| 372 | | `quadrant_bubble_scatter.svg` | 双轴象限、气泡位置、尺寸编码和项目标签 | |
| 373 | | `bar_of_pie_chart.svg` | 主饼占比、长尾聚合、堆叠条明细和连接关系 | |
| 374 | | `pie_of_pie_chart.svg` | 主饼占比、长尾聚合、次级饼明细和连接关系 | |
| 375 | | `word_cloud.svg` | 词项权重、字号编码、主题分布和关键词层级 | |
| 376 | |
| 377 | **Hard rule**: 修改任一模板时先冻结可见文本、数据和结构层级,再简化确认无语义的效果、补齐直属根 bounds,并完成文本差异、独立渲染与双路线验证。未经明确说明的文本删除、改写或结构边界丢失都会阻断变更。不要仅为追求 catalog 一次性整齐而批量重写。 |
| 378 | |
| 379 | --- |
| 380 | |
| 381 | ## 9. 检查清单 |
| 382 | |
| 383 | ### 9.1 结构与可读性 |
| 384 | |
| 385 | - [ ] SVG 独立可渲染,`viewBox` 为 `0 0 1280 720`。 |
| 386 | - [ ] 源码有正常缩进、语义 ID 和必要结构注释。 |
| 387 | - [ ] 原有可见文本、数值、单位、来源、状态和关系保持不变;删除项只有审核过的重复信息。 |
| 388 | - [ ] 真实信息单元、父子层级、阶段范围和输出区仍有清楚边界。 |
| 389 | - [ ] 每个可见直属根 `<g>` 有准确的 `data-pptx-bounds`;嵌套组不滥加 bounds。 |
| 390 | - [ ] 模板只保留结构、数据编码和必要中性预览。 |
| 391 | - [ ] 字体在根或清楚父组继承,文本字号不小于 12。 |
| 392 | |
| 393 | ### 9.2 风格归属 |
| 394 | |
| 395 | - [ ] 无固定项目调色板、品牌字体或品牌 chrome。 |
| 396 | - [ ] 纯装饰效果已减少,但没有以“去装饰”为由删除结构框线或压平层级。 |
| 397 | - [ ] 颜色差异确实表达 series、state、positive/negative 等语义。 |
| 398 | - [ ] 标题、副标题和来源只用于展示必要结构或容量。 |
| 399 | |
| 400 | ### 9.3 数据与 PowerPoint |
| 401 | |
| 402 | - [ ] 数据图表保留准确 `chart-plot-area` 标记。 |
| 403 | - [ ] Eligible Chart/Table 的 metadata 与可见 fallback 数据一致。 |
| 404 | - [ ] 默认 Shape-first 导出通过。 |
| 405 | - [ ] 存在 replacement marker 时,显式 native Chart/Table 导出通过。 |
| 406 | - [ ] `svg_quality_checker.py` 无 error;warning 已人工判断。 |
| 407 | |
| 408 | ### 9.4 Catalog |
| 409 | |
| 410 | - [ ] 新模板已登记 `charts_index.json`。 |
| 411 | - [ ] 修改 key/summary 后通过 `chart_recall.py validate` 和 recall 烟测。 |
| 412 | - [ ] 前后可见文本差异已审阅,非重复内容没有意外丢失或改写。 |
| 413 | - [ ] 前后渲染对比确认结构仍可读。 |
| 414 | - [ ] 记录 bytes/tokens 变化,但不以牺牲源码可读性换取数字。 |
| 415 | |
| 416 | --- |
| 417 | |
| 418 | ## 10. 验证命令 |
| 419 | |
| 420 | ```bash |
| 421 | # 单文件 SVG 合同 |
| 422 | python3 skills/ppt-master/scripts/svg_quality_checker.py \ |
| 423 | skills/ppt-master/templates/charts/<key>.svg |
| 424 | |
| 425 | # Catalog key |
| 426 | python3 skills/ppt-master/scripts/chart_recall.py validate <key> |
| 427 | |
| 428 | # 可安全压缩的页面坐标(默认 dry-run) |
| 429 | python3 skills/ppt-master/scripts/compact_svg_coordinates.py \ |
| 430 | skills/ppt-master/templates/charts/<key>.svg |
| 431 | ``` |
| 432 | |
| 433 | **Validation**: 修改后至少完成 XML 解析、独立 SVG 渲染、Checker、默认 Shape-first 导出,以及 marker 模板的 native Chart/Table 导出。 |
| 434 | |
| 435 | --- |
| 436 | |
| 437 | ## 11. 结构图式兼容索引 |
| 438 | |
| 439 | 本节保留旧引用锚点,但所有图式都受 §1 所有权边界约束。 |
| 440 | |
| 441 | ### 11.1 Attached Section Tab |
| 442 | |
| 443 | **Reference — not a constraint**: 半圆标签只在“标签从属于当前信息块”是结构信息时使用。颜色、圆角和高度由项目适配;它不是卡片的默认装饰。 |
| 444 | |
| 445 | **Forbidden — cover hack**: 不把“全圆角矩形 + 同色覆盖矩形”作为两个未合并对象叠放来伪造单侧圆角。需要时优先以封闭的圆角矩形和矩形为 operands,通过 `shape_boolean_svg.py` 物化 Union 结果;只有 Boolean 仍不能忠实表达时才手写可编辑 path。 |
| 446 | |
| 447 | ### 11.2 Nested Card Border |
| 448 | |
| 449 | **Default — single boundary (may override when hierarchy requires two levels)**: 中性模板优先一层描边或留白。浅色外框 + 内层白卡属于旧视觉配方,不再作为共享模板默认;只有外层与内层表达两个真实层级时才保留。 |
| 450 | |
| 451 | ### 11.3 Card Grid |
| 452 | |
| 453 | 卡片网格表达并列关系和容量,不决定最终卡片风格: |
| 454 | |
| 455 | | 结构 | 典型容量 | 参考画布分配 | |
| 456 | |---|---|---| |
| 457 | | 2×2 | 4 个平行方面/KPI | `560×255`,横向间距约 40 | |
| 458 | | 2×3 | 6 个能力/服务 | `370×260`,横向间距约 25 | |
| 459 | | 1×3 | 3 个平行支柱 | 每列约 `400×540` | |
| 460 | | 1×4 | 4 个紧凑指标 | 每列约 `280×250` | |
| 461 | |
| 462 | **Hard rule**: `page_rhythm: breathing` 不因 catalog 示例自动变成卡片网格;最终结构仍服从页面内容和项目节奏。 |
| 463 | |
| 464 | ### 11.5 Diagonal Relationship Arrow |
| 465 | |
| 466 | **Hard rule**: 倾斜虚线箭头只表达跨象限迁移、影响或建议方向,并配一条简短关系标签。颜色与标签外观由项目决定。 |
| 467 | |
| 468 | ### 11.6 Ground Anchor |
| 469 | |
| 470 | **Default — omit (may override when depth is semantic)**: 接地椭圆是深度装饰,不属于中性模板默认。只有物体与地面/层级的空间关系本身有意义时保留;不得为了“漂浮感”普遍添加。 |
| 471 | |
| 472 | ### 11.7 Bidirectional Interaction Arrows |
| 473 | |
| 474 | **Hard rule**: 双向关系使用两条方向明确的线,每条线都有动作标签。请求/响应的颜色只需可区分,最终映射由项目调色板决定。 |
| 475 |