@topmindspace/tms-skills 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/LICENSE +21 -0
- package/README.md +102 -0
- package/bin/tms-skills.js +160 -0
- package/package.json +48 -0
- package/top-ppt-html/README.md +254 -0
- package/top-ppt-html/SKILL.md +111 -0
- package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.html +3926 -0
- package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.model.json +168 -0
- package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.html +3926 -0
- package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.model.json +168 -0
- package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.html +4325 -0
- package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.model.json +321 -0
- package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.html +4325 -0
- package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.model.json +321 -0
- package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.html +4325 -0
- package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.model.json +321 -0
- package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.html +5527 -0
- package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.model.json +914 -0
- package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.html +5527 -0
- package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.model.json +914 -0
- package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.html +5527 -0
- package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.model.json +914 -0
- package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.html +5527 -0
- package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.model.json +914 -0
- package/top-ppt-html/assets/pptx-export.js +1944 -0
- package/top-ppt-html/assets/style-gallery.html +589 -0
- package/top-ppt-html/assets/templates/architecture.html +3728 -0
- package/top-ppt-html/assets/templates/engine.css +840 -0
- package/top-ppt-html/assets/templates/presentation.html +3738 -0
- package/top-ppt-html/assets/templates/research.html +4017 -0
- package/top-ppt-html/assets/templates/ui.js +520 -0
- package/top-ppt-html/assets/theme-overview-architecture.png +0 -0
- package/top-ppt-html/assets/theme-overview-presentation.png +0 -0
- package/top-ppt-html/assets/theme-overview-research.png +0 -0
- package/top-ppt-html/assets/theme-overview.png +0 -0
- package/top-ppt-html/evals/prompts.csv +15 -0
- package/top-ppt-html/evals/rubric.schema.json +25 -0
- package/top-ppt-html/evals/run_evals.py +220 -0
- package/top-ppt-html/evals/trace.example.json +16 -0
- package/top-ppt-html/package.json +35 -0
- package/top-ppt-html/references/charts-basic.md +624 -0
- package/top-ppt-html/references/charts-discipline.md +108 -0
- package/top-ppt-html/references/charts-extended.md +482 -0
- package/top-ppt-html/references/charts.md +28 -0
- package/top-ppt-html/references/components-atoms.md +624 -0
- package/top-ppt-html/references/components.md +30 -0
- package/top-ppt-html/references/content-rules.md +490 -0
- package/top-ppt-html/references/design-system-engine.md +235 -0
- package/top-ppt-html/references/design-system.md +478 -0
- package/top-ppt-html/references/failure-modes.md +214 -0
- package/top-ppt-html/references/high-fidelity.md +127 -0
- package/top-ppt-html/references/icons.md +397 -0
- package/top-ppt-html/references/industry-benchmark.md +105 -0
- package/top-ppt-html/references/infographics-stats.md +308 -0
- package/top-ppt-html/references/infographics-structure.md +226 -0
- package/top-ppt-html/references/infographics.md +43 -0
- package/top-ppt-html/references/layout-grammar.md +315 -0
- package/top-ppt-html/references/layouts-architecture.md +108 -0
- package/top-ppt-html/references/layouts-combo.md +600 -0
- package/top-ppt-html/references/layouts-research.md +160 -0
- package/top-ppt-html/references/modes.md +254 -0
- package/top-ppt-html/references/outline-design.md +275 -0
- package/top-ppt-html/references/playbook.md +266 -0
- package/top-ppt-html/references/pptx-export.md +209 -0
- package/top-ppt-html/references/reform-plan.md +252 -0
- package/top-ppt-html/references/styles.md +370 -0
- package/top-ppt-html/references/tech-design.md +138 -0
- package/top-ppt-html/scripts/audit_css.py +109 -0
- package/top-ppt-html/scripts/audit_docs.py +176 -0
- package/top-ppt-html/scripts/audit_skill.py +220 -0
- package/top-ppt-html/scripts/audit_styles.py +351 -0
- package/top-ppt-html/scripts/build_examples.py +2276 -0
- package/top-ppt-html/scripts/build_pptx.js +2380 -0
- package/top-ppt-html/scripts/capture_theme_overview.js +78 -0
- package/top-ppt-html/scripts/checks_html.py +127 -0
- package/top-ppt-html/scripts/cross_verify.py +294 -0
- package/top-ppt-html/scripts/env_probe.py +158 -0
- package/top-ppt-html/scripts/extract_model.py +210 -0
- package/top-ppt-html/scripts/extract_snippet.py +374 -0
- package/top-ppt-html/scripts/gen_channel_a.js +214 -0
- package/top-ppt-html/scripts/layout-constants.json +3377 -0
- package/top-ppt-html/scripts/layout_slots.json +830 -0
- package/top-ppt-html/scripts/lib_layout_regions.js +412 -0
- package/top-ppt-html/scripts/measure_height.py +178 -0
- package/top-ppt-html/scripts/model-schema.json +547 -0
- package/top-ppt-html/scripts/negative_tests.py +307 -0
- package/top-ppt-html/scripts/package_skill.py +291 -0
- package/top-ppt-html/scripts/prepare_images.py +341 -0
- package/top-ppt-html/scripts/probe_image_export.py +188 -0
- package/top-ppt-html/scripts/quality_gate.py +301 -0
- package/top-ppt-html/scripts/regression.py +308 -0
- package/top-ppt-html/scripts/render_compare.py +275 -0
- package/top-ppt-html/scripts/render_from_model.py +698 -0
- package/top-ppt-html/scripts/scaffold_report.py +1054 -0
- package/top-ppt-html/scripts/section-file-map.json +105 -0
- package/top-ppt-html/scripts/sync_runtime.py +662 -0
- package/top-ppt-html/scripts/validate_pptx.py +1510 -0
- package/top-ppt-html/scripts/validate_report.py +1456 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# 设计系统 · 引擎 CSS 实现目录(维护者 / 深挖时读)
|
|
2
|
+
|
|
3
|
+
> 顶栏 / 卡片 / 列表 / 表格 / 章节头 / 页脚 / Agenda / 动效等**类实现细节**。
|
|
4
|
+
> 生成报告请用 `components-atoms.md` / `layouts-*.md` 的写法;本文件对应
|
|
5
|
+
> `assets/templates/engine.css` 注入源,改 CSS 后必跑 `sync_runtime.py`。
|
|
6
|
+
> **禁止**把本文件当生成时的默认阅读对象。
|
|
7
|
+
|
|
8
|
+
## 5. 顶栏 + 主题切换
|
|
9
|
+
|
|
10
|
+
```css
|
|
11
|
+
.bar{position:sticky;top:0;z-index:50;height:var(--bar-h);
|
|
12
|
+
background:color-mix(in srgb,var(--bg) 86%,transparent);
|
|
13
|
+
backdrop-filter:saturate(160%) blur(14px);-webkit-backdrop-filter:saturate(160%) blur(14px);
|
|
14
|
+
border-bottom:1px solid var(--border-soft)}
|
|
15
|
+
.bar__in{height:100%;display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4)}
|
|
16
|
+
.brand{display:flex;align-items:center;gap:var(--sp-3);min-width:0}
|
|
17
|
+
.brand__mark{width:34px;height:34px;flex:none;border-radius:10px;background:var(--accent);
|
|
18
|
+
color:var(--accent-on);display:grid;place-items:center;font-size:13px;font-weight:700}
|
|
19
|
+
.brand__title{font-size:var(--fs-sm);font-weight:600;color:var(--text);
|
|
20
|
+
white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
21
|
+
.brand__sub{font-size:var(--fs-xs);color:var(--text-3);
|
|
22
|
+
white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
|
|
23
|
+
.nav{display:flex;align-items:center;gap:var(--sp-1)}
|
|
24
|
+
.nav a{padding:8px 14px;border-radius:var(--r-full);color:var(--text-2);text-decoration:none;
|
|
25
|
+
font-size:var(--fs-sm);font-weight:500;white-space:nowrap;transition:background-color .18s,color .18s}
|
|
26
|
+
.nav a:hover{background:var(--surface-2);color:var(--text)}
|
|
27
|
+
@media (max-width:1120px){.nav{display:none}}
|
|
28
|
+
.iconbtn{width:40px;height:40px;flex:none;display:grid;place-items:center;
|
|
29
|
+
border:1px solid var(--border);border-radius:var(--r-full);background:transparent;
|
|
30
|
+
color:var(--text-2);cursor:pointer;transition:background-color .18s,color .18s}
|
|
31
|
+
.iconbtn:hover{background:var(--surface-2);color:var(--text)}
|
|
32
|
+
.iconbtn svg{width:19px;height:19px}
|
|
33
|
+
.icon-sun,.icon-moon{display:none}
|
|
34
|
+
html[data-theme="light"] .icon-moon{display:block}
|
|
35
|
+
html[data-theme="dark"] .icon-sun{display:block}
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## 6. 卡片 / 按钮 / 徽标 / 指标卡
|
|
39
|
+
|
|
40
|
+
```css
|
|
41
|
+
.card{background:var(--surface);border:1px solid var(--border-soft);border-radius:var(--r-lg);
|
|
42
|
+
padding:clamp(20px,2vw,30px);transition:border-color .2s,box-shadow .2s,background-color .28s}
|
|
43
|
+
.card:hover{border-color:var(--border);box-shadow:var(--shadow-1)}
|
|
44
|
+
.card--flat{background:var(--surface-1);border-color:transparent}
|
|
45
|
+
.card--flat:hover{background:var(--surface-2)}
|
|
46
|
+
.card--accent{background:var(--accent-soft);border-color:transparent}
|
|
47
|
+
.card__hd{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3)}
|
|
48
|
+
.card__ico{width:34px;height:34px;flex:none;border-radius:10px;background:var(--accent-soft);
|
|
49
|
+
color:var(--accent-text);display:grid;place-items:center}
|
|
50
|
+
.card__ico svg{width:18px;height:18px}
|
|
51
|
+
|
|
52
|
+
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:48px;
|
|
53
|
+
padding-inline:26px;border-radius:var(--r-full);font-size:var(--fs-sm);font-weight:500;
|
|
54
|
+
text-decoration:none;cursor:pointer;white-space:nowrap;border:1px solid transparent;
|
|
55
|
+
transition:background-color .2s,box-shadow .2s,transform .2s}
|
|
56
|
+
.btn:hover{transform:translateY(-1px)}
|
|
57
|
+
.btn--primary{background:var(--accent);color:var(--accent-on)}
|
|
58
|
+
.btn--primary:hover{box-shadow:var(--shadow-2)}
|
|
59
|
+
.btn--soft{background:var(--accent-soft);color:var(--accent-text)}
|
|
60
|
+
.btn--ghost{background:transparent;color:var(--text);border-color:var(--border)}
|
|
61
|
+
.btn--onDark{background:var(--surface);color:var(--text)}
|
|
62
|
+
|
|
63
|
+
.chip{display:inline-flex;align-items:center;gap:6px;height:30px;padding-inline:13px;
|
|
64
|
+
border-radius:var(--r-full);background:var(--surface-2);color:var(--text-2);
|
|
65
|
+
font-size:var(--fs-xs);font-weight:500;white-space:nowrap}
|
|
66
|
+
.chip--accent{background:var(--accent-soft);color:var(--accent-text)}
|
|
67
|
+
.chip--line{background:transparent;border:1px solid var(--border);color:var(--text-2)}
|
|
68
|
+
|
|
69
|
+
.metric{background:var(--surface);border:1px solid var(--border-soft);border-radius:var(--r-lg);
|
|
70
|
+
padding:clamp(18px,1.7vw,26px);display:flex;flex-direction:column;gap:var(--sp-2)}
|
|
71
|
+
.metric:hover{border-color:var(--border);box-shadow:var(--shadow-1)}
|
|
72
|
+
.metric__v{display:flex;align-items:baseline;gap:4px;color:var(--text)}
|
|
73
|
+
.metric__v small{font-size:.42em;font-weight:500;letter-spacing:0;color:var(--text-3)}
|
|
74
|
+
.metric__k{font-size:var(--fs-sm);color:var(--text-2);font-weight:500}
|
|
75
|
+
.metric__n{font-size:var(--fs-xs);color:var(--text-3);line-height:1.5}
|
|
76
|
+
.metric--warn .metric__v{color:var(--accent)}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 7. 列表(含流程箭头 / 对勾 / 序号)
|
|
80
|
+
|
|
81
|
+
```css
|
|
82
|
+
.ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--sp-4)}
|
|
83
|
+
.ul li{position:relative;padding-left:30px;color:var(--text-2);font-size:var(--fs-body);line-height:1.65}
|
|
84
|
+
.ul li::before{content:"";position:absolute;left:0;top:.52em;width:7px;height:7px;
|
|
85
|
+
border-radius:50%;background:var(--accent)}
|
|
86
|
+
.ul li strong{color:var(--text);font-weight:600}
|
|
87
|
+
.ul--flow li::before{content:"→";width:auto;height:auto;background:none;color:var(--accent);
|
|
88
|
+
font-weight:700;top:0;left:0}
|
|
89
|
+
.ul--check li::before{width:18px;height:18px;top:.18em;background:var(--accent-soft);
|
|
90
|
+
color:var(--accent-text);content:"✓";font-size:11px;font-weight:700;display:grid;place-items:center}
|
|
91
|
+
.ul--num{counter-reset:n}.ul--num li{padding-left:34px;counter-increment:n}
|
|
92
|
+
.ul--num li::before{content:counter(n);width:22px;height:22px;top:.06em;border-radius:50%;
|
|
93
|
+
background:var(--accent-soft);color:var(--accent-text);font-size:11px;font-weight:700;
|
|
94
|
+
display:grid;place-items:center}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 8. 表格 / 引言 / 时间线 / 图示
|
|
98
|
+
|
|
99
|
+
```css
|
|
100
|
+
.tbl-wrap{border:1px solid var(--border-soft);border-radius:var(--r-lg);overflow:hidden;
|
|
101
|
+
background:var(--surface);overflow-x:auto}
|
|
102
|
+
table{width:100%;border-collapse:collapse;min-width:min(720px,100%)}
|
|
103
|
+
thead th{background:var(--surface-1);color:var(--text-2);font-size:var(--fs-xs);font-weight:600;
|
|
104
|
+
letter-spacing:.04em;text-transform:uppercase;text-align:left;padding:15px 20px;
|
|
105
|
+
border-bottom:1px solid var(--border);white-space:nowrap}
|
|
106
|
+
tbody td{padding:17px 20px;border-bottom:1px solid var(--border-soft);font-size:var(--fs-sm);
|
|
107
|
+
color:var(--text-2);vertical-align:top;line-height:1.6}
|
|
108
|
+
tbody tr:last-child td{border-bottom:none}
|
|
109
|
+
tbody tr:hover{background:var(--surface-1)}
|
|
110
|
+
td strong{color:var(--text);font-weight:600}
|
|
111
|
+
td.k{color:var(--text);font-weight:500;white-space:nowrap}
|
|
112
|
+
td.num{font-variant-numeric:tabular-nums}
|
|
113
|
+
|
|
114
|
+
.note{display:flex;gap:var(--sp-4);padding:clamp(20px,2vw,28px);border-radius:var(--r-lg);
|
|
115
|
+
background:var(--accent-soft);border-left:3px solid var(--accent)}
|
|
116
|
+
.note__ico{width:26px;height:26px;flex:none;border-radius:50%;background:var(--accent);
|
|
117
|
+
color:var(--accent-on);display:grid;place-items:center;font-size:13px;font-weight:700;font-style:normal}
|
|
118
|
+
.note__t{font-size:var(--fs-h3);font-weight:600;color:var(--text);margin-bottom:6px}
|
|
119
|
+
|
|
120
|
+
.tl{position:relative;padding-left:30px}
|
|
121
|
+
.tl::before{content:"";position:absolute;left:7px;top:10px;bottom:10px;width:2px;
|
|
122
|
+
background:var(--border);border-radius:2px}
|
|
123
|
+
.tl__i{position:relative;padding-bottom:var(--sp-6)}
|
|
124
|
+
.tl__i:last-child{padding-bottom:0}
|
|
125
|
+
.tl__d{position:absolute;left:-30px;top:5px;width:16px;height:16px;border-radius:50%;
|
|
126
|
+
background:var(--surface);border:3px solid var(--border)}
|
|
127
|
+
.tl__i--now .tl__d{border-color:var(--accent);background:var(--accent)}
|
|
128
|
+
.tl__i--done .tl__d{border-color:var(--accent)}
|
|
129
|
+
.tl__t{font-size:var(--fs-h3);font-weight:600;color:var(--text);margin-bottom:6px}
|
|
130
|
+
.tl__l{font-size:var(--fs-xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;
|
|
131
|
+
color:var(--accent-text);margin-bottom:2px}
|
|
132
|
+
|
|
133
|
+
.fig{background:var(--surface);border:1px solid var(--border-soft);border-radius:var(--r-xl);
|
|
134
|
+
padding:clamp(20px,2.2vw,36px);overflow:hidden}
|
|
135
|
+
.fig__cap{text-align:center;margin-bottom:var(--sp-4);font-size:var(--fs-sm);
|
|
136
|
+
color:var(--text-3);font-weight:500}
|
|
137
|
+
.fig svg{display:block;width:100%;height:auto}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## 10. 章节头 / 页脚 / 动效 / 打印
|
|
141
|
+
|
|
142
|
+
```css
|
|
143
|
+
.shead{margin-bottom:clamp(28px,3.4vh,48px);max-width:940px}
|
|
144
|
+
.shead__title{margin-block:var(--sp-3) var(--sp-4)}
|
|
145
|
+
.shead__desc{max-width:900px}
|
|
146
|
+
.shead--center{margin-inline:auto;text-align:center}
|
|
147
|
+
.shead--center .shead__desc{margin-inline:auto}
|
|
148
|
+
.band--deep .t-lead,.band--deep .t-body{color:var(--deep-fg-2)}
|
|
149
|
+
.band--deep .t-eyebrow{color:color-mix(in srgb,var(--accent) 40%,#fff)}
|
|
150
|
+
|
|
151
|
+
.foot{padding-block:clamp(40px,5vh,64px);border-top:1px solid var(--border-soft);
|
|
152
|
+
background:var(--surface-1)}
|
|
153
|
+
.foot__in{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-5);flex-wrap:wrap}
|
|
154
|
+
|
|
155
|
+
@media (prefers-reduced-motion:no-preference){.rv{opacity:0;transform:translateY(14px)}
|
|
156
|
+
.rv.in{opacity:1;transform:none;transition:opacity var(--dur-long) var(--ease-emphasized),
|
|
157
|
+
transform var(--dur-long) var(--ease-emphasized)}}
|
|
158
|
+
@media (prefers-reduced-motion:reduce){.rv{opacity:1;transform:none}html{scroll-behavior:auto}}
|
|
159
|
+
@media print{.rv{opacity:1!important;transform:none!important}
|
|
160
|
+
.band{padding-block:24px;break-inside:avoid}body{background:#fff;color:#000}
|
|
161
|
+
.pager{display:none!important}}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## 11. PPT 翻页导航(页码指示)
|
|
165
|
+
|
|
166
|
+
右侧固定页码圆点 + 计数,点击跳转;方向键翻页由公共 UI 脚本(`assets/templates/ui.js`,注入各模板)驱动。
|
|
167
|
+
|
|
168
|
+
```css
|
|
169
|
+
/* 页码指示(固定右侧) */
|
|
170
|
+
.pager{position:fixed;right:clamp(10px,1.6vw,26px);top:50%;transform:translateY(-50%);
|
|
171
|
+
z-index:60;display:flex;flex-direction:column;align-items:center;gap:10px}
|
|
172
|
+
.pager__count{font-size:var(--fs-xs);font-weight:600;color:var(--text-3);
|
|
173
|
+
font-variant-numeric:tabular-nums;letter-spacing:.04em}
|
|
174
|
+
.pager__dots{display:flex;flex-direction:column;gap:8px}
|
|
175
|
+
.pager__dot{width:9px;height:9px;border-radius:50%;border:1px solid var(--border);
|
|
176
|
+
background:transparent;cursor:pointer;padding:0;transition:background-color .2s,transform .2s,border-color .2s}
|
|
177
|
+
.pager__dot:hover{transform:scale(1.3);border-color:var(--accent)}
|
|
178
|
+
.pager__dot.on{background:var(--accent);border-color:var(--accent);transform:scale(1.25)}
|
|
179
|
+
@media (max-width:760px){.pager{right:6px;gap:6px}.pager__dot{width:7px;height:7px}}
|
|
180
|
+
@media (prefers-reduced-motion:reduce){.pager__dot{transition:none}}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
> 结构:`<aside class="pager"><div class="pager__count">3 / 10</div><div class="pager__dots">…每页一个 .pager__dot…</div></aside>`,由脚本生成。
|
|
184
|
+
|
|
185
|
+
## 12. Agenda 大纲页(第二页)
|
|
186
|
+
|
|
187
|
+
首页后必须是 Agenda。大编号 + 标题 + 一句话说明,整行可点击跳转。
|
|
188
|
+
|
|
189
|
+
```css
|
|
190
|
+
.agenda{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
|
|
191
|
+
.agenda__i{border-top:1px solid var(--border-soft)}
|
|
192
|
+
.agenda__i:last-child{border-bottom:1px solid var(--border-soft)}
|
|
193
|
+
.agenda__a{display:grid;grid-template-columns:auto 1fr auto;align-items:center;
|
|
194
|
+
gap:clamp(16px,2.4vw,36px);padding:clamp(18px,2.2vh,26px) clamp(4px,.6vw,12px);
|
|
195
|
+
text-decoration:none;color:inherit;transition:background-color .18s}
|
|
196
|
+
.agenda__a:hover{background:var(--surface-1)}
|
|
197
|
+
.agenda__n{font-size:clamp(1.4rem,2vw,1.9rem);font-weight:var(--fw-display);
|
|
198
|
+
color:var(--accent);font-variant-numeric:tabular-nums;line-height:1;min-width:2.2em}
|
|
199
|
+
.agenda__t{font-size:var(--fs-h3);font-weight:var(--fw-title);color:var(--text);margin-bottom:3px}
|
|
200
|
+
.agenda__d{font-size:var(--fs-sm);color:var(--text-3)}
|
|
201
|
+
.agenda__go{color:var(--text-3);transition:color .18s,transform .18s}
|
|
202
|
+
.agenda__a:hover .agenda__go{color:var(--accent);transform:translateX(4px)}
|
|
203
|
+
.agenda__go svg{width:20px;height:20px;display:block}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
> 结构:`<ol class="agenda"><li class="agenda__i"><a class="agenda__a" href="#why"><span class="agenda__n">01</span><span><span class="agenda__t">周期意义</span><span class="agenda__d">治理为何进入智能增长周期</span></span><span class="agenda__go">→</span></a></li>…</ol>`
|
|
207
|
+
|
|
208
|
+
## 13. 图表尺寸与优雅规范
|
|
209
|
+
|
|
210
|
+
> 丰富但克制:一屏 1–2 个图,图表服务数据,不堆砌。
|
|
211
|
+
> 完整图表代码(含漏斗/甘特/散点/瀑布/双向条形/多段环形)见 `components.md` 第二部分;尺寸下限的**硬约束与校验规则**见 `components.md` 第 35 节(校验脚本按 `data-chart` 类型核对)。
|
|
212
|
+
|
|
213
|
+
| 图表 | 用途 | 建议高度 / 占比 |
|
|
214
|
+
|------|------|----------------|
|
|
215
|
+
| 环形/仪表盘 | 占比、达成度 | 直径 140–180px,配中心大数字 |
|
|
216
|
+
| 柱状图 | 分阶段目标、对比 | 高 200–240px,柱圆角 5–6px |
|
|
217
|
+
| 横向条形 / 棒棒糖 | 排名、覆盖率 | 行高 28–34px,条圆角 |
|
|
218
|
+
| 折线/面积 | 时间趋势 | 高 200–240px,面积用 `fill-opacity:.12` 的 accent |
|
|
219
|
+
| 斜率图 | 两期升降(谁升谁降) | 高 180–220px,两端都标数值 |
|
|
220
|
+
| 雷达图 / 玫瑰图 | 多维能力 | 直径 220–260 / 180–220px,≤ 6 维 |
|
|
221
|
+
| 堆叠条 / 马赛克图 | 构成(马赛克含规模维度) | 条高 24–32px;马赛克高 160–200px |
|
|
222
|
+
| 瀑布图 | 增减归因 | 高 200–230px |
|
|
223
|
+
| 漏斗图 / 桑基图 | 转化、流向归因 | 高 200–240px,≤ 5 层 / ≤ 8 带 |
|
|
224
|
+
| 甘特图 | 计划排期 | 高 160–200px |
|
|
225
|
+
| 散点/气泡 | 双维分布 | 高 220–260px |
|
|
226
|
+
| 哑铃图 | 前后 / 两地对比 | 高 160–200px,行高 34–38px |
|
|
227
|
+
| 子弹图 | 目标 vs 实际(含区间) | 高 140–180px,行高 32–36px |
|
|
228
|
+
| 点图 | 分布 / 离散度 | 高 120–160px,行高 28px |
|
|
229
|
+
|
|
230
|
+
**通用**:图表标签 `.f-txt3`(弱化),数值 `.f-txt` 加粗(突出);网格线 `.s-bds` 细线;数据系列用 `f-acc`(强调)+ `f-s3`(次要),多系列时同族明度递减、**不引入第二色相**。图与图之间留白 ≥ `--sp-6`。
|
|
231
|
+
**信息量纪律**:系列 >5 合并"其他";类别 >8 取 Top 7 + 附录密表;时间点 >8 改折线/按季聚合;一屏一图一重心。完整规则见 `components.md` `charts.md` §64。
|
|
232
|
+
|
|
233
|
+
## 14. 主题切换 + 翻页脚本(与风格无关)
|
|
234
|
+
|
|
235
|
+
见任一模式模板(`assets/templates/*.html`)底部注入的公共 UI 脚本(源文件 `assets/templates/ui.js`,由 `sync_runtime.py` 注入),含主题切换、滚动显现、方向键翻页、页码指示生成。
|