Badr Abardazzou

Tools

Theme Builder

Enter your brand colours once and download matching themes for Power BI, PowerPoint, Excel, Word, matplotlib, plotly, Vega-Lite and CSS. A live report page and slide show the result, and the checks tell you which colours clash before your readers do. Source on GitHub (MIT).

  1. 1
    Pick or enter colours

    Start from one of 16 report looks, paste the hex codes from your brand guide, or drop a theme file you already use.

  2. 2
    Check

    The preview redraws as you type. The checks flag text that is hard to read and series that colour-blind readers cannot tell apart.

  3. 3
    Download

    One zip with every file, or one file at a time, each with the exact clicks to apply it.

1Start from a look, your hex codes or a file

Each card shows the look on its own background: title in its ink colour, data colours in series order.

No colour found yet.

White and near-black greys in the list become the background and the text colour. The rest become data colours, in the order you pasted them.

Load a file

Drop a file here, or

brand.json from this page, a Power BI theme .json, an Office .thmx, or any .pptx, .potx, .xlsx or .docx: the tool reads the theme inside it.

2Adjust and check

Data colours

Series 1 takes colour 1 in every chart, in every tool. Office keeps the first 6.

    Neutrals
    Good, bad, neutral

    Used for KPI arrows, variance and conditional formatting.

    Fonts

    Pick a font installed on every machine that opens the file. Segoe UI, Aptos, Calibri, Arial and Georgia are safe on Windows and Office.

    See it as

    Mock data. Every colour, font and line comes from your theme.

    What the checks found

      Text contrast WCAG 2: 4.5:1 for body text, 3:1 for large text

      Data colours on the background 3:1 or more keeps lines and small marks visible

      Can every reader tell the series apart? closest pair per type of vision, CIEDE2000 distance, below 10 is a warning

      3Download

       

      How to apply each file

      Power BI Desktop

      View tab, Themes, Browse for themes, pick . Every visual takes the data colours, fonts, axis and gridline colours at once.

      PowerPoint

      Design tab, the More arrow at the bottom right of the Themes gallery, Browse for Themes, pick . To keep it: same arrow, Save Current Theme. To make it the default: right-click it in the gallery, Set as Default Theme.

      Excel

      Page Layout tab, Themes, Browse for Themes, pick . Charts, tables, cell styles and the colour picker switch to your colours and fonts.

      Word

      Design tab, Themes, Browse for Themes, pick . Headings take your heading font, charts and SmartArt take your colours.

      matplotlib
      import matplotlib.pyplot as plt
      plt.style.use("")
      plotly
      import json, plotly.io as pio, plotly.graph_objects as go
      with open("") as f:
          pio.templates["brand"] = go.layout.Template(json.load(f))
      pio.templates.default = "brand"
      Vega-Lite
      const config = await (await fetch("")).json();
      vegaEmbed("#chart", spec, { config });
      CSS
      <link rel="stylesheet" href="">
      .card { background: var(--theme-panel); color: var(--theme-ink); }
      .bar-1 { fill: var(--theme-series-1); }
      What is in the pack. powerbi/<name>.json is a Power BI report theme: data colours, text classes for titles, labels and callouts, the page and visual background, axis and gridline colours, good, bad and neutral for KPIs and conditional formatting, and the table accent. office/<name>.thmx is an Office theme with a 16:9 slide master: dark and light text colours, six accents, heading and body fonts, read by PowerPoint, Excel, Word and Outlook. office/theme1.xml is the same theme as a raw part, for anyone who swaps it inside a .pptx or .xlsx by hand. python/<name>.mplstyle sets the matplotlib colour cycle, background, text, grid and spines. python/plotly-<name>.json is a plotly template with the colourway and a sequential and diverging scale. web/vega-lite-<name>.json is a Vega-Lite config object. web/<name>.css holds CSS custom properties, --theme-series-1 onwards. brand.json holds your inputs: drop it back on this page next year and you edit the same theme instead of starting again.
      Why the order of the data colours matters. Power BI, Office, matplotlib, plotly and Vega-Lite all hand out colours in list order: the first series gets colour 1, the second gets colour 2, and so on. So colour 1 is the colour your readers see most, and colours 1 and 2 sit next to each other in almost every chart. Put your main brand colour first, put a clear contrast second, and keep two similar colours far apart in the list. Office stores six accents, so a seventh data colour reaches Power BI and Python but not PowerPoint.
      Why the contrast and colour-blind checks matter. About 1 man in 12 (8%) and 1 woman in 200 have a red-green colour deficiency, so in a meeting of twenty people at least one reader usually cannot tell a red bar from a green one. The tool simulates each deficiency at full strength (Machado, Oliveira and Fernandes, 2009) and measures the distance between every pair of data colours with CIEDE2000: below 10 two series start to merge on a chart, below 5 most people see one colour. Greyscale shows what the office printer does to your report. For text, WCAG 2 asks for 4.5:1 against the background for body text and 3:1 for large headings and chart marks.
      Privacy. Everything runs in this page. A file you drop is read by your browser and never uploaded, and the downloads are built on your machine. The share link carries your colours after the # sign, which browsers do not send to any server. The one outside call: when you type a font name the page does not know, the preview asks Google Fonts for that name so it can draw it.
      Related. Already have a theme file and want to know if it holds up? Theme Check reads a Power BI .json, a .thmx or any Office file and runs the same checks. Want slides that already use a theme like these? See the templates, where "Build a theme from this slide" opens this page with the slide's colours loaded. The 16 looks come from the design languages of the Open Visualization Protocol.