Theming

Beginning with color, setting up the infrastructure to enable multiple themes like light and dark mode for Magnetic

Beginning with color, setting up the infrastructure to enable multiple themes like light and dark mode for Magnetic

Timeline

6 months

Core team and role

Me • Design lead

Jesse Clark • Technical lead

Edvard Gezin • Design collaborator

Lindsey Titus • Eng partner

Outcome

8 Magnetic themes, powered by our color tokens

Color tokens applied to 100% of our components, allowing for seamless theme switching

Allows users to choose the theme of their choice

Sets path for future themes, such as various info densities

Background

Since it’s origination, Magnetic had supported one theme that was geared towards supporting one product. As Magnetic has scaled to now supporting 60+ products, we needed a way to support multiple color themes. This included:

In short, we needed a way to easily implement and maintain all of the work that went into updating and applying the color system.

Color tokens

Color tokens are a type of design tokens. Because color was the only initial element changing between themes, it was the first design token we started with.

I like to think of design tokens as an abstracted away container for a primitive, foundational element (e.g. a color of Lavender-45 or 4px for spacing). This container refers to the primitives, in order to dynamically change the color scheme for products or pages depending on theme chosen. So while the color palette provides the potential colors that a color token can refer to, color tokens are what get used in components, text, and all other elements on a page to enable theming changes.

For example, in Magnetic, the Negative icon uses the design token negative.icon.default. In light mode this refers to red-45, while in dark mode this refers to red-60.

Workshopping the color token structure

One of the hardest things about working on tokens is creating a naming system and structure that makes semantic sense to the designers and devs who will use it, is able to grow or contract, and can support needs without having unnecessary bloat.

Together with my colleagues on a scrappy token team, we held a series of workshops to evaluate naming and structures for color tokens, stress testing them versus our component needs.

Ultimately, we moved forward with a sentiment-based color token system originally created by the Asana design team.

Implementing color tokens

Next was working to figure out the detailed use of these color tokens in our components.

Token mapping

With the basics of the naming structure in place, I worked with Ed (a fellow Magnetic designer) to map in Figma, exactly how and where these color tokens would be applied to our components, bringing anomalies back to our token team for discussion and iteration.

Example from the mapping exercise of what color tokens the Select component would use.

Designing dark mode

Concurrently, Ed and I began to design Magnetic’s dark mode. This was again where the color system and easy-to-use rules came in handy, as we were first designing just using color system primitive colors while we figuring out the token structure.

Color styles, then eventually Figma variables

In our first implementation of this work, we had to rely on color styles in Figma to represent our color tokens and synced those values to code using a 3rd-party plugin called Tokens Studio. This process, however was quite tedious and required us to maintain an external theme file for every theme.

Once Figma released variables, we began testing that and eventually made the full migration to managing Figma variables in June 2024. In that process, we worked to back our styles with variables to ensure no breaking changes.

With the switch to variables, switching between themes became exponentially easier for our users.

With the switch to Figma variables, all themes are in one file allowing users to easily switch a page, frame, or component to a given theme.

Education

What I quickly realized about tokens is they are not something easy for many designers to intuitively grasp, especially after being accustomed to using primitive colors like “Blue-45” for buttons or “Neutral-15” for primary text. In addition, with the subsequent migration to Figma variables which would change how they would swap themes, I thought "how might we create education to help with these transitions?"

Documentation

Of course, for most design systems the first place to start is documentation. With the updated color system, status colors, and categorical colors, along now with the introduction of color tokens, I did a full overhaul of the Colors section on the Magnetic website.

Quick checklists

However, many designers don’t have the time to read through robust documentation. Ed and I created a couple checklists that designers could use right in Figma, which highlighted the most commonly used color tokens and helped with the transition to color tokens.

Ask Us Anything

Ed and I ran a series of Ask Us Anything where designers could ask anything regarding tokens and swapping themes.

Short videos

I recorded a set of short, 1-2 minute Loom-like videos for the Magnetic website and support channels that act as quick guides for designers on a variety of topics related to tokens, choosing themes, and switching themes. These serve as everlasting material that still get shared today.

Outcome

The implementation of color tokens and the migration from Figma styles to Figma variables provide:

Ease of use
For Magnetic consumers, they can seamlessly swap themes, designing in their theme of choice.

Time
For our team, tokens and variables have enabled a significant reduction in time and resources needed to maintain multiple themes and modes.

Agility
We are able to easily make system-wide updates or create new themes as needed (e.g. in the case of a Cisco product acquisition.)

Designers and developers can now easily use 8 themes supported by Magnetic. These include:

Default themes
Light and dark themes using the updated, inclusive status colors

Classic status colors
Light and dark themes using the classic, traffic light status colors

Brand accents
Two options: Themes that use either the default green accent color or an alternate blue accent color

Switching between the 8 themes supported by Magnetic

Challenges and key learnings

Colors were my first foray into design tokens, and so I learned many things along the way that I am taking with me as we expand our token system beyond colors to think about spacing (and more in the future).

Measure twice, cut once

Naming structures and the framework need to be deeply thought through and ideally stress tested by your users, because once out in the wild, changing a token structure or removing tokens can cause major breaking changes.

Start simple, wait to layer on complexity

For any design tokens, but particularly with color, these can become bloated and overly complex quickly. While our color token system works well and covers almost any use case for new components that come into the system, we do have unused tokens. What I wished we did was only create tokens as needed, to prevent bloat and also because adding tokens is a lot easier than removing them.

Collaborate to create

Design tokens provide a shared language between designers and developers. However, the mental model of tokens skews more closely with engineering, so it’s important to have both sides at the table when creating a token framework and naming structure. Now, I’m always thinking of the designer who is just onboarding onto Magnetic and has no idea what a design token even is and how we can make this as easy as possible for them.

Onward

At the beginning of 2025, in order to support multiple densities and responsiveness, I have begun leading a project on spacing tokens.

Though the color tokens project has gone relatively smoothly, I have learned from that project to do some things differently by:

  • Conducting an audit of 15+ other publicly available spacing systems

  • Reaching out to others in Cisco and the broader design system community for their approach and advice

  • Testing early spacing ideas and getting feedback from designers to help iterate on our structure and naming system

  • Leading out the gate with a lean spacing token system

I started the spacing token project by leading the token team through a series of mini-workshops to level set on all things spacing tokens.

Slides from a presentation to the Magnetic Design Team giving a primer on the impact and importance of spacing tokens.

Special shoutouts —

Though my engineering colleague, Jesse Clark and I largely lead the implementation and roll-outs of themes and tokens on the engineering and design side respectively, we have a small, but gritty token team of cross-organizational colleagues that we jam with weekly on all things tokens related.

Jesse Clark •

Jesse Clark

Jesse Clark

Technical lead, my dev partner for managing and implementing tokens and themes

Lindsey Titus •

Lindsey Titus

Lindsey Titus

Engineering partner, led dev efforts for the transition to Figma variables

Edvard Gezin •

Edvard Gezin

Edvard Gezin

Senior Designer, fellow Magnetic designer and collaborator

Kevin Conboy •

Kevin Conboy

Kevin Conboy

Senior Design Systems Engineer, Meraki

Cody Coats •

Cody Coats

Cody Coats

UI Engineer, Splunk

Tim Scheuering •

Tim Scheuering

Tim Scheuering

Senior Design Systems Engineer, Meraki