Roman Shamin Profile picture
Sep 29 27 tweets 8 min read Twitter logo Read on Twitter
Introducing #Harmony, a new UI color palette for product designers.

Harmony combines cutting-edge color technology, providing precise UI element contrast control, extremely consistent color shades, and P3 gamut support.

It’s free and available in Figma Community.
Begin here:

You’ll discover the palette neatly organized in the “Harmony Primitives” collection. Utilize it to craft aliases for your semantic tokens and set up UI theming modes.

P. S. Keep mirrored contrast pairs in mind (we’ll delve into these later).figma.com/community/file…
So, what makes it so special?

Harmony’s primary focus is accessibility, specifically visual contrast. It’s designed to enhance control over the contrast between UI elements, which is especially useful for designing both light and dark themes.

Let’s dive into features! This image spoofs how Apple represents the features of their products using a bento layout
1/7

Equal contrast within lightness levels

UI color palettes offer various levels of lightness for each color, such as Blue 100, Blue 200, Blue 300, and so on. Explains the concept of lightness levels in color palettes
The problem arises when you expect that text set in Blue 600 will be equally readable as text set in Cyan 600 because they both have a lightness level of 600.

Sadly, this is not true for 9 out of 10 UI palettes. Shows two buttons that both colored with 500 level color but have different contrast
However, it is true for Harmony.

Here, all colors within the same lightness group—Blue 600, Cyan 600, and even all grays at the 600 level—have identical contrast (65) with a white background. Image
So, you can confidently use different colors for notification types, tags, or user avatars.

Harmony ensures that the APCA contrast value between the color and its background remains consistent. Image
This also means that if your UI allows users to switch between multiple accent colors, like macOS and iOS do, all your text and buttons will remain equally legible too. Image
2/7

Mirrored contrast pairs

Dark shades in UI palettes are typically associated with light UI themes, while light shades are linked to dark themes, right?
The Harmony palette takes precision to a new level in this regard. Notice that every color column on the left, except the central one, has a pair with the same contrast level on the right: 65 and 65, 77 and 77, and so on. Image
I’m sure you’ve already grasped this: using colors from mirrored columns not only simplifies the process of creating semantic token aliases for UI themes but also ensures identical color contrast for text and buttons. Image
The contrast levels in these mirrored columns aren’t random; they align with APCA guidelines, and they even exceed them.

You can find more information about these guidelines on the APCA calculator website by @MyndexResearch: myndex.com/APCA/
3/7

P3 gamut for maximum color

Let’s face it: many accessible palettes look somewhat dull. This is an inevitable consequence of maintaining consistent chroma and lightness within a palette. Image
However, thanks to the introduction of new colors from the P3 gamut and Figma’s support for them, we’ve managed to maximize colorfulness for every color sample in Harmony.
Make sure to use the Display P3 color profile in Figma to access all those vibrant colors.

Additionally, look for the seventh feature to discover the best strategy for transferring colors from Figma to CSS.

help.figma.com/hc/en-us/artic…
4/7

Consistent chroma for similar objects

In Harmony, the Chroma parameter, which controls color vibrancy, remains consistent within a lightness group.
This means that semantically similar but differently colored objects, such as user avatars, tags, and notifications, will share a cohesive appearance, even if they are placed in various parts of the UI. Image
Let me emphasize this once more: take a moment to appreciate how consistent these colors appear!

Our brains recognize this similarity and consider even multicolored objects as part of the same family. Designers often overlook this level of detail. Image
Equal chroma and perceptual lightness are responsible for this effect. This is achieved thanks to OKLCH color space and APCA algorithm that powers Harmony under the hood.

If you’d like to delve deeper into OKLCH, read this post on the @evilmartians blog.

evilmartians.com/chronicles/okl…
5/7

Figma variables support

As mentioned before, Harmony can be found in the “Harmony Primitives” collection of Figma variables. All you need to do is assign these variables to your semantic tokens and set up UI theming modes.
I strongly recommend transitioning from styles to variables in Figma, as variables support aliasing, a crucial feature for creating scalable and adaptable design systems.

For more detailed information, refer to the Figma documentation.

help.figma.com/hc/en-us/artic…
6/7

Tailwind compatibile

The Harmony palette is completely compatible with the Tailwind palette. It aligns perfectly with its color count, lightness levels, and naming conventions.

Migrating to Harmony within an established Figma project should be a smooth transition.
7/7

OKLCH format for CSS

The HEX color format is slowly becoming obsolete. Furthermore, if you’re utilizing Display P3 mode in your Figma desktop app, copying and pasting HEX codes into CSS might not yield the desired results.
To maintain color consistency between Figma and CSS, I strongly recommend using OKLCH color codes as the primary reference.

Harmony offers these codes for each color sample, so be sure to inform your frontend team.
That’s Harmony!

I want to give credit to all Evil Martians designers who worked on the palette: @antiflasher and @strongeron.

Please share your feedback with us; we’re open and ready to help.
One more thing! 😁

While developing Harmony, the Evil Martians design team created a color palette generator capable of producing Figma files similar to Harmony, but with a multitude of customizable parameters.

⬇️
If you’d like us to release it to the public for free, please let us know by retweeting the initial tweet in this thread.

Here’s the deal: if we reach 100 retweets, we’ll share our UI color palette generator with everyone 🙌

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with Roman Shamin

Roman Shamin Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @romanshamin_en

Aug 25, 2022
The vertical metrics of the Martian Grotesk and Mono typeface family are one reason they work great in UIs.

In this thread, I explain how “equal” metrics—metrics that lead to equal space above and below the text—can make digital design and development easier.

#uiux #typography Text “Vertical metrics in U...
In a line of text, every letter has its own visible shape and size. However, when we implement a line of text with HTML/CSS in the browser, or by using text labels in XCode, we’re actually working with the invisible rectangular area around it.

This area is called a bounding box. Two texts “Halg”, the one o...
Even if you’re not a designer or a developer, you might notice this box when making slides in Apple Keynote, MS Powerpoint, or Google Slides. When selecting text objects we see the transform box around them; in most cases, this box corresponds to the bounding box. The images displays how tex...
Read 34 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(