Color

Components use roles only. Each role has a light and a dark value, so a screen themes by switching modes, not colors. The palette below feeds the roles and is never used directly.

Background

What things sit on.

RoleLightDarkUse
bg
--v-bg
Screen background.
bg-raised
--v-bg-raised
Anything that sits on bg: cards, sheets, boxed rows, white icon buttons, the selected segment.
bg-glass
--v-bg-glass
Translucent bg-raised for bars and surfaces over content (bottom nav, floating headers). Pair with blur-backdrop and shadow-raised (Figma: the glass-floating effect style).

Fill

Controls and chips inside content.

RoleLightDarkUse
fill
--v-fill
Fill of controls inside content: fields, chips, tonal buttons, tracks, icon circles, calendar days.
fill-pressed
--v-fill-pressed
Hover and pressed state of fill. Also the off track of a toggle.
fill-strong
--v-fill-strong
Solid neutral fill: neutral avatars, neutral progress, the toast timer.

Ink

Text and icons.

RoleLightDarkUse
ink
--v-ink
Headings, primary text and icons.
ink-muted
--v-ink-muted
Body copy.
ink-subtle
--v-ink-subtle
Captions, hints, placeholders, inactive tabs.
ink-disabled
--v-ink-disabled
Disabled text and icons.

Line

Borders, dividers, focus.

RoleLightDarkUse
line
--v-line
Hairlines, dividers, quiet borders.
line-strong
--v-line-strong
Dashed outlines, control borders (checkbox, radio), the sheet grip.
focus-ring
--v-focus-ring
Keyboard focus outline and focused field border.

Inverse

High-contrast surfaces. Flip in dark mode.

RoleLightDarkUse
inverse
--v-inverse
High-contrast fill: inverse cards, toasts, the strong segment. Flips in dark mode.
inverse-raised
--v-inverse-raised
Secondary buttons, inverse banners, controls on an inverse surface.
on-inverse
--v-on-inverse
Text and icons on inverse.
on-inverse-muted
--v-on-inverse-muted
Secondary text on inverse.
inverse-line
--v-inverse-line
Borders on inverse.

Accent

Brand green.

RoleLightDarkUse
accent
--v-accent
Brand green. The one main action, the user's own bubbles, selection outlines.
accent-strong
--v-accent-strong
Pressed green, selected radio.
accent-tint
--v-accent-tint
Soft green background: pending badges, banners, tinted cards and panels.
accent-tint-strong
--v-accent-tint-strong
Stronger green tint: selected chips, disabled primary button.
accent-border
--v-accent-border
Green borders and decorative shapes.
accent-text
--v-accent-text
Green text on bg or bg-raised. The brand green itself fails contrast as text.
on-accent
--v-on-accent
Text and icons on accent. Dark in both themes.
on-accent-muted
--v-on-accent-muted
Secondary text on accent.
on-accent-tint
--v-on-accent-tint
Text and icons on accent-tint and accent-tint-strong.
accent-on-inverse
--v-accent-on-inverse
Green text on inverse surfaces (overlines, text buttons in toasts).
accent-overlay
--v-accent-overlay
Translucent white on accent fills: tonal button on a solid card.
accent-on-code
--v-accent-on-code
Highlighted tokens on code (action names, keys).
accent-gradient-end
--v-accent-gradient-end
Outer stop of accent-gradient. Gradients only.

Accent 2

Brand purple.

RoleLightDarkUse
accent-2
--v-accent-2
Brand purple. The bot, selection, progress, checked controls.
accent-2-strong
--v-accent-2-strong
Deep purple fill: strong badges, deep avatars, typing dots.
accent-2-tint
--v-accent-2-tint
Soft purple background: bot bubbles, selected rows and tiles, maps.
accent-2-tint-strong
--v-accent-2-tint-strong
Stronger purple tint: icon circles, image placeholders.
accent-2-border
--v-accent-2-border
Purple borders and decorative shapes.
accent-2-text
--v-accent-2-text
Purple text on bg or bg-raised.
on-accent-2
--v-on-accent-2
Text and icons on accent-2 and accent-2-strong. White in both themes.
on-accent-2-tint
--v-on-accent-2-tint
Text and icons on accent-2-tint and accent-2-tint-strong.
accent-2-on-inverse
--v-accent-2-on-inverse
Purple text and icons on inverse surfaces (toast icons).
accent-2-gradient-end
--v-accent-2-gradient-end
Outer stop of accent-2-gradient. Gradients only.

Status

Success, warning, danger. Never brand colors.

RoleLightDarkUse
success
--v-success
Success fill: dots, icons, solid badges.
success-tint
--v-success-tint
Soft success background: badges, banners.
on-success-tint
--v-on-success-tint
Text and icons on success-tint.
success-text
--v-success-text
Success text on bg or bg-raised (confirmations, helper text).
warning
--v-warning
Warning fill: dots, icons, solid badges.
warning-tint
--v-warning-tint
Soft warning background: badges, banners.
on-warning-tint
--v-on-warning-tint
Text and icons on warning-tint.
warning-text
--v-warning-text
Warning text on bg or bg-raised (helper text).
danger
--v-danger
Danger fill: dots, icons, solid badges.
danger-tint
--v-danger-tint
Soft danger background: badges, banners.
on-danger-tint
--v-on-danger-tint
Text and icons on danger-tint.
danger-text
--v-danger-text
Danger text on bg or bg-raised (helper text, destructive text buttons).

Overlay and fixed

Over photos and fills; the same in both themes unless noted.

RoleLightDarkUse
on-trust
--v-on-trust
Text on the trust gradient.
knob
--v-knob
Toggle and progress knobs. White in both themes.
scrim
--v-scrim
Overlay behind sheets and modals.
overlay-on-image
--v-overlay-on-image
Translucent fill for controls over photos. Pair with a backdrop blur.
overlay-on-image-pressed
--v-overlay-on-image-pressed
Hover and pressed state of overlay-on-image.
on-image
--v-on-image
Text and icons over photos.
code
--v-code
Code blocks and the actions log. The same in both themes.
on-code
--v-on-code
Text on code.
on-code-muted
--v-on-code-muted
Secondary text on code.
code-line
--v-code-line
Dividers and inset rows on code.
trust-gradient-start
--v-trust-gradient-start
Start of trust-gradient. Gradients only.
trust-gradient-end
--v-trust-gradient-end
End of trust-gradient. Gradients only.
shadow-color-raised
--v-shadow-color-raised
Shadow color for raised surfaces. None in dark mode: the lighter bg-raised carries the layering.
shadow-color-floating
--v-shadow-color-floating
Shadow color for floating surfaces. None in dark mode.
highlight
--v-highlight
Inner white highlight on light surfaces. None in dark mode.
highlight-soft
--v-highlight-soft
Softer inner highlight. None in dark mode.
glow-accent-2
--v-glow-accent-2
Purple glow: the bot thinking or remembering.

Gradients

Each stays within one hue. Use the token, never a hand-written gradient.

accent-gradient--v-accent-gradientGreen fill: primary button, green icon button, solid cards.
accent-2-gradient--v-accent-2-gradientPurple fill: purple avatars and solid purple surfaces.
trust-gradient--v-trust-gradientTrust and verified badges.

Palette

Named by hue. Roles point here; components never do (npm run check fails if they do).

50100200300400500600700800900950 neutralgreenpurpleemeraldamberred

Base: --v-white #ffffff, outside the ramps.

All color tokens

CSSLightDarkNotes
--v-white#ffffff
--v-neutral-50#fcfcfc
--v-neutral-100#f1f1f2
--v-neutral-200#e6e6e9
--v-neutral-300#d6d6db
--v-neutral-400#a6a6ad
--v-neutral-500#7e7e85
--v-neutral-600#5a5a60
--v-neutral-700#47474b
--v-neutral-800#2a2a2c
--v-neutral-900#1a1a1b
--v-neutral-950#0a0a0a
--v-green-50#f8fef3
--v-green-100#f1fde7
--v-green-200#dffac8
--v-green-300#c2f39a
--v-green-400#92ea52
--v-green-500#66e515
--v-green-600#4fbf0a
--v-green-700#347d05
--v-green-800#275f05
--v-green-900#1a4004
--v-green-950#102602
--v-purple-50#fbf8ff
--v-purple-100#f6f0ff
--v-purple-200#ebdcfe
--v-purple-300#d6bbfd
--v-purple-400#bd92fd
--v-purple-500#a467fc
--v-purple-600#8a47ee
--v-purple-700#6d2fcc
--v-purple-800#52229b
--v-purple-900#351665
--v-purple-950#200d3d
--v-emerald-50#f3fcf7
--v-emerald-100#e7f8ef
--v-emerald-200#c6efd9
--v-emerald-300#8fdfb5
--v-emerald-400#4cc98a
--v-emerald-500#12b76a
--v-emerald-600#079455
--v-emerald-700#067647
--v-emerald-800#085d3a
--v-emerald-900#074d31
--v-emerald-950#042e1d
--v-amber-50#fffbf2
--v-amber-100#fff6e5
--v-amber-200#feecc4
--v-amber-300#fdd68a
--v-amber-400#fbb847
--v-amber-500#f79009
--v-amber-600#dc6803
--v-amber-700#b54708
--v-amber-800#93370d
--v-amber-900#7a2e0e
--v-amber-950#491c08
--v-red-50#fff8f8
--v-red-100#fef1f0
--v-red-200#fddcd9
--v-red-300#fbb5ae
--v-red-400#f7857a
--v-red-500#f04438
--v-red-600#d92d20
--v-red-700#b42318
--v-red-800#912018
--v-red-900#7a271a
--v-red-950#491710
--v-bgvar(--v-neutral-50)var(--v-neutral-950)Screen background.
--v-bg-raisedvar(--v-white)var(--v-neutral-900)Anything that sits on bg: cards, sheets, boxed rows, white icon buttons, the selected segment.
--v-bg-glassrgba(255, 255, 255, .8)rgba(26, 26, 27, .8)Translucent bg-raised for bars and surfaces over content (bottom nav, floating headers). Pair with blur-backdrop and shadow-raised (Figma: the glass-floating effect style).
--v-fillvar(--v-neutral-100)var(--v-neutral-800)Fill of controls inside content: fields, chips, tonal buttons, tracks, icon circles, calendar days.
--v-fill-pressedvar(--v-neutral-200)var(--v-neutral-700)Hover and pressed state of fill. Also the off track of a toggle.
--v-fill-strongvar(--v-neutral-600)var(--v-neutral-500)Solid neutral fill: neutral avatars, neutral progress, the toast timer.
--v-inkvar(--v-neutral-950)var(--v-neutral-50)Headings, primary text and icons.
--v-ink-mutedrgba(0, 0, 0, .6)rgba(255, 255, 255, .6)Body copy.
--v-ink-subtlergba(0, 0, 0, .4)rgba(255, 255, 255, .4)Captions, hints, placeholders, inactive tabs.
--v-ink-disabledrgba(0, 0, 0, .24)rgba(255, 255, 255, .26)Disabled text and icons.
--v-linevar(--v-neutral-100)var(--v-neutral-800)Hairlines, dividers, quiet borders.
--v-line-strongvar(--v-neutral-200)var(--v-neutral-700)Dashed outlines, control borders (checkbox, radio), the sheet grip.
--v-focus-ringvar(--v-purple-400)var(--v-purple-400)Keyboard focus outline and focused field border.
--v-inversevar(--v-neutral-950)var(--v-neutral-50)High-contrast fill: inverse cards, toasts, the strong segment. Flips in dark mode.
--v-inverse-raisedvar(--v-neutral-700)var(--v-neutral-200)Secondary buttons, inverse banners, controls on an inverse surface.
--v-on-inversevar(--v-white)var(--v-neutral-950)Text and icons on inverse.
--v-on-inverse-mutedrgba(255, 255, 255, .6)rgba(0, 0, 0, .55)Secondary text on inverse.
--v-inverse-linevar(--v-neutral-600)var(--v-neutral-300)Borders on inverse.
--v-accentvar(--v-green-500)var(--v-green-500)Brand green. The one main action, the user's own bubbles, selection outlines.
--v-accent-strongvar(--v-green-600)var(--v-green-600)Pressed green, selected radio.
--v-accent-tintvar(--v-green-100)var(--v-green-900)Soft green background: pending badges, banners, tinted cards and panels.
--v-accent-tint-strongvar(--v-green-200)var(--v-green-800)Stronger green tint: selected chips, disabled primary button.
--v-accent-bordervar(--v-green-300)var(--v-green-700)Green borders and decorative shapes.
--v-accent-textvar(--v-green-700)var(--v-green-400)Green text on bg or bg-raised. The brand green itself fails contrast as text.
--v-on-accentvar(--v-neutral-950)var(--v-neutral-950)Text and icons on accent. Dark in both themes.
--v-on-accent-mutedrgba(0, 0, 0, .6)rgba(0, 0, 0, .6)Secondary text on accent.
--v-on-accent-tintvar(--v-green-900)var(--v-green-200)Text and icons on accent-tint and accent-tint-strong.
--v-accent-on-inversevar(--v-green-300)var(--v-green-700)Green text on inverse surfaces (overlines, text buttons in toasts).
--v-accent-overlayrgba(255, 255, 255, .55)rgba(255, 255, 255, .55)Translucent white on accent fills: tonal button on a solid card.
--v-accent-2var(--v-purple-500)var(--v-purple-500)Brand purple. The bot, selection, progress, checked controls.
--v-accent-2-strongvar(--v-purple-700)var(--v-purple-600)Deep purple fill: strong badges, deep avatars, typing dots.
--v-accent-2-tintvar(--v-purple-100)var(--v-purple-900)Soft purple background: bot bubbles, selected rows and tiles, maps.
--v-accent-2-tint-strongvar(--v-purple-200)var(--v-purple-800)Stronger purple tint: icon circles, image placeholders.
--v-accent-2-bordervar(--v-purple-300)var(--v-purple-700)Purple borders and decorative shapes.
--v-accent-2-textvar(--v-purple-800)var(--v-purple-300)Purple text on bg or bg-raised.
--v-on-accent-2var(--v-white)var(--v-white)Text and icons on accent-2 and accent-2-strong. White in both themes.
--v-on-accent-2-tintvar(--v-purple-900)var(--v-purple-200)Text and icons on accent-2-tint and accent-2-tint-strong.
--v-accent-2-on-inversevar(--v-purple-300)var(--v-purple-700)Purple text and icons on inverse surfaces (toast icons).
--v-successvar(--v-emerald-500)var(--v-emerald-500)Success fill: dots, icons, solid badges.
--v-success-tintvar(--v-emerald-100)var(--v-emerald-900)Soft success background: badges, banners.
--v-on-success-tintvar(--v-emerald-800)var(--v-emerald-200)Text and icons on success-tint.
--v-success-textvar(--v-emerald-700)var(--v-emerald-400)Success text on bg or bg-raised (confirmations, helper text).
--v-warningvar(--v-amber-500)var(--v-amber-500)Warning fill: dots, icons, solid badges.
--v-warning-tintvar(--v-amber-100)var(--v-amber-900)Soft warning background: badges, banners.
--v-on-warning-tintvar(--v-amber-800)var(--v-amber-200)Text and icons on warning-tint.
--v-warning-textvar(--v-amber-700)var(--v-amber-400)Warning text on bg or bg-raised (helper text).
--v-dangervar(--v-red-500)var(--v-red-500)Danger fill: dots, icons, solid badges.
--v-danger-tintvar(--v-red-100)var(--v-red-900)Soft danger background: badges, banners.
--v-on-danger-tintvar(--v-red-800)var(--v-red-200)Text and icons on danger-tint.
--v-danger-textvar(--v-red-700)var(--v-red-400)Danger text on bg or bg-raised (helper text, destructive text buttons).
--v-on-trustvar(--v-white)var(--v-white)Text on the trust gradient.
--v-knobvar(--v-white)var(--v-white)Toggle and progress knobs. White in both themes.
--v-scrimrgba(21, 21, 22, .32)rgba(0, 0, 0, .6)Overlay behind sheets and modals.
--v-overlay-on-imagergba(255, 255, 255, .28)rgba(255, 255, 255, .28)Translucent fill for controls over photos. Pair with a backdrop blur.
--v-overlay-on-image-pressedrgba(255, 255, 255, .4)rgba(255, 255, 255, .4)Hover and pressed state of overlay-on-image.
--v-on-imagergba(255, 255, 255, .95)rgba(255, 255, 255, .95)Text and icons over photos.
--v-codevar(--v-neutral-950)var(--v-neutral-950)Code blocks and the actions log. The same in both themes.
--v-on-codevar(--v-neutral-50)var(--v-neutral-50)Text on code.
--v-on-code-mutedrgba(255, 255, 255, .6)rgba(255, 255, 255, .6)Secondary text on code.
--v-code-linergba(255, 255, 255, .1)rgba(255, 255, 255, .1)Dividers and inset rows on code.
--v-accent-on-codevar(--v-green-300)var(--v-green-300)Highlighted tokens on code (action names, keys).
--v-accent-gradient-end#97e565#97e565Outer stop of accent-gradient. Gradients only.
--v-accent-2-gradient-endrgba(164, 103, 252, .8)rgba(164, 103, 252, .8)Outer stop of accent-2-gradient. Gradients only.
--v-trust-gradient-start#5ca3ff#5ca3ffStart of trust-gradient. Gradients only.
--v-trust-gradient-end#8ba6ff#8ba6ffEnd of trust-gradient. Gradients only.
--v-shadow-color-raisedrgba(10, 10, 10, .04)rgba(0, 0, 0, 0)Shadow color for raised surfaces. None in dark mode: the lighter bg-raised carries the layering.
--v-shadow-color-floatingrgba(10, 10, 10, .05)rgba(0, 0, 0, 0)Shadow color for floating surfaces. None in dark mode.
--v-highlightrgba(255, 255, 255, .8)rgba(0, 0, 0, 0)Inner white highlight on light surfaces. None in dark mode.
--v-highlight-softrgba(255, 255, 255, .4)rgba(0, 0, 0, 0)Softer inner highlight. None in dark mode.
--v-glow-accent-2rgba(164, 103, 252, .56)rgba(164, 103, 252, .56)Purple glow: the bot thinking or remembering.