~/wiki / dostupnost / tsvet-kak-edinstvennyy-signal-pochemu-eto-oshibka

Is red a mistake? Not for everyone. Why color should not be used as a single signal

Main chat

A chat for vibe coders: news, guides, live cases, marketplace, and finding executors.

$ cd section/ $ join vibe dev
Is red a mistake? Not for everyone. Why color should not be used as a single signal - обложка

Open any analytics. The red chart -- something's broken. The red plaque is a mistake. The red dot is unread and requires attention. It seems that this is just common sense: red = bad, green = good, and this is how the world works.

Now imagine a colorblind person who sees red and green as two shades of one dirty mustard. Or a Chinese user, for whom red is the color of luck, celebration and stock growth. Or a person in a dark topic in a bright sun, where your “alarm” merges with the background. For them, your neat visual code doesn't work. And you won’t even know it, because in metrics it looks like “unexplained conversion drawdowns in individual segments.”.

Color is a weak signal. Not bad, not forbidden, but weak: it is not enough to carry meaning alone. And if your entire state system is built on "red is wrong, green is success, yellow is attention," you don't have a design system, you have an assumption that everyone sees the world the same way.

Why this is not a “frequent case for 1% of users”

The argument “blind-blind people are few, will survive” sounds regularly – and it immediately fails for several reasons.

First, there are more people with certain color perception disorders in the grocery audience than it seems. On a large base, this is no longer an error, but a segment comparable to those for whom localization or separate tariffs are made.

Secondly, color breaks not only in colorblind people. It breaks down:

  • on cheap matrices, where red and orange are indistinguishable
  • in the sun when the contrast drops twice
  • in a dark topic, if it was done separately and forgot to recalculate the semantics
  • in printout and screenshot in black and white
  • when screenshare through compression in zoom
  • a tired person at three o'clock in the morning on duty

Third, color is a cultural code. Red in China and India is a positive. In financial interfaces in Japan, market growth is often red, the fall is green, the reverse of the Western norm. If you enter new markets, your “obvious” color semantics becomes obscure.

And most importantly, the cost of error in the interface, where color is the only signal, is always higher than it seems. A missed form error is a lost registration. A missed alert in the admin is an incident. Missing red in the surgeon's dashboard is no longer about design.

Basic rule: color is always duplicated

I'll put it as straight as possible so I can hang it over the table.

Color is a signal amplification, not the signal itself. If you remove the color and the meaning is gone, the design is broken.

This means that any condition you label with a color should have at least one additional carrier of meaning:

  • icon (cross, tick, exclamation point, info)
  • text label (“Error”, “Done”, “Attention”)
  • form or position (emphasis, frame, indentation, position in the list)
  • pattern or texture (strips, hatching – for charts and maps)
  • weight-change

It sounds banal, but in real layouts, this rule is constantly violated - especially where "it is so beautiful.".

Where it breaks most often

A few typical places I catch teams and myself:

  • statuses in tables: a small color dot without a signature - "active / on pause / blocked" can not be distinguished
  • form validation: red input frame with no error text next to
  • graphics with three to four lines of the same shade, differing only in color
  • category tags where color is the only thing distinguishing them
  • diffs and comparisons "was / became", where the plus and minus are only color
  • download and online status indicators: green and gray dots with no signature and typography

Checklist for the layout review

When you look at your own or someone else’s layout, run it to the following points:

  • Take a screenshot in grayscale. Is it still clear?
  • Does each color status have a text or icon next to it?
  • In graphs, lines differ not only in color, but also in style, marker or signature?
  • Errors in forms contain the error text, not just the red thread?
  • References in the text differ from ordinary text not only in color (emphasis, weight)?
  • In a dark topic, semantics persist: is a "dangerous" action still read as dangerous?
  • If the interface is printed, will critical information not be lost?

If at least one “no” point is not taste, it is to be improved.

