From 99da95537789d6b57449997a91161510437c52e5 Mon Sep 17 00:00:00 2001 From: Robert Helewka Date: Tue, 7 Jul 2026 20:01:15 -0400 Subject: [PATCH] Branding --- docs/brand.md | 194 ++++++++++++++++++ .../ctm-token-calculator/config.toml | 81 ++++++-- 2 files changed, 253 insertions(+), 22 deletions(-) create mode 100644 docs/brand.md diff --git a/docs/brand.md b/docs/brand.md new file mode 100644 index 0000000..ef4c912 --- /dev/null +++ b/docs/brand.md @@ -0,0 +1,194 @@ +# NTT DATA Brand Specification — Light Theme + +> **You are generating for the LIGHT theme.** The body background MUST be +> white (`#ffffff`). Pair the generated HTML with the `NTTDATA_LIGHT.pptx` +> template (the template paints the slide background). If you need a dark +> deck instead, use [brand_dark.md](brand_dark.md) — do not mix themes. +> +> Belt-and-braces: set `` so the converter cannot +> misclassify the theme. + +Use these colors for all HTML document and slide generation. + +## What the converter extracts from your CSS + +The converter reads specific CSS selectors to populate its internal color +palette. Anything it cannot find falls back to the light-theme default. +**If you want a token to appear in the output, put it in the CSS under the +selector listed here** — do not rely on the defaults. + +| Token | Read from selector | +|-------|---------------------| +| `surface_bg` | `body { background }` (also used for theme detection) | +| `body_fg` | `body { color }`, `p { color }` | +| `heading_primary_fg` | `h1 { color }`, `h2 { color }` | +| `heading_secondary_fg` | `h3 { color }` | +| `heading_section_fg` | `h4 { color }` | +| `secondary_fg` | `.subtitle { color }`, `.caption { color }` | +| `light_fg` | `.footnote { color }`, `footer { color }` | +| `border_fg` | `hr { border-color }`, `.divider { background }` | +| `gridline_fg` | `.chart-grid { stroke }` | +| `accent_primary` | `:root { --accent-primary }` or `.accent { color }` | +| `accent_navy` | `:root { --accent-navy }` | +| `card_bg` | `.card { background }` | +| `card_title_fg` | `.card h4 { color }` or `.card-title { color }` | +| `card_body_fg` | `.card p { color }` | +| `card_list_fg` | `.card li { color }` | +| `table_header_bg` / `table_header_fg` | `table th { background, color }` | +| `table_altrow_bg` | `table tbody tr:nth-child(even) { background }` | +| `table_border_fg` | `table td { border-color }` | +| `row_highlight_bg` / `_fg` | `tr.row-highlight td { background, color }` | +| `row_subtotal_bg` / `_fg` / `_border` | `tr.row-subtotal td { background, color, border-top }` | +| `callout_default_bg` / `_fg` | `.callout { background, color }` | +| `callout_success_bg` / `_fg` | `.callout-success { background, color }` | +| `callout_warning_bg` / `_fg` | `.callout-warning { background, color }` | +| `badge__bg` / `_fg` | `.badge- { background, color }` | + +Theme detection: the converter reads `` / +`` first; if neither is present it measures the +luminance of `body { background }` and picks light (> 0.35) or dark. + +## Typography + +Font: Noto Sans +Weights: Light (300), Normal (400), Bold (700) +Line height: 1.1 for headings, 1.5 for everything else + +### Sizes +| Element | Size | +|---------|------| +| h1 | 28pt | +| h2 | 22pt | +| h3 | 16pt | +| h4 | 13pt | +| Body | 11pt | +| Small / footnotes | 9pt | +| Badges | 8pt | + +## Text Colors + +| Role | Hex | Usage | +|------|-----|-------| +| Heading primary | #151d2c | h1, h2 | +| Heading secondary | #005b96 | h3, section accents | +| Heading section | #374956 | h4, card titles | +| Body | #2e404d | Paragraph text | +| Secondary | #586671 | Subtitles, captions | +| Light | #828c94 | Footnotes, fine print | +| Inverse | #ffffff | Text on dark backgrounds | +| Link | #0072bc | Hyperlinks | + +## Accent Colors + +| Role | Hex | +|------|-----| +| Primary | #0072bc | +| Navy / primary dark | #005b96 | +| Light blue | #19a3fc | + +## Status Colors + +| Role | Hex | +|------|-----| +| Success | #00cb5d | +| Warning | #ffc400 | +| Alert | #ff7a00 | +| Danger | #e42600 | +| Info | #19a3fc | + +## Surface Colors + +| Role | Hex | Text | +|------|-----|------| +| Page background | #ffffff | — | +| Card background | #f8f8f8 | — | +| Card border | #d5d9db | — | +| Table header | #005b96 | #ffffff | +| Table alt row | #f8f8f8 | — | +| Table border | #d5d9db | — | +| Callout (default) | #005b96 | #ffffff | +| Callout (success) | #00cb5d | #ffffff | +| Callout (warning) | #ffc400 | #2e404d | +| Divider | #d5d9db | — | + +## Chart Series Colors (in order) + +Use these for bar charts, line charts, donut segments, and stacked charts. +Assign in order: first data series gets series-1, second gets series-2, etc. + +| Series | Hex | Name | +|--------|-----|------| +| series-1 | #005b96 | Smart Navy | +| series-2 | #0072bc | Future Blue | +| series-3 | #19a3fc | Light Blue | +| series-4 | #00cb5d | Success Green | +| series-5 | #ffc400 | Warning Amber | +| series-6 | #ff7a00 | Alert Orange | +| series-7 | #e42600 | Danger Red | +| series-8 | #828c94 | Gray (overflow) | + +## Chart Special Colors + +| Role | Hex | +|------|-----| +| Gridlines | #ececec | +| Axis lines | #828c94 | +| Axis labels | #586671 | +| Waterfall base | #586671 | +| Waterfall decrease | #00cb5d | +| Waterfall increase | #ffc400 | +| Waterfall total | #005b96 | + +## Badges + +All badges use transparent background with colored bold uppercase text. + +| Badge class | Text color | +|-------------|------------| +| badge-blue | #0072bc | +| badge-navy | #005b96 | +| badge-green | #00cb5d | +| badge-gray | #828c94 | +| badge-warning | #ffc400 | +| badge-danger | #e42600 | + +## Card Accents + +Left-border color by card class: + +| Class | Border color | +|-------|-------------| +| card (default) | #0072bc | +| accent-navy | #005b96 | +| accent-success | #00cb5d | +| accent-warning | #ffc400 | +| accent-danger | #e42600 | + +## Stat Cards + +| Element | Color | +|---------|-------| +| Value text | #151d2c | +| Label text | #586671 | +| Detail text | #828c94 | +| Border | #d5d9db | +| Background | #f8f8f8 | + +## Scenario Colors + +| Scenario | Color | +|----------|-------| +| Conservative | #005b96 | +| Moderate | #0072bc | +| Aggressive | #00cb5d | + +## Table Row Special Classes + +### row-subtotal +- Background: #f8f8f8 +- Text: #151d2c (bold) +- Top border: 1pt #005b96 + +### row-highlight +- Background: #005b96 +- Text: #ffffff (bold) \ No newline at end of file diff --git a/studies/202512_GenesysCX/ctm-token-calculator/config.toml b/studies/202512_GenesysCX/ctm-token-calculator/config.toml index 67631c7..d91c90c 100644 --- a/studies/202512_GenesysCX/ctm-token-calculator/config.toml +++ b/studies/202512_GenesysCX/ctm-token-calculator/config.toml @@ -1,9 +1,12 @@ -# Mercury app-shell theme — matched to the notebooks' chart chrome -# (same warm-neutral surfaces and capability blue as the figures). +# Mercury app-shell theme — NTT DATA brand (light), modern surfaces. +# See docs/brand.md for the source palette. # # Loaded from the directory where you launch `mercury` (this project root); -# restart the server to apply changes. Full key list: mercury/config.py -# DEFAULT_THEME — anything omitted is derived from the values below. +# restart the server to apply changes. Only keys in mercury/config.py +# CSS_VARIABLE_MAP emit a CSS variable — anything else in DEFAULT_THEME is +# either derived or component-baked (e.g. success/warning/danger, slider +# track, widget bg) and silently no-ops here. Omitted keys are derived +# from the ones below. [main] title = "CTM × Genesys — Business Case" @@ -21,23 +24,57 @@ source with `python scripts/export_report.py`. """ [theme] -# text — same ink scale as the figures -font_family = "system-ui, -apple-system, 'Segoe UI', sans-serif" -heading_font_family = "system-ui, -apple-system, 'Segoe UI', sans-serif" -text_color = "#0b0b0b" -muted_text_color = "#52514e" +# ── Type — Georgia headings, Arial body. Both web-safe system fonts, +# so no font_url / network fetch. Georgia ships only normal+bold, so +# heading weight is 700 (the default 800 would render as faux-bold). ── +font_family = "Arial, 'Helvetica Neue', Helvetica, sans-serif" +heading_font_family = "Georgia, 'Times New Roman', Times, serif" +font_size = "15px" +font_weight = "normal" +heading_font_weight = "700" -# surfaces — warm neutrals from the chart chrome -background_color = "#f4f3ef" -content_background_color = "#fcfcfb" -surface_color = "#fcfcfb" -sidebar_background_color = "#f4f3ef" -sidebar_text_color = "#0b0b0b" -border_color = "#e1e0d9" +# ── Text — NTT ink scale ── +text_color = "#2e404d" # body +muted_text_color = "#586671" # captions / secondary -# accents — the figures' capability blue -primary_color = "#2a78d6" -accent_color = "#2a78d6" -focus_border_color = "#2a78d6" -topbar_background_color = "#0b0b0b" -topbar_text_color = "#fcfcfb" +# ── Surfaces — white content floating on a soft neutral canvas (depth). +# For a strictly-white page instead, set background_color = "#ffffff". ── +background_color = "#f4f5f6" # outer page +content_background_color = "#ffffff" # notebook column +surface_color = "#ffffff" +card_background_color = "#f8f8f8" # brand card +border_color = "#d5d9db" # brand border +border_radius = "10px" # modern rounding + +# ── Accents — Future Blue. primary_color also drives the Run button + focus. ── +primary_color = "#0072bc" +accent_color = "#0072bc" +focus_border_color = "#0072bc" +hover_background_color = "#eef5fb" # light blue tint +selected_background_color = "#dcecfa" + +# ── Sidebar — clean white, hairline divider ── +sidebar_background_color = "#ffffff" +sidebar_text_color = "#2e404d" +sidebar_title_color = "#151d2c" +sidebar_shadow = "1px 0 0 #d5d9db" + +# ── Top bar — deep NTT navy (brand heading-primary) ── +topbar_background_color = "#151d2c" +topbar_text_color = "#ffffff" +topbar_border_color = "rgba(255,255,255,0.08)" + +# ── Footer ── +footer_background_color = "#ffffff" +footer_text_color = "#586671" +footer_border_color = "#d5d9db" + +# ── Run button — subtle brand-blue gradient (else derives from primary) ── +run_button_background = "linear-gradient(180deg, #0087dc 0%, #0072bc 100%)" +run_button_background_hover = "linear-gradient(180deg, #1a93e6 0%, #0079c8 100%)" +run_button_text_color = "#ffffff" + +# ── Depth — soft, navy-tinted shadows (modern) ── +shadow_sm = "0 1px 2px rgba(21,29,44,0.05)" +shadow_md = "0 6px 18px rgba(21,29,44,0.08)" +shadow_lg = "0 16px 40px rgba(21,29,44,0.10)"