As many of you know or are just finding out, Mercedes-Benz.io has just celebrated its 5th anniversary, and to mark this event, we decided to roll out the plan for evolving Mercedes-Benz.io’s brand. The idea of a brand evolution has been in the works for months, but we felt that now was the perfect opportunity to stand back and take a hard look at our brand. The number of MB.ioneers is increasing, we are communicating actively in way more channels, showing up at more events, and betting on a bigger exposure of our brand. So, we need to create a bigger impact every time our brand is in the spotlight.

Celebrating 5th Anniversary

It was also important to look at the market, but most of all, to reevaluate our brand positioning as a subsidiary of one of the most popular brands in the world. I realized that our place within the Mercedes-Benz Group was not being taken fully into consideration, and our brand connection was relying too much on just our logo. 

That is why we saw the opportunity for a brand evolution. And in this article, we will explain the “behind the scenes” of the changes coming to our brand, what we did and why we did it. Plus, I will tell you how nerve-wracking it is to play around with a brand and embrace color gradients in the age of dark themes and solid backgrounds.

The Brandstorming

Before approaching what we wanted to change or evolve in our brand, it was important for us to make sure we knew what needed to be kept the same – our logo. Since being more recognizable is our goal, it did not make sense to take away from all the brand-building of the last 5 years. Therefore, we also did not change our font. Although we want to be closer to the Mercedes-Benz brand, we want to keep our main visual elements and what makes our brand unique.

So, now we know the font and the logo will not change. Which makes everyone a little less scared, but also wondering, because at the end of the day what could be the substantial changes that deserve this article? 

The answer to the question above is “clear” to me. As the brand designer, what was lacking in the brand was a strong visual personality. We had all the elements there, but the glue was missing. And the WOW factor was missing as well. As a driver of the Mercedes-Benz.io brand in several events, it was getting clear that our vision was not being transmitted visually in the best way possible, so we had to take all of this to the drawing board and try to produce concepts that made sense and fulfilled all the checkboxes we needed. 

Mercedes-Benz.io Brand on events

The concept

Conceptually, we had a lot of ideas going on in our heads. Therefore, we tried to stick with keywords that would help us find a clear path that we could later transform into visual assets. The most predominant ones were the ideas of movement, modernity, luxury, and adaptability. Capable of being like water. Ready for everything. For every change. And adapt accordingly with the same ability as ever.  

It was with all of this in mind that we agreed on these main changes. 

We shifted our color palette by changing our complementary color from a bright green to a strong pink, while keeping our signature sky blue as the main color. We also brought in a fresh cohesive approach to our art direction and photography. And we have further developed our shapes into 3D ones, so we can give more depth and movement to the way we present ourselves. Let us now do a deep dive into these changes.

Movement, modernity, luxury, and adaptability

From Green to Pink to Gradients. 

I will be honest, the revamp started here. The idea started here, in April 2022, when I tried to see how pink would work with our blue. And then how they would work in a gradient. In my opinion, it worked perfectly. We wanted to show fluidity, modernity, and the capability of adapting. The gradients give us that. Not only does pink supply all the contrast green did not, but it also revealed itself by being an amazing gradient partner to our blue. It allowed us to have fluid, vibrant gradients that uncover purple in most of them. And this is important, why may you ask? Well, purple is a color highly related to Luxury, which is the overall Mercedes-Benz purpose. This allows us to get closer, without losing our identity. 

From 2D to 3D Shapes

Our shapes always gave us room to play around. They are great for patterns and monochromatic designs. However, they lack depth. And this, added to their lack of texture, can make it hard for our brand assets to stand out amongst other tech companies while being side by side in events, for example. Therefore, we have created alternatives. We have not crossed the 2D shapes from our brand book. We just introduced their 3D variants, with a fresh look that can be used whenever we want to have more personality and need shapes to create a “standing from the crowd” design.  

Shapes and Backgrounds for the future

Cohesive Photography

We felt that we had a challenge with photography cohesiveness, due to having four different offices and relying on a lot of photos taken in each one of those offices.

For this reason, we made the decision to expand our team with a Media Producer who handles our visual assets, including taking all photos with the same clear vision, creating the unified feeling that was missing from our media. The same goes for our videos, where we were able to explore our visual language and personality, while keeping the cohesiveness of our brand identity.

Have you seen our amazing Lisbon office?

Modern Iconography

Regarding our iconography, we felt that it was lacking modern aesthetics and was too thin-lined. This could result in a loss of power when being put against other elements in a PowerPoint deck. Thus, we decided to shift towards an icon library that is more inclined toward digital platforms, with wider lines and less detail, since they were not being used in printing assets. 

Wrapping it all up:

We are really excited about this brand’s evolution and all the wonderful things that can come with it. We want to stand out and be recognizable. This requires bold moves from us, which should not mean we lose any of our values and personality traits. That is why we decided to keep our main brand assets intact, adjust what could be improved, and be creative with what we have in our hands.

Since a picture is worth a thousand words, I will leave it up to all the designs you will be able to check throughout our communication channels, to WOW you as they have WOWed us. And hope you feel as connected to our brand and get as excited as we are.

Examples of the brand’s evolution applications

Use Tailwind without Tailwind

Tailwind is one of those very controversial things, some people argue that it is the best since sliced bread, others it is a tool sent by the devil itself. Nonetheless, this is not an article about if you should use it or not, there are already plenty of those articles about the pros and cons on the internet.

What makes Tailwind good is the documentation, you may not agree on the “naming” but for every class that you can use there is an equivalent showing how to use it with CSS, for that, the team has done an outstanding job.

Tailwind is super fun to work with after you pass the initial learning threshold, but as a Developer, you still need to understand CSS to use it correctly.

CSS is not hard nor is broken.

In the end, it is just a tool to help you to write CSS, and as a tool, it limits the options of what you could do, for example, you would never be able to use a custom grid layout with Tailwind only, as the one below:

Grid Layout MobileGrid Layout Desktop
Source: https://webkit.org/demos/css-grid/

In this article, you will learn how to use Tailwind documentation to write your CSS styles. The following topics will be discussed:

The idea is to have the full power to write your CSS together with the cool ideas and patterns created by the Tailwind team. So let’s get started.


Preflight is a set of base styles for Tailwind projects that are designed to smooth over cross-browser inconsistencies and make it easier for you to work within the constraints of your design system.

Here you have basically to copy the preflight.css created by them.

/* preflight.css */
::after {
  box-sizing: border-box;
  border-width: 0;
  border-style: solid;
  border-color: currentcolor;

html {
  line-height: 1.5;
  text-size-adjust: 100%;
  tab-size: 4;
  font-family: system-ui;

body {
  margin: 0;
  line-height: inherit;

hr {
  height: 0;
  color: inherit;
  border-top-width: 1px;

abbr:where([title]) {
  text-decoration: underline dotted;

h6 {
  font-size: inherit;
  font-weight: inherit;

a {
  color: inherit;
  text-decoration: inherit;

strong {
  font-weight: bolder;

pre {
    "Liberation Mono",
    "Courier New",
  font-size: 1em;

small {
  font-size: 80%;

sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;

sub {
  bottom: -0.25em;

sup {
  top: -0.5em;

table {
  text-indent: 0;
  border-color: inherit;
  border-collapse: collapse;

textarea {
  font-family: inherit;
  font-size: 100%;
  font-weight: inherit;
  line-height: inherit;
  color: inherit;
  margin: 0;
  padding: 0;

select {
  text-transform: none;

[type="submit"] {
  appearance: button;
  background-color: transparent;
  background-image: none;

:-moz-focusring {
  outline: auto;

:-moz-ui-invalid {
  box-shadow: none;

progress {
  vertical-align: baseline;

::-webkit-outer-spin-button {
  height: auto;

[type="search"] {
  appearance: textfield;
  outline-offset: -2px;

::-webkit-search-decoration {
  appearance: none;

::-webkit-file-upload-button {
  appearance: button;
  font: inherit;

summary {
  display: list-item;

pre {
  margin: 0;

fieldset {
  margin: 0;
  padding: 0;

legend {
  padding: 0;

menu {
  list-style: none;
  margin: 0;
  padding: 0;

textarea {
  resize: vertical;

textarea::placeholder {
  opacity: 1;
  color: #9ca3af;

[role="button"] {
  cursor: pointer;

:disabled {
  cursor: default;

object {
  display: block;
  vertical-align: middle;

video {
  max-width: 100%;
  height: auto;

That’s it, just add this CSS to your project.


The theme file is where you define your project’s color palette, type scale, fonts, breakpoints, border radius values, and more.

This is the most important part, getting the same idea of the tailwind.config.js file where you can customize your theme, create a theme file following the Tailwind definitions:

/* theme.css */
:root {
  --size-0-5: 0.125rem; /* spacing:0.5 */
  --size-1: 0.25rem; /* spacing:1 */
  --size-1-5: 0.375rem; /* spacing:1.5 */
  --size-2: 0.5rem; /* spacing:2 */
  --size-2-5: 0.625rem;
  --size-3: 0.75rem;
  --size-3-5: 0.875rem;
  --size-4: 1rem;
  --size-5: 1.25rem;
  --size-6: 1.5rem;
  --size-7: 1.75rem;
  --size-8: 2rem;
  --size-9: 2.25rem;
  --size-10: 2.5rem;
  --size-11: 2.75rem;
  --size-12: 3rem;
  --size-14: 3.5rem;
  --size-16: 4rem;
  --size-20: 5rem;
  --size-24: 6rem;
  --size-28: 7rem;
  --size-32: 8rem;
  --size-36: 9rem;
  --size-40: 10rem;
  --size-44: 11rem;
  --size-48: 12rem;
  --size-52: 13rem;
  --size-56: 14rem;
  --size-60: 15rem;
  --size-64: 16rem;
  --size-72: 18rem;
  --size-80: 20rem;
  --size-96: 24rem;
  --size-xs: 20rem; /* 320px */
  --size-sm: 24rem; /* 384px */
  --size-md: 28rem; /* 448px */
  --size-lg: 32rem; /* 512px */
  --size-xl: 36rem; /* 576px */
  --size-2xl: 42rem; /* 672px */
  --size-3xl: 48rem; /* 768px */
  --size-4xl: 56rem; /* 896px */
  --size-5xl: 64rem; /* 1024px */
  --size-6xl: 72rem; /* 1152px */
  --size-7xl: 80rem; /* 1280px */
  --size-full: 100%;
  --size-fit: fit-content;
  --size-min: min-content;
  --size-max: max-content;
  --size-auto: auto;
  --size-none: none;
  --size-prose: 65ch;
  --size-screen-width: 100vw;
  --size-screen-height: 100vh;
  --size-screen-xs: 480px;
  --size-screen-sm: 640px;
  --size-screen-md: 768px;
  --size-screen-lg: 1024px;
  --size-screen-xl: 1280px;
  --size-screen-2xl: 1536px;
  --grid-1: repeat(1, minmax(0, 1fr));
  --grid-2: repeat(2, minmax(0, 1fr));
  --grid-3: repeat(3, minmax(0, 1fr));
  --grid-4: repeat(4, minmax(0, 1fr));
  --grid-5: repeat(5, minmax(0, 1fr));
  --grid-6: repeat(6, minmax(0, 1fr));
  --grid-7: repeat(7, minmax(0, 1fr));
  --grid-8: repeat(8, minmax(0, 1fr));
  --grid-9: repeat(9, minmax(0, 1fr));
  --grid-10: repeat(10, minmax(0, 1fr));
  --grid-11: repeat(11, minmax(0, 1fr));
  --grid-12: repeat(12, minmax(0, 1fr));
  --border: 1px;
  --border-0: 0;
  --border-2: 2px;
  --border-4: 4px;
  --border-8: 8px;
  --ring: 0 0 0 var(--border);
  --ring-2: 0 0 0 var(--border-2);
  --ring-4: 0 0 0 var(--border-4);
  --ring-8: 0 0 0 var(--border-8);
  --rounded: 0.25rem;
  --rounded-sm: 0.125rem;
  --rounded-md: 0.375rem;
  --rounded-lg: 0.5rem;
  --rounded-xl: 0.75rem;
  --rounded-2xl: 1rem;
  --rounded-3xl: 1.5rem;
  --rounded-full: 9999px;
  --shadow: 0 1px 3px 0 rgb(0 0 0 / 10%), 0 1px 2px -1px rgb(0 0 0 / 10%);
  --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 5%);
  --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 10%), 0 2px 4px -2px rgb(0 0 0 / 10%);
  --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 10%), 0 4px 6px -4px rgb(0 0 0 / 10%);
  --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 10%), 0 8px 10px -6px rgb(0 0 0 / 10%);
  --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 25%);
  --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 5%);
  --font-weight-thin: 100;
  --font-weight-extralight: 200;
  --font-weight-light: 300;
  --font-weight-normal: 400;
  --font-weight-medium: 500;
  --font-weight-semibold: 600;
  --font-weight-bold: 700;
  --font-weight-extrabold: 800;
  --font-weight-black: 900;
  --line-spacing-xs: 1rem;
  --line-spacing-sm: 1.25rem;
  --line-spacing-md: 1.5rem;
  --line-spacing-lg: 1.75rem;
  --line-spacing-xl: 1.75rem;
  --line-spacing-2xl: 2rem;
  --line-spacing-3xl: 2.25rem;
  --line-spacing-4xl: 2.5rem;
  --line-spacing-5xl: 1;
  --line-spacing-6xl: 1;
  --line-spacing-7xl: 1;
  --line-spacing-8xl: 1;
  --line-spacing-9xl: 1;
  --text-xs: 0.75rem;
  --text-sm: 0.875rem;
  --text-md: 1rem;
  --text-lg: 1.125rem;
  --text-xl: 1.25rem;
  --text-2xl: 1.5rem;
  --text-3xl: 1.875rem;
  --text-4xl: 2.25rem;
  --text-5xl: 3rem;
  --text-6xl: 3.75rem;
  --text-7xl: 4.5rem;
  --text-8xl: 6rem;
  --text-9xl: 8rem;
  --color-canvas: #f9fafb; /* gray:50 */
  --color-contrast: #27272a; /* zinc:800 */
  --color-contrast-50: #fafafa; /* zinc:50 */
  --color-contrast-100: #f4f4f5; /* zinc:100 */
  --color-contrast-200: #e4e4e7; /* zinc:200 */
  --color-contrast-300: #d4d4d8; /* zinc:300 */
  --color-contrast-400: #a1a1aa; /* zinc:400 */
  --color-contrast-500: #71717a; /* zinc:500 */
  --color-contrast-600: #52525b; /* zinc:600 */
  --color-contrast-700: #3f3f46; /* zinc:700 */
  --color-contrast-800: #27272a; /* zinc:800 */
  --color-contrast-900: #18181b; /* zinc:900 */
  --color-primary-backdrop: #bfdbfe; /* blue:200 */
  --color-primary-focus: #93c5fd; /* blue:300 */
  --color-primary: #2563eb; /* blue:600 */
  --color-primary-content: #1e40af; /* blue:800 */
  --color-primary-contrast: #fff;
  --color-error-backdrop: #fecdd3; /* rose:200 */
  --color-error-focus: #fda4af; /* rose:300 */
  --color-error: #f43f5e; /* rose:600 */
  --color-error-content: #9f1239; /* rose:800 */
  --color-error-contrast: #fff;
  --color-success-backdrop: #bbf7d0; /* green:200 */
  --color-success-focus: #86efac; /* green:300 */
  --color-success: #22c55e; /* green:600 */
  --color-success-content: #166534; /* green:800 */
  --color-success-contrast: #fff;
  --color-content-heading: #111827; /* gray:900 */
  --color-content-body: #1f2937; /* gray:800 */
  --color-content-secondary: #374151; /* gray:700 */
  --color-content-tertiary: #6b7280; /* gray:500 */
  --color-content-disabled: #9ca3af; /* gray:400 */
  --color-content-contrast: #d1d5db; /* gray:300 */

@media (prefers-color-scheme: dark) {
  :root {
    --color-canvas: #27272a; /* zinc:800 */
    --color-contrast: #fff;
    --color-contrast-50: #18181b; /* zinc:900 */
    --color-contrast-100: #27272a; /* zinc:800 */
    --color-contrast-200: #3f3f46; /* zinc:700 */
    --color-contrast-300: #52525b; /* zinc:600 */
    --color-contrast-400: #71717a; /* zinc:500 */
    --color-contrast-500: #a1a1aa; /* zinc:400 */
    --color-contrast-600: #d4d4d8; /* zinc:300 */
    --color-contrast-700: #e4e4e7; /* zinc:200 */
    --color-contrast-800: #f4f4f5; /* zinc:100 */
    --color-contrast-900: #fafafa; /* zinc:50 */
    --color-primary-backdrop: #93c5fd; /* blue:300 */
    --color-primary-focus: #3b82f6; /* blue:500 */
    --color-primary: #2563eb; /* blue:600 */
    --color-primary-content: #1e40af; /* blue:800 */
    --color-primary-contrast: #fff;
    --color-error-backdrop: #fda4af; /* rose:300 */
    --color-error-focus: #f43f5e; /* rose:500 */
    --color-error: #e11d48; /* rose:600 */
    --color-error-content: #9f1239; /* rose:800 */
    --color-error-contrast: #fff;
    --color-success-backdrop: #86efac; /* green:300 */
    --color-success-focus: #22c55e; /* green:500 */
    --color-success: #16a34a; /* green:500 */
    --color-success-content: #166534; /* green:800 */
    --color-success-contrast: #fff;
    --color-content-heading: #f9fafb; /* gray:50 */
    --color-content-body: #e5e7eb; /* gray:200 */
    --color-content-secondary: #d1d5db; /* gray:300 */
    --color-content-tertiary: #6b7280; /* gray:500 */
    --color-content-disabled: #4b5563; /* gray:600 */
    --color-content-contrast: #374151; /* gray:700 */

@custom-media --xs (min-width: var(--size-screen-xs));
@custom-media --sm (min-width: var(--size-screen-sm));
@custom-media --md (min-width: var(--size-screen-md));
@custom-media --lg (min-width: var(--size-screen-lg));
@custom-media --xl (min-width: var(--size-screen-xl));
@custom-media --xxl (min-width: var(--size-screen-2xl));

To use those variables, you can declare as follows:

.example {
  padding: var(--size-3); /* p-3 */
  border-radius: var(--rounded-lg); /* rounded-lg */
  box-shadow: var(--shadow-lg); /* shadow-lg */
  font-size: var(--text-sm); /* text-sm */
  line-height: var(--line-spacing-sm); /* text-sm */

You can define your CSS variables to have the same values defined in the Tailwind, so you can get through their docs and use their style. But you wouldn’t need to define a variable for every single class, some classes like inline-flex can be directly translated to display: inline-flex.

The good thing is that is one dependency less in your project, no matter how fast the tailwind (re)builds the CSS it will never the faster than having it directly declared, and the main point is that gives the developer full control. The downside is that you lose their syntax sugar.


Taking what you learned and applying it to a real-world scenario: Imagine you are building a UI Library. You start to build a badge component. This component should have options to change the size, color, and format, so you can create the following style:

/* badge.css */
.badge {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  white-space: nowrap;
  padding: var(--size-1) var(--size-2);
  text-align: center;
  vertical-align: middle;
  font-size: var(--badge-font-size, var(--text-md));
  line-height: var(--badge-line-height, var(--line-spacing-md));
  font-weight: var(--font-weight-semibold);
  border: var(--badge-border, var(--border) solid var(--color-contrast-200));
  border-radius: var(--badge-border-radius, var(--rounded-lg));
  background-color: var(--badge-background-color, var(--color-contrast-50));
  color: var(--badge-color, var(--color-content-body));

  &.is-pill {
    --badge-border-radius: var(--rounded-full);

  &.is-xs {
    --badge-font-size: var(--text-xs);
    --badge-line-height: var(--line-spacing-xs);

  &.is-sm {
    --badge-font-size: var(--text-sm);
    --badge-line-height: var(--line-spacing-sm);

  &.is-lg {
    --badge-font-size: var(--text-lg);
    --badge-line-height: var(--line-spacing-lg);

  &.is-xl {
    --badge-font-size: var(--text-xl);
    --badge-line-height: var(--line-spacing-xl);

  &.is-info {
    --badge-border: var(--border) solid var(--color-primary-focus);
    --badge-background-color: var(--color-primary);
    --badge-color: var(--color-primary-contrast);

  &.is-error {
    --badge-border: var(--border) solid var(--color-error-focus);
    --badge-background-color: var(--color-error);
    --badge-color: var(--color-error-contrast);

  &.is-success {
    --badge-border: var(--border) solid var(--color-success-focus);
    --badge-background-color: var(--color-success);
    --badge-color: var(--color-success-contrast);

  &.is-contrast {
    --badge-border: var(--border) solid var(--color-contrast-800);
    --badge-background-color: var(--color-contrast-700);
    --badge-color: var(--color-content-contrast);

Show code in action

Using CSS variables can give you more freedom to work with while having a consistent style.

An equivalent solution using Tailwind with @apply, even if this is not the recommended way to use the tailwind, but you can get an idea if placed inside the HTML.

/* badge.css */
.badge {
  @apply inline-flex flex-wrap items-center justify-center whitespace-nowrap py-1 px-2 text-center align-middle font-semibold;

  &:not(.is-pill) {
    @apply rounded-lg;

  &.is-pill {
    @apply rounded-full;

  &.is-xs {
    @apply text-xs;

  &.is-sm {
    @apply text-sm;

  &.is-base {
    @apply text-base;

  &.is-lg {
    @apply text-lg;

  &.is-xl {
    @apply text-xl;

  &:not(.is-info, .is-error, .is-success, .is-contrast) {
    @apply border-contrast-200 bg-contrast-50 text-content;

  &.is-info {
    @apply border-primary-focus bg-primary text-primary-contrast;

  &.is-error {
    @apply border-error-focus bg-error text-error-contrast;

  &.is-success {
    @apply border-success-focus bg-success text-success-contrast;

  &.is-contrast {
    @apply border-contrast-800 bg-contrast-700 text-content-contrast;

If you notice they are quite similar, but with Tailwind, you declare the properties horizontally and with CSS vertically, which gives the other a more clean aspect.

Now, checking a real-world example, like the one in the Netlify’s Page, things don’t look that simple anymore.

So, using the @apply mixing, you could have the best of both worlds, right? But, in this case, what would be the real benefit of writing classes using Tailwind instead of pure CSS?


This is just an example to give you an idea. Maybe you don’t need that flexibility of using CSS and Tailwind helps to build what you need, then go for it, or perhaps your team dislikes Tailwind and this could give them a taste. Whatever your situation is, it is good to have options. Photo by Kelly Sikkema on Unsplash.


View job openings