How to embed this in the workflow, and not in the checklist “someday”

The most common mistake is to treat color availability as a final check before release. By this point, half of the solutions have already been cemented: the tokens are approved, the components are assembled, the developers have written the logic on status === 'error' ? 'red' : 'green'. It's expensive to fix, nobody wants to.

The rule is simple: color is checked where it appears. At the token stage, at the component stage, at the screen stage. Three points of control, not one at the end.

At the token level

When you define semantic tokens - color.status.error, color.status.success, color.status.warning - immediately start carrier tokens: icon.status.error, label.status.error. Not a “color of error,” but a “error marker” whose color is a property.

This changes the conversation with the developer. Instead of “paint red,” “apply an error marker,” the marker already knows it has an icon, color, and text class. The design system no longer depends on the discipline of each screen.

At the component level

Each status component - Badge, Tag, Alert, Toast, InputState - should have a strict rule: color does not exist separately from the icon or signature. This is built into the component API, not the confluence guideline.

Simple test: Try rendering a component with error status, but without the props icon and label. If you get a red spot, the component is poorly designed. Should swear in types or at least in a storibook.

Screen level

Here is the task of the designer and reviewer. Before you throw the layout into the maiden, run three fast modes:

  1. Grayscale - removes color completely
  2. Simulation of deuteranopia and protanopia - in Figma these are plugins, in the DevTools browser
  3. Scale down to 50% – small colored dots on statuses disappear first

If on any of the modes the state ceases to be read - a fixim before transfer to development.

Typical anti-patterns I see time and time again

"We'll add the icon later."

Don't add. "Then" is release, support, next quarter. If the icon is not in the first iteration of the component, it will never be, because the backlog is always longer than the will.

There is an icon, but it also differs in color

Favorite: a round badge with status, where for the active - a green circle, for the disabled - gray. Technically, there's an icon. Semantically, no, the shape is the same. Change the shape: dot, ring, cross, pause.

Toult instead of signature

“High the cursor and you’ll see the status.” There's no tultip on touch devices. On keyboard navigation, it often does not open. A person with tremors will not. A toult is an addition, not a replacement for a visible label.

Dark theme as "inverted light"

Red on a light background and the same red on a dark background are two different colors perceptually. The contrast drops, the saturation seems different, the boundary between “warning” and “error” blurs. The dark theme needs to be reassembled by semantics, not twist the slider in Figma.

Corporate palette schedules

When marketing brings a palette of five shades of blue and asks for "use in grocery dashboards," that's the way to hell. On a five-line graph, half the readers will see three. For data, you need a separate categorical palette, optimized for distinctiveness, not for a brandbook.

What to ask at a rev

When watching someone else’s layout or defending your own, keep a set of short questions ready. They remove 80% of disputes "and that's fine.".

  • What happens if you open this screen in grayscale?
  • What is the second meaning of this status other than color?
  • Is this component in a design system or hand-drawn? If in the system - does it guarantee the icon and signature?
  • What will the user see with a screenshot in the chat, compressed jeepeg?
  • What does it look like in a dark topic - recounted or just inverted?
  • On the chart, the lines differ in something other than shade?
  • If this is a validation error, is the error text exactly there, or is it just a frame?

If the author of the layout answers half of the questions "well, usually seen" - this is not the answer, this is an assumption.

Segment summary

Color is a powerful tool because it works quickly and emotionally. But speed and emotion are not the same as signal accuracy. The signal should be redundant: color plus icon plus text, not “one of three for your taste.” This redundancy is cheap if it is embedded in tokens and components, and expensive if it is screwed up in the final review. Choose cheaply.

When the team works with AI and generative interfaces

The theme of color as a single signal becomes more acute when a part of the UI is collected not by a person, but by a model. Text prompt “Make the status of the error red” is exactly what will give a red div without an icon and without a signature, if the design system does not have a hard contract. AI copies the surface, not the intent.

What breaks down in AI flow

Practice scenario: The product team connects the MCP server to Figma so that the agent collects screen drafts from library components. If the Alert component accepts variant="error" and substitutes the icon and default label itself – all is well, the agent cannot break it. If the icon and the text are separate layers, which “usually throws the designer”, the agent will not remember them. On the way out is a one-word red plaque, and she leaves for Storybook as a valid example.

The same goes for v0, Lovable, Cursor and any other interface generator. The model is optimized for “look like an error” rather than “considered as an error by a blind user in the sun.”.

How to lay protection

  • Make icon and label mandatory props status components, not optional with default undefined
  • In the description of the component for AI (props description, JSDoc, MCP diagram), explicitly write: “Variant defines color and icon; label is mandatory and should not duplicate variant”
  • In design tokens, call it color.feedback.error, not color.red.600. The model fed the tokens stops thinking “red = error” and starts thinking “error = error”
  • On the liner or CI side, a rule that drops the build if the code has an in-line color: red or #ff in status contexts

Prompts and revisions of generations

When you give an agent the task of collecting a status screen, a simple rule should be sewn into the system prompt: “Any state of error, success, warning should have an icon and a text description; color is not the only carrier of meaning.” This eliminates half of the problems even before the generation reaches the eye.

But the prompt is no guarantee. You need to revisit the generation in the same three modes as the human layout: grayscale, CVD simulation, reduced scale. If an agent generated ten screens in five minutes, it doesn’t mean you saved time, it means you have ten screens to review.

How to check quality systemically, not occasionally

A single check of the layout is hygiene. Systemic is a process that catches regressions without your involvement.

Auto-Availability Tests

  • axe-core or Pa11y in CI on key pages: they won’t catch “red without icons” but catch contrast, ARIA and lack of text in icons
  • Screenshot tests with built-in CVD filter: run critical screens through the simulation and compare with the standard
  • Visual regression to status components in Storybook - a separate story for each variant, including the edge case "label empty"

Metrics in the prode

If you have analytics, look at specific signals. How many users re-submit a form after a validation error? If a lot, maybe they can't see it. How many times do you press the switched off button? If pressed, the disabled state is read only in color. These are not ideal metrics, but they are cheaper than user tests and often highlight the same.

Team ritual

Once a sprint or once every two weeks – a short session of “accessibility pass” on new screens. Not an audit for a day, but 30 minutes, where a pair of designer + front run fresh layouts in grayscale and CVD simulations. Recorded findings don’t go to “someday,” but to the current sprint as bugs, not improvements.

How to explain the decision to the team when pressed by the deadline

The most common conversation is: “We have no time to add an icon, release tomorrow, fix in the next sprint.” Arguing about ethics and inclusion is useless here - it sounds like a luxury at the deadline. Other arguments work.

Language of business

  • Support: Every “I have nothing left” ticket (and in fact there was a red message that the user didn’t count) is upport money and a lost conversion
  • Legal risk: In some jurisdictions, accessibility is a legal requirement, and the absence of textual duplication of statuses is a specific WCAG violation for which a claim can be made
  • Screenshots and sharing: a third of correspondence about the product is screenshots in messengers, often shrugged. If the screenshot doesn't show what was wrong, it's a lost context for b2b trades and for snapport

Team language

The cost argument works with developers: adding an icon and label to a component once is an hour. Reworking forty screens after an audit in six months is a sprint. With product, there’s a growth argument: fewer funnel pass errors = higher conversions, and it’s measurable.

What not to do

Do not bring slides about color perception and the evolution of the eye. That won't convince anyone. Bring two screenshots of your own product — regular and grayscale — and ask, “Which one shows that the form didn’t go?” This conversation takes thirty seconds and closes the argument.

Checklist before Merge

  • Each status state has at least two carriers of meaning out of three: color, form / icon, text
  • The components of the design system do not technically allow to render the status without icon and signature
  • Run in grayscale and CVD-simulation passed – for new screens and for regressions
  • Dark theme collected by semantic tokens, not inversion
  • Charts use a categorical palette plus a line shape/marker rather than the brand's five shades
  • AI-generation and MCP-flow are rehearsed by the same criteria as manual layouts
  • CI has an automatic contrast check and at least one visual regression test for status components

If the answer to “usually yes” is not an answer. Discipline in a design system is when a rule is executed by a machine, not by the memory of the on-duty designer.

Questions for review layout

When you’re looking at someone else’s screen, don’t try to “appreciate the design.” Run it through a list of specific questions—each should have a yes or a specific reason no.

  • If you turn off color completely, can you distinguish error from success and from neutrality?
  • How many carriers of meaning do each status have: one, two, three? If one, why?
  • Does the icon have a text signature next to it or at least aria-label that doesn’t repeat adjacent text word for word?
  • What will a person with deuteranopia see on this graph: five different lines or two color groups?
  • What does this screen look like on a reaped screenshot in the messenger at 60% brightness on the street?
  • Does the Disabled button read as unavailable without a hover prompt?
  • In a dark topic, is semantics "dangerous/successful" retained or are colors simply inverted?
  • If it’s an AI-generated or MCP-pulled piece of UI, did it pass the same checks as the manual layout, or was it missed “because it looks OK”?

If the answer to at least one question is “you need to see” – look now, not after the release.

Anti-patterns that occur most often

These are not uncommon beginner mistakes. This is something that regularly hits the market in mature teams because it’s “faster” or “it’s already been.”.

Red frame around the field without error text

The field is lit up in red, and what is wrong - guess for yourself. Email? Password? Length? Format? The user pokes at random, the shape turns red again. Form conversion dies quietly, with only repeated submits visible in analytics.

Green and red status dots in the table

Classic admins and dashboards. "Active / Inactive", "Payed / Not Paid", "Online / Offline" - two dots of different colors, without a signature, without a form, without a toult. In grayscale, the table turns into identical gray circles. The solution is to add a form (full circle vs contour) or a short label nearby.

Message "success" dyed red "for quilt"

There are times when a brand is aggressively red and a designer decides to use the brand color everywhere, including statuses. A successful payment looks like a mistake. Brand color should not overlap with semantic – these are different layers of the system.

A traffic light of three close shades of orange

"Low/medium/high risk" in three shades of the same color. Distinguishable from the designer on a calibrated monitor, indistinguishable from the user on an office Dell with factory settings. You need a form, a number or a signature.

References that differ from the text only in color

Especially in tight tables and letters. Emphasizing is not atavism, it is the second carrier of meaning. You can remove it only if there is another obvious sign of clickability (icon, explicit hover, button container).

"We'll fix it in the next sprint."

The most expensive anti-pattern. Forty color-as-a-single-signal screens aren’t forty small bugs, they’re a system hole in a design system. It is fixed at the root (in the component), not on each screen separately.

Short summary

Color is an amplifier, not a carrier. It highlights the meaning already expressed in form, icon and text. Once color is the only channel, the interface breaks down for colorblind people, for a person in the sun, for a shrugged screenshot, for printing, for a dark topic collected through inversion.

A rule that saves hours of argument: for each status, at least two out of three carriers of meaning. Color, shape, text. One is always not enough, even if it seems that "and so obvious.".

It is not taste that works, but discipline. A component of a design system that physically prevents you from collecting status without an icon and signature. Run in grayscale and CVD as part of a review, not as a one-off audit. Autocontrast tests in CI. Thirty seconds of talking with a screenshot in grayscale instead of an hour-long presentation about inclusion.

Red is not a mistake. Red plus cross plus "failed to save" is a mistake. The difference between the two is the boundary between an interface that works for everyone and an interface that only works in good light.

$ cd ../ ← back to Accessibility