Foundations
Color
Color sets the tone of an interface and carries meaning. A standard palette, used with intent, keeps the experience familiar and consistent.
Fluent palettes
Fluent defines three palettes, each with its own role: neutral, shared and brand.
Neutral
Black, white and grays: the base for surfaces, text and layout.
Shared
Colors shared across Microsoft 365 for avatars, calendars, badges and status.
Brand
The product's identity color, for primary actions and selected states.
Neutral
The neutral palette holds black, white and the grays that form the base of the interface: surfaces, text, layout. In components, neutrals usually show state changes.
Visual hierarchy with neutrals
Use lighter neutrals for surfaces that need attention. The eye goes to the most important area without any added color.
bg-background-4 · app background
bg-background-2 · content area
bg-background-1 + shadow-4
Focus surfaces: Card, Dialog
Lightest = most important
Darker toward the background
Brand
The brand color makes a product recognizable at a glance. Apply it to specific areas to add emphasis and help people find their way. Each brand is a 16-step ramp; switching brands only takes data-brand.
The default Yugen UI brand is Sakura 桜 #C2347A, a deep cherry blossom pink. It reaches 5.16:1 with white text, and its hue sits about 30° away from danger red, so a primary button is never mistaken for a destructive action. The light steps 130–160 are the petal tones (#FFA7C9 → #FDEDF3).
Where the brand goes
Selected / on state
Focus indicator
- Use the brand for primary buttons and CTAs, selected and on states, focus and links.
- Keep the brand to small areas so it stays an accent.
- Use the tint step (Background2) for light selection areas such as nav items and tint badges.
- Don't spread the brand over large areas (header, sidebar, page background). It weakens the hierarchy and makes navigation harder.
- Don't use the brand for body text or decorative headings.
- Don't mix two brands in the same content area.
// index.html: change the brand for the whole app
<html data-brand="web">
// One region only (also set data-theme if it sits inside a different theme)
<section data-theme="light" data-brand="teams">...</section>Interaction states
On the web, components get darker as you interact: lightest at rest, darker on hover, darkest when pressed or selected. (Windows does the opposite: controls get lighter as you interact.)
| Appearance | Rest | Hover | Pressed | Try it |
|---|---|---|---|---|
| Primary | colorBrandBackground | colorBrandBackgroundHover | colorBrandBackgroundPressed | |
| Secondary | colorNeutralBackground1 | colorNeutralBackground1Hover | colorNeutralBackground1Pressed | |
| Subtle | transparent | colorSubtleBackgroundHover | colorSubtleBackgroundPressed | |
| Selected (tint) | colorBrandBackground2 | colorBrandBackground2Hover | colorBrandBackground2Pressed | Selected |
Focus state
With keyboard focus, the control color stays the same. Instead the control gets a thicker outline (2px colorStrokeFocus2), so keyboard interaction looks different from mouse interaction. Press Tab to try it.
Gradient
In Fluent 2, gradients are expressive: they appear in illustrations, heroes and landing pages to suggest light and movement. Gradients are not functional colors, so never use them for controls or states.
Yugen UI
Sakura
bg-gradient-sakura · text-gradient-sakura
colorGradientSakura1 → 3 · Yugen signature
Dusk
bg-gradient-dusk · text-gradient-dusk
colorGradientDusk1 → 3 · twilight
Sunset
bg-gradient-sunset · text-gradient-sunset
colorGradientSunset1 → 3 · sunset
Aurora
bg-gradient-aurora · text-gradient-aurora
colorGradientAurora1 → 3 · cool tones
Brand
bg-gradient-brand · text-gradient-brand
gradientBrand (follows data-brand)
import { GradientText, WavyUnderline, BloomArt } from "@/components/ui";
<h1 className="relative inline-block font-display text-display">
<GradientText gradient="sakura">Yugen UI</GradientText>
<WavyUnderline gradient="sakura" className="absolute inset-x-0 -bottom-4 h-5" />
</h1>
<div className="h-28 rounded-2xlarge bg-gradient-dusk" />- Use them for heroes, illustrations, onboarding, empty states and marketing pages.
- Use gradient text only at 28px or larger (title2 and up), with every color stop at 3:1 or more against the background.
- Use at most one gradient accent per view.
- Use the gradient tokens (they have dark variants) instead of mixing your own color stops.
- Don't use gradients on Button, Input, nav, status Badge or any other control.
- Don't use gradient text for body text, labels or numbers.
- Don't use gradients to show status (success / error).
- Don't animate gradients when the user has turned on reduced motion (prefers-reduced-motion).
Accessibility
- Keep enough contrast for people with low vision or color blindness: text ≥ 4.5:1 (large text ≥ 3:1), UI components ≥ 3:1.
- Where you can, let people pick the color scheme that suits them (light / dark / brand).
- Don't use color as the only way to convey meaning. Always add text, an icon or a shape.
The table below is computed live from the current tokens. Switch the theme at the top to check dark mode.
| Sample | Token pair | Ratio | WCAG AA |
|---|---|---|---|
| Aa | Primary text colorNeutralForeground1 / colorNeutralBackground1 | — | Fail 4.5:1 |
| Aa | Secondary text colorNeutralForeground2 / colorNeutralBackground1 | — | Fail 4.5:1 |
| Aa | Muted text colorNeutralForeground3 / colorNeutralBackground1 | — | Fail 4.5:1 |
| Aa | Placeholder colorNeutralForeground4 / colorNeutralBackground1 | — | Fail 4.5:1 |
| Aa | Text on a primary button colorNeutralForegroundOnBrand / colorBrandBackground | — | Fail 4.5:1 |
| Aa | Link colorBrandForegroundLink / colorNeutralBackground1 | — | Fail 4.5:1 |
| Aa | Text on the brand tint colorBrandForeground2 / colorBrandBackground2 | — | Fail 4.5:1 |
| Aa | Error colorStatusDangerForeground1 / colorStatusDangerBackground1 | — | Fail 4.5:1 |
| Aa | Success colorStatusSuccessForeground1 / colorStatusSuccessBackground1 | — | Fail 4.5:1 |
| Aa | Warning colorStatusWarningForeground1 / colorStatusWarningBackground1 | — | Fail 4.5:1 |
| Aa | Control border (checkbox, input underline) colorNeutralStrokeAccessible / colorNeutralBackground1 | — | Fail 3:1 |
| Aa | Focus / selection indicator colorCompoundBrandStroke / colorNeutralBackground1 | — | Fail 3:1 |
| Aa | Decorative border colorNeutralStroke1 / colorNeutralBackground1 | — | Not required |
| Aa | Disabled colorNeutralForegroundDisabled / colorNeutralBackground1 | — | Not required |
Color tokens
Each palette value is stored as a context-free global token. Alias tokens add context, so designers and developers can pick the right color without looking up hex codes. Components only use utilities mapped from aliases.
Neutral
colorNeutralForeground1
text-foreground-1 ·
colorNeutralForeground2
text-foreground-2 ·
colorNeutralForeground3
text-foreground-3 ·
colorNeutralForegroundDisabled
text-foreground-disabled ·
colorNeutralBackground1
bg-background-1 ·
colorNeutralBackground2
bg-background-2 ·
colorNeutralBackground3
bg-background-3 ·
colorSubtleBackgroundHover
bg-subtle-hover ·
colorNeutralStroke1
border-stroke-1 ·
colorNeutralStroke2
border-stroke-2 ·
colorNeutralStrokeAccessible
border-stroke-accessible ·
colorStrokeFocus2
outline-stroke-focus ·
Brand
colorBrandBackground
bg-brand-background ·
colorBrandBackgroundHover
bg-brand-background-hover ·
colorBrandBackgroundPressed
bg-brand-background-pressed ·
colorBrandBackground2
bg-brand-background-2 ·
colorBrandBackground2Hover
bg-brand-background-2-hover ·
colorBrandForeground1
text-brand-foreground-1 ·
colorBrandForeground2
text-brand-foreground-2 ·
colorCompoundBrandStroke
border-brand-stroke ·
Status
colorStatusDangerBackground3
bg-danger-background-3 ·
colorStatusDangerBackground1
bg-danger-background-1 ·
colorStatusDangerForeground1
text-danger-foreground-1 ·
colorStatusSuccessBackground3
bg-success-background-3 ·
colorStatusSuccessBackground1
bg-success-background-1 ·
colorStatusSuccessForeground1
text-success-foreground-1 ·
colorStatusWarningBackground3
bg-warning-background-3 ·
colorStatusWarningBackground1
bg-warning-background-1 ·
colorStatusWarningForeground1
text-warning-foreground-1 ·