You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
v0.7.8: fix text/background contrast across all themes
- Add WCAG 2.1 luminance helpers (luminance, pickTextColor) to JS renderer
- Fix hardcoded colors in addSlideHeader, renderTitleSlide, renderTimelineSlide,
renderFunnelSlide, renderProcessSlide, renderSwotSlide
- Funnel labels now auto-select light/dark text per segment fill color
- Process step fills now follow active theme instead of hardcoded pastels
- SWOT quadrant colors now derive from chartColors
- Python pptx_renderer _get_colors() merges full theme palette from templates
- Add color/contrast docs to SKILL.md and USER_GUIDE (en/zh-CN/ja)
- Bump version to 0.7.8
Copy file name to clipboardExpand all lines: CHANGELOG.md
+6Lines changed: 6 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,12 @@ The format is based on Keep a Changelog, and this project follows Semantic Versi
6
6
7
7
## [Unreleased]
8
8
9
+
## [0.7.8] - 2026-03-24
10
+
11
+
### Fixed
12
+
13
+
-**Text/Background Contrast Across Themes** — Added WCAG-based luminance helpers (`luminance()`, `pickTextColor()`) to JS renderer. Fixed hardcoded text colors in `addSlideHeader()`, `renderTitleSlide()`, `renderTimelineSlide()`, `renderFunnelSlide()`, `renderProcessSlide()`, and `renderSwotSlide()` to use theme-aware colors instead of always using dark `closingBg`. Funnel stage labels now dynamically choose light or dark text based on each segment's fill color. Process step backgrounds now follow the active theme instead of hardcoded pastels. SWOT quadrant colors now derive from `chartColors`. Python renderer `_get_colors()` now merges full theme palette (text, background, closing colors) from templates. All 6 built-in themes (including dark-executive and tech) now render with correct contrast.
Copy file name to clipboardExpand all lines: ROADMAP.md
+3-2Lines changed: 3 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,14 +1,14 @@
1
1
# Project Status
2
2
3
-
Current version: **v0.7.7**
3
+
Current version: **v0.7.8**
4
4
5
5
Product positioning: **to-B PPT generation engine** — embeddable into enterprise AI workflows with private deployment, API-driven generation (MCP / CLI / HTTP), and multi-language support (CJK + English). Core differentiators are data security (no data leaves the enterprise), content intelligence (AI-driven layout and visualization selection), and cross-platform output (PowerPoint, Keynote, Google Slides).
6
6
7
7
Current release posture: **published in its current scope**. This repository is being released as a personal open-source project in maintenance mode. No additional roadmap items are currently committed.
8
8
9
9
---
10
10
11
-
## Current Capabilities (v0.7.7)
11
+
## Current Capabilities (v0.7.8)
12
12
13
13
| Area | What's Included |
14
14
|------|----------------|
@@ -43,6 +43,7 @@ This repository is published as a stable personal-project snapshot.
43
43
44
44
| Version | Milestone |
45
45
|---------|-----------|
46
+
| v0.7.8 | Fix text/background contrast across all themes; WCAG luminance-aware rendering |
46
47
| v0.7.7 | Current-scope release alignment; roadmap converted to project status / maintenance posture |
47
48
| v0.7.6 | Release metadata audit cleanup and public baseline verification |
48
49
| v0.7.5 | README positioning update for personal-project release |
Copy file name to clipboardExpand all lines: SKILL.md
+10-1Lines changed: 10 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -139,7 +139,16 @@ When using chart layout, always populate concrete data:
139
139
- If no real data is available, use realistic placeholders and note it in assumptions
140
140
- Never leave categories or series as empty arrays
141
141
142
-
The system automatically validates chart data after generation. If a chart slide has invalid data (empty categories, missing series, or non-numeric values), it falls back to a bullet layout and records the fallback in assumptions.
142
+
The system automatically validates chart data after generation.
143
+
144
+
## Color and Contrast
145
+
146
+
The renderer uses WCAG 2.1 relative-luminance detection to pick readable text colors automatically. When choosing themes or creating custom ones:
147
+
148
+
-**Light themes** (business-clean, corporate-blue, warm-modern, minimal): dark text on light slide backgrounds
149
+
-**Dark themes** (dark-executive, tech): light text on dark slide backgrounds
150
+
- Chart labels and funnel stage text auto-select light or dark based on the segment fill color
151
+
- Custom themes should ensure all text/background pairs meet a minimum 4.5:1 contrast ratio If a chart slide has invalid data (empty categories, missing series, or non-numeric values), it falls back to a bullet layout and records the fallback in assumptions.
Copy file name to clipboardExpand all lines: docs/USER_GUIDE.en.md
+11Lines changed: 11 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -304,6 +304,17 @@ Create a JSON file following the schema in `assets/themes/theme-schema.json`:
304
304
305
305
Pass a custom theme file path via `--theme /path/to/my-brand.json`.
306
306
307
+
### Color and Accessibility
308
+
309
+
The renderer uses WCAG 2.1 luminance detection to ensure readable text on all backgrounds. This works automatically for all 6 built-in themes, including dark themes like `dark-executive` and `tech`.
310
+
311
+
When creating custom themes, ensure text/background color pairs meet WCAG AA contrast (minimum 4.5:1 for normal text, 3:1 for large text):
0 commit comments