Color Token Reference
This page lists every color token the Agentforce iOS SDK exposes for theming, with its default value in both light and dark mode.
There are 275 color tokens in total: 51 generic tokens and 224 component tokens across 50 component groups. Groups and token order match AgentforceColorPalette, so this page reads top-to-bottom the same way the components are laid out.
The palette has two layers:
- Generic tokens (declared by
SharedUI.Colors):surface1,accent1,onSurface1,border1, and so on. These carry explicit light and dark values. - Component tokens (declared by
AgentforceColorPalette): every UI element has its own token — for exampletitleBarBackground,sendButtonEnabledBackground,carouselSurface. Each one falls back directly to a generic token, with no component-to-component chaining, so changing one component never affects another that happens to share the same color.
Each component token resolves its default in one of three ways:
- Alias — falls back to a generic token (shown in the Resolves to column). Its default light and dark values are that generic token’s values.
- Fixed literal — a single color that’s identical in light and dark.
- Per-mode literal — distinct light and dark colors, seeded from the Cosmos brand palette.
Override any token — generic or component — through AgentforceThemeOverrides, or by subclassing AgentforceCosmosLightColors / AgentforceCosmosDarkColors. See Theming for usage.
Only aliases cascade. Overriding a generic token moves every component token that aliases it, but the 16 tokens below hold a literal instead of an alias, so a generic override never reaches them. Set them individually if you need to move them:
richTextLinkColor, markdownLinkColor, citationExternalLinkDefaultColor, attachmentPreviewPlaceholderBackground, pdfViewerPageBackground, mediaViewerBackground, mediaViewerCloseIconTint, mediaViewerCloseIconBackground, auraAvatarIconTint, auraColor1, auraColor2, inputBarPlaceholderColor, launcherPlaceholderColor, agentAvatarLiveBackground, utteranceBackground, voiceRoomCircleButtonSelectedBackground.
Most notably, link colors are in that list — overriding .accent1 does not change the color of links in rich text or markdown.
Each token’s rawValue is identical to its palette property name.
The design-system base palette. Every component token below ultimately resolves to one of these (unless it’s a fixed or per-mode literal). Override these to re-skin the whole UI at once.
A caveat on breadth: 21 of these generic tokens are declared by the shared design system but aren’t currently read by any Agentforce view, so overriding them has no visible effect today — borderInverse2, borderDisabled1, accentContainer2, borderAccent1, borderAccent2, errorContainer2, borderError1, successContainer2, success1, disabled1, disabledContainer2, brandBase50, brandBase70, brandBase90, errorBase50, feedbackWarning1, feedbackWarningContainer1, warning1, information1, informationContainer1, and cloudBlue60. They’re listed for completeness and may become live as more shared components are adopted.
Token (AgentforceColorToken) | Light | Dark |
|---|---|---|
.surface1 | #FFFFFF | #1F1F1F |
.surface2 | #F3F3F3 | #302D2D |
.onSurface1 | #000000 | #FFFFFF |
.onSurface2 | #222222 | #E8E8E8 |
.onSurface3 | #939393 | #E0E0E0 |
.onSurfaceInverse1 | #FFFFFF | #FFFFFF |
.surfaceContainer1 | #F3F3F3 | #2E2E2E |
.surfaceContainer2 | #F5F5F5 | #777777 |
.surfaceContainer3 | #D8D8D8 | #BEBEBE |
.surfaceContainerInverse1 | #032D60 | #032D60 |
.border1 | #DEDFE1 | #6E6D6D |
.border2 | #DADCE0 | #5F6368 |
.borderInverse2 | #032D60 | #032D60 |
.borderDisabled1 | #C9C9C9 | #C9C9C9 |
.accent1 | #0170CB | #008AF7 |
.accent2 | #F2F2F2 | #777777 |
.accent3 | #D6E6FF | #3A3A3A |
.accentContainer1 | #E9F5FF | #0077D9 |
.accentContainer2 | #0250D9 | #0250D9 |
.onAccent1 | #FFFFFF | #FFFFFF |
.borderAccent1 | #066AFE | #066AFE |
.borderAccent2 | #0250D9 | #0250D9 |
.error1 | #BA0517 | #E24857 |
.errorContainer1 | #FCE8E6 | #FEB8AB |
.errorContainer2 | #FDB6C5 | #FDB6C5 |
.onError1 | #EA4335 | #9B000F |
.borderError1 | #BA0517 | #9B000F |
.successContainer1 | #2E844A | #2E844A |
.successContainer2 | #04E1CB | #04E1CB |
.success1 | #056764 | #056764 |
.onSuccess1 | #FFFFFF | #FFFFFF |
.borderSuccess1 | #2E844A | #2E844A |
.disabled1 | #C9C9C9 | #C9C9C9 |
.disabledContainer1 | #EBEBEB | #2D2D30 |
.disabledContainer2 | #E8EAED | #484848 |
.onDisabled1 | #898A8D | #C1C1C1 |
.onDisabled2 | #DADADA | #666666 |
.brandBase50 | #066AFE | #066AFE |
.brandBase70 | #7CB1FE | #7CB1FE |
.brandBase90 | #E3F2FD | #2A3441 |
.errorBase50 | #E3066A | #E3066A |
.feedbackWarning1 | #8C4B02 | #8C4B02 |
.feedbackWarningContainer1 | #F9E3B6 | #F9E3B6 |
.warning1 | #8C4B02 | #8C4B02 |
.warningContainer1 | #F9E3B6 | #F9E3B6 |
.info1 | #0B5CAB | #0B5CAB |
.infoContainer1 | #D8E6FE | #D8E6FE |
.information1 | #0B5CAB | #0B5CAB |
.informationContainer1 | #D8E6FE | #D8E6FE |
.onWarning1 | #8C4B02 | #8C4B02 |
.cloudBlue60 | #0D9DDA | #0D9DDA |
Every UI element has its own token, grouped below by component.
The root chat surface.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.chatBackground | surface1 | #FFFFFF | #1F1F1F |
The conversation header (title, icons, divider).
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.titleBarBackground | surface1 | #FFFFFF | #1F1F1F |
.titleBarTextColor | onSurface1 | #000000 | #FFFFFF |
.titleBarIconTint | onSurface3 | #939393 | #E0E0E0 |
.titleBarDividerColor | border1 | #DEDFE1 | #6E6D6D |
The message composer row.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.inputBarBackground | surface1 | #FFFFFF | #1F1F1F |
.inputBarListeningBackground | accent3 | #D6E6FF | #3A3A3A |
.inputBarFieldBackground | surface1 | #FFFFFF | #1F1F1F |
.inputBarFieldBorderColor | onSurface3 | #939393 | #E0E0E0 |
.inputBarTextColor | onSurface1 | #000000 | #FFFFFF |
.inputBarPlaceholderColor | per-mode literal | #757575 | #D2D2D2 |
.inputBarIconTint | onSurface3 | #939393 | #E0E0E0 |
.inputBarTopDividerColor | border1 | #DEDFE1 | #6E6D6D |
.inputBarCursorColor | accent1 | #0170CB | #008AF7 |
.inputBarAttachmentDividerColor | border1 | #DEDFE1 | #6E6D6D |
The send-message button.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.sendButtonEnabledBackground | accent1 | #0170CB | #008AF7 |
.sendButtonDisabledBackground | onDisabled1 | #898A8D | #C1C1C1 |
.sendButtonIconTint | onAccent1 | #FFFFFF | #FFFFFF |
The voice-entry button in the input bar.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.voiceButtonBackground | onSurface1 | #000000 | #FFFFFF |
.voiceButtonBorder | onSurface1 | #000000 | #FFFFFF |
.voiceButtonAccentColor | accent1 | #0170CB | #008AF7 |
The agent avatar in the chat feed.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.agentAvatarBackground | accent3 | #D6E6FF | #3A3A3A |
.agentAvatarIconTint | accent1 | #0170CB | #008AF7 |
.agentAvatarLiveBackground | per-mode literal | #05628A | #FFFFFF |
.agentAvatarLiveIconTint | accent3 | #D6E6FF | #3A3A3A |
Agent name and message text.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.agentMessageNameColor | onSurface1 | #000000 | #FFFFFF |
.agentMessageTextColor | onSurface1 | #000000 | #FFFFFF |
The end user’s message bubble.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.userMessageBubbleBackground | accentContainer1 | #E9F5FF | #0077D9 |
.userMessageBubbleTextColor | onSurface1 | #000000 | #FFFFFF |
.userMessageStatusColor | onSurface2 | #222222 | #E8E8E8 |
.userMessageErrorColor | error1 | #BA0517 | #E24857 |
Suggested reply and chat-response buttons.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.chatResponseButtonBackground | surface1 | #FFFFFF | #1F1F1F |
.chatResponseButtonTextColor | accent1 | #0170CB | #008AF7 |
.chatResponseButtonDisabledBackground | onDisabled2 | #DADADA | #666666 |
.chatResponseButtonDisabledTextColor | onDisabled1 | #898A8D | #C1C1C1 |
.chatResponseButtonPrimaryBackground | accent1 | #0170CB | #008AF7 |
.chatResponseButtonPrimaryTextColor | onAccent1 | #FFFFFF | #FFFFFF |
Thumbs up / down / copy row under a message.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.messageActionIconActiveTint | accent1 | #0170CB | #008AF7 |
.messageActionIconInactiveTint | onSurface3 | #939393 | #E0E0E0 |
The “why wasn’t this helpful?” feedback sheet.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.feedbackBackground | surface1 | #FFFFFF | #1F1F1F |
.feedbackTextColor | onSurface1 | #000000 | #FFFFFF |
.feedbackBorderColor | border1 | #DEDFE1 | #6E6D6D |
.feedbackButtonBackground | accent1 | #0170CB | #008AF7 |
.feedbackButtonDisabledBackground | disabledContainer1 | #EBEBEB | #2D2D30 |
.feedbackButtonTextColor | onAccent1 | #FFFFFF | #FFFFFF |
.feedbackButtonDisabledTextColor | onDisabled1 | #898A8D | #C1C1C1 |
The four toast status styles.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.toastInfoBackground | infoContainer1 | #D8E6FE | #D8E6FE |
.toastInfoForeground | info1 | #0B5CAB | #0B5CAB |
.toastSuccessBackground | successContainer1 | #2E844A | #2E844A |
.toastSuccessForeground | onSuccess1 | #FFFFFF | #FFFFFF |
.toastWarningBackground | warningContainer1 | #F9E3B6 | #F9E3B6 |
.toastWarningForeground | onWarning1 | #8C4B02 | #8C4B02 |
.toastErrorBackground | errorContainer1 | #FCE8E6 | #FEB8AB |
.toastErrorForeground | onError1 | #EA4335 | #9B000F |
More menu, multi-modal sheet, action list, agent selector.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.modalSheetBackground | surface1 | #FFFFFF | #1F1F1F |
.modalSheetTitleColor | onSurface1 | #000000 | #FFFFFF |
.modalSheetItemTextColor | onSurface2 | #222222 | #E8E8E8 |
.modalSheetItemIconTint | onSurface3 | #939393 | #E0E0E0 |
.modalSheetDividerColor | border1 | #DEDFE1 | #6E6D6D |
.modalSheetDoneButtonBackground | accent1 | #0170CB | #008AF7 |
.modalSheetDoneButtonTextColor | onAccent1 | #FFFFFF | #FFFFFF |
Error shown inline inside an agent response.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.messageErrorBackground | errorContainer1 | #FCE8E6 | #FEB8AB |
.messageErrorTextColor | error1 | #BA0517 | #E24857 |
The floating launcher entry point.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.launcherBackground | surface1 | #FFFFFF | #1F1F1F |
.launcherInputBorderColor | onSurface3 | #939393 | #E0E0E0 |
.launcherIconTint | onSurface3 | #939393 | #E0E0E0 |
.launcherTextColor | onSurface1 | #000000 | #FFFFFF |
.launcherUnreadDotColor | accent1 | #0170CB | #008AF7 |
.launcherFlashBackground | accent3 | #D6E6FF | #3A3A3A |
.launcherIconTileTint | accent1 | #0170CB | #008AF7 |
.launcherPlaceholderColor | per-mode literal | #757575 | #D2D2D2 |
Suggested-utterance chips and their list.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.utteranceBackground | per-mode literal | #ECF5FE | #3A3A3A |
.utteranceTextColor | accent1 | #0170CB | #008AF7 |
.utteranceIconTint | accent1 | #0170CB | #008AF7 |
.utteranceListLabelColor | onSurface2 | #222222 | #E8E8E8 |
.utteranceListBackground | surface1 | #FFFFFF | #1F1F1F |
The horizontal card carousel.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.carouselSurface | surface1 | #FFFFFF | #1F1F1F |
.carouselItemBorderColor | accent1 | #0170CB | #008AF7 |
.carouselTitleColor | onSurface1 | #000000 | #FFFFFF |
.carouselDotSelectedColor | accent1 | #0170CB | #008AF7 |
.carouselDotUnselectedColor | onSurface3 | #939393 | #E0E0E0 |
.carouselFadeOverlayColor | surface1 | #FFFFFF | #1F1F1F |
.carouselPlaceholderTint | onSurface3 | #939393 | #E0E0E0 |
Citation chips, list, and external link.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.citationBackground | surfaceContainer1 | #F3F3F3 | #2E2E2E |
.citationTextColor | onSurface1 | #000000 | #FFFFFF |
.citationIconTint | onSurface3 | #939393 | #E0E0E0 |
.citationListBackground | surface1 | #FFFFFF | #1F1F1F |
.citationDividerColor | border1 | #DEDFE1 | #6E6D6D |
.citationExternalLinkDefaultColor | fixed literal | #4892E7 | #4892E7 |
Rich link preview card.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.richLinkBackground | surfaceContainer2 | #F5F5F5 | #777777 |
.richLinkImageBackground | surfaceContainer2 | #F5F5F5 | #777777 |
.richLinkPlaceholderTint | onSurface3 | #939393 | #E0E0E0 |
.richLinkTitleColor | onSurface1 | #000000 | #FFFFFF |
.richLinkUrlColor | onSurface2 | #222222 | #E8E8E8 |
Inline web link chip.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.webLinkBackground | surfaceContainer2 | #F5F5F5 | #777777 |
.webLinkTextColor | onSurface1 | #000000 | #FFFFFF |
.webLinkFaviconTint | onSurface3 | #939393 | #E0E0E0 |
Record info card.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.recordInfoBackground | surfaceContainer1 | #F3F3F3 | #2E2E2E |
.recordInfoTextColor | onSurface1 | #000000 | #FFFFFF |
.recordInfoLabelColor | onSurface1 | #000000 | #FFFFFF |
.recordInfoMoreIconTint | onSurface3 | #939393 | #E0E0E0 |
.recordInfoDividerColor | border1 | #DEDFE1 | #6E6D6D |
The full-screen voice conversation room, including its circle buttons (mute, stop, closed captions).
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.voiceRoomBackground | surface1 | #FFFFFF | #1F1F1F |
.voiceRoomTextColor | onSurface1 | #000000 | #FFFFFF |
.voiceRoomErrorPulseColor | onSurface3 | #939393 | #E0E0E0 |
.voiceRoomCircleButtonBorderColor | border1 | #DEDFE1 | #6E6D6D |
.voiceRoomCircleButtonSelectedBackground | per-mode literal | #ECF5FE | #3A3A3A |
Record picker list.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.recordSelectorTextColor | onSurface1 | #000000 | #FFFFFF |
.recordSelectorDisabledTextColor | onDisabled1 | #898A8D | #C1C1C1 |
.recordSelectorRadioSelectedColor | accent1 | #0170CB | #008AF7 |
.recordSelectorRadioUnselectedColor | surfaceContainer3 | #D8D8D8 | #BEBEBE |
.recordSelectorDividerColor | border1 | #DEDFE1 | #6E6D6D |
Expandable JSON object viewer.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.jsonViewerBackground | surfaceContainer1 | #F3F3F3 | #2E2E2E |
.jsonViewerTextColor | onSurface1 | #000000 | #FFFFFF |
.jsonViewerExpandTextColor | accent1 | #0170CB | #008AF7 |
.jsonViewerDividerColor | border1 | #DEDFE1 | #6E6D6D |
.jsonViewerFadeOverlayColor | surfaceContainer1 | #F3F3F3 | #2E2E2E |
Email component surface.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.emailBackground | surfaceContainer1 | #F3F3F3 | #2E2E2E |
Shimmer placeholder while content loads.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.stencilShimmerColor | surfaceContainer3 | #D8D8D8 | #BEBEBE |
Record-actions sheet.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.actionSheetBackground | surface1 | #FFFFFF | #1F1F1F |
.actionSheetIconTint | onSurface3 | #939393 | #E0E0E0 |
.actionSheetTextColor | onSurface1 | #000000 | #FFFFFF |
.actionSheetExternalIconTint | onSurface3 | #939393 | #E0E0E0 |
.actionSheetDividerColor | border1 | #DEDFE1 | #6E6D6D |
Toxicity warning block.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.toxicityTextColor | onSurface1 | #000000 | #FFFFFF |
.toxicityIconTint | onSurface3 | #939393 | #E0E0E0 |
.toxicityDividerColor | border1 | #DEDFE1 | #6E6D6D |
Shared by pre-chat field, secure-form field, text input, and pickers.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.formFieldLabelColor | onSurface2 | #222222 | #E8E8E8 |
.formFieldErrorColor | error1 | #BA0517 | #E24857 |
.formFieldRequiredColor | error1 | #BA0517 | #E24857 |
.formFieldBackground | surface1 | #FFFFFF | #1F1F1F |
.formFieldDisabledBackground | disabledContainer1 | #EBEBEB | #2D2D30 |
.formFieldBorderColor | onSurface3 | #939393 | #E0E0E0 |
.formFieldErrorBorderColor | error1 | #BA0517 | #E24857 |
.formFieldTextColor | onSurface1 | #000000 | #FFFFFF |
.formFieldDisabledTextColor | onDisabled1 | #898A8D | #C1C1C1 |
.formFieldPlaceholderColor | onSurface3 | #939393 | #E0E0E0 |
.formFieldArrowTint | onSurface3 | #939393 | #E0E0E0 |
.formFieldCursorColor | accent1 | #0170CB | #008AF7 |
.formFieldClearIconTint | onSurface3 | #939393 | #E0E0E0 |
Checkbox and its label.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.checkBoxBackground | surface1 | #FFFFFF | #1F1F1F |
.checkBoxDisabledBackground | disabledContainer1 | #EBEBEB | #2D2D30 |
.checkBoxCheckedColor | accent1 | #0170CB | #008AF7 |
.checkBoxUncheckedColor | onSurface3 | #939393 | #E0E0E0 |
.checkBoxCheckmarkColor | onAccent1 | #FFFFFF | #FFFFFF |
.checkBoxLabelColor | onSurface1 | #000000 | #FFFFFF |
.checkBoxDisabledLabelColor | onDisabled1 | #898A8D | #C1C1C1 |
.checkBoxDisabledFillColor | onDisabled1 | #898A8D | #C1C1C1 |
Pre-chat form page.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.preChatFormPageBackground | accent3 | #D6E6FF | #3A3A3A |
.preChatFormInstructionColor | onSurface1 | #000000 | #FFFFFF |
.preChatFormAvatarBackground | accent1 | #0170CB | #008AF7 |
.preChatFormAvatarIconTint | surface1 | #FFFFFF | #1F1F1F |
.preChatFormSubmitBackground | accent1 | #0170CB | #008AF7 |
.preChatFormSubmitTextColor | surface1 | #FFFFFF | #1F1F1F |
.preChatFormSubmitDisabledBackground | onDisabled2 | #DADADA | #666666 |
.preChatFormSubmitDisabledTextColor | onDisabled1 | #898A8D | #C1C1C1 |
.preChatFormRequiredColor | error1 | #BA0517 | #E24857 |
Secure form page.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.secureFormPageBackground | accent3 | #D6E6FF | #3A3A3A |
.secureFormTitleColor | onSurface1 | #000000 | #FFFFFF |
.secureFormSubmitBackground | accent1 | #0170CB | #008AF7 |
.secureFormSubmitTextColor | surface1 | #FFFFFF | #1F1F1F |
.secureFormSubmitDisabledBackground | onDisabled2 | #DADADA | #666666 |
.secureFormSubmitDisabledTextColor | onDisabled1 | #898A8D | #C1C1C1 |
.secureFormReadOnlyRequiredColor | onSurface3 | #939393 | #E0E0E0 |
.secureFormSpinnerTint | onSurface3 | #939393 | #E0E0E0 |
.secureFormSuccessTitleColor | onSurface1 | #000000 | #FFFFFF |
Secure form link chip.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.secureFormLinkBackground | surfaceContainer2 | #F5F5F5 | #777777 |
.secureFormLinkTitleColor | onSurface1 | #000000 | #FFFFFF |
.secureFormLinkIconTint | onSurface3 | #939393 | #E0E0E0 |
Attachment remove button, chip preview, border.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.attachmentRemoveButtonBackground | onSurface3 | #939393 | #E0E0E0 |
.attachmentRemoveButtonTint | accent2 | #F2F2F2 | #777777 |
.attachmentChipPreviewBackground | surface2 | #F3F3F3 | #302D2D |
.attachmentBorderColor | surfaceContainer3 | #D8D8D8 | #BEBEBE |
Placeholder shown before a preview loads.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.attachmentPreviewPlaceholderBackground | fixed literal | #E5E5E5 | #E5E5E5 |
.attachmentChipMimeTypeColor | onSurface1 | #000000 | #FFFFFF |
Audio attachment player.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.audioAttachmentBackground | surfaceContainer2 | #F5F5F5 | #777777 |
.audioAttachmentTitleColor | onSurface1 | #000000 | #FFFFFF |
.audioAttachmentDurationColor | onSurface2 | #222222 | #E8E8E8 |
.audioAttachmentErrorColor | error1 | #BA0517 | #E24857 |
.audioAttachmentProgressColor | accent1 | #0170CB | #008AF7 |
.audioAttachmentButtonBackground | surfaceContainer3 | #D8D8D8 | #BEBEBE |
Video attachment preview.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.videoAttachmentPlaceholderBackground | surfaceContainer2 | #F5F5F5 | #777777 |
.videoAttachmentPlayButtonBackground | onAccent1 | #FFFFFF | #FFFFFF |
.videoAttachmentPlayIconTint | onSurface3 | #939393 | #E0E0E0 |
PDF attachment chip.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.attachmentBackground | surfaceContainer2 | #F5F5F5 | #777777 |
.attachmentTitleColor | onSurface1 | #000000 | #FFFFFF |
Full-screen PDF viewer page.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.pdfViewerPageBackground | fixed literal | #FFFFFF | #FFFFFF |
Image preview and video player chrome.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.mediaViewerBackground | fixed literal | #000000 | #000000 |
.mediaViewerCloseIconTint | fixed literal | #FFFFFF | #FFFFFF |
.mediaViewerCloseIconBackground | fixed literal | #000000 at 45% alpha | #000000 at 45% alpha |
.mediaViewerControlBackground | surfaceContainer3 | #D8D8D8 | #BEBEBE |
.mediaViewerControlIconTint | onSurface1 | #000000 | #FFFFFF |
The animated brand aura / avatar glow.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.auraColor1 | fixed literal | #1589EE | #1589EE |
.auraColor2 | fixed literal | #4892E7 | #4892E7 |
.auraAvatarBackground | surface1 | #FFFFFF | #1F1F1F |
.auraAvatarIconTint | per-mode literal | #0176D3 | #008AF7 |
Markdown-rendered agent text.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.markdownTextColor | onSurface1 | #000000 | #FFFFFF |
.markdownLinkColor | per-mode literal | #0170CB | #008AF7 |
.markdownBlockquoteColor | border1 | #DEDFE1 | #6E6D6D |
.markdownThematicBreakColor | border1 | #DEDFE1 | #6E6D6D |
HTML-rendered rich text.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.richTextBackground | surfaceContainer1 | #F3F3F3 | #2E2E2E |
.richTextColor | onSurface1 | #000000 | #FFFFFF |
.richTextLinkColor | per-mode literal | #0170CB | #008AF7 |
Streaming card fade and action text.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.streamingCardFadeColor | surface1 | #FFFFFF | #1F1F1F |
.streamingCardActionTextColor | accent1 | #0170CB | #008AF7 |
Status line under the chat.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.chatStatusLineColor | border1 | #DEDFE1 | #6E6D6D |
.chatStatusTextColor | onSurface1 | #000000 | #FFFFFF |
Typing / progress indicator.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.progressIndicatorTextColor | onSurface1 | #000000 | #FFFFFF |
.progressIndicatorDotColor | onSurface3 | #939393 | #E0E0E0 |
.progressIndicatorSparkleColor | accent1 | #0170CB | #008AF7 |
Loading, error, and onboarding full-screen states.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.fullScreenTitleColor | onSurface1 | #000000 | #FFFFFF |
.spinnerColor | accent1 | #0170CB | #008AF7 |
.fullScreenBackground | surface1 | #FFFFFF | #1F1F1F |
.fullScreenBodyColor | onSurface1 | #000000 | #FFFFFF |
Refresh button on the error screen.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.refreshButtonBackground | surface1 | #FFFFFF | #1F1F1F |
.refreshButtonBorderColor | border1 | #DEDFE1 | #6E6D6D |
.refreshButtonTextColor | accent1 | #0170CB | #008AF7 |
.refreshButtonIconTint | accent1 | #0170CB | #008AF7 |
Confirm button on the onboarding screen.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.onboardingButtonBackground | accent1 | #0170CB | #008AF7 |
.onboardingButtonTextColor | onAccent1 | #FFFFFF | #FFFFFF |
.onboardingDividerColor | border1 | #DEDFE1 | #6E6D6D |
Generic call-to-action button.
Token (AgentforceColorToken) | Resolves to | Light | Dark |
|---|---|---|---|
.ctaButtonBackground | accent1 | #0170CB | #008AF7 |
.ctaButtonTextColor | onAccent1 | #FFFFFF | #FFFFFF |
.ctaButtonBorderColor | surfaceContainer3 | #D8D8D8 | #BEBEBE |
- Values are
#RRGGBBand fully opaque unless noted.mediaViewerCloseIconBackgroundis the one token that carries alpha in its default. onAccent1is white in both modes by design (text and icons on the accent fill).onSurfaceInverse1,surfaceContainerInverse1,borderInverse2,accentContainer2,borderAccent1,borderAccent2,disabled1,borderDisabled1,brandBase50,brandBase70,errorBase50,success1,successContainer1,successContainer2,borderSuccess1,onSuccess1,errorContainer2,feedbackWarning1,feedbackWarningContainer1,warning1,warningContainer1,onWarning1,info1,infoContainer1,information1,informationContainer1, andcloudBlue60are mode-independent in the Cosmos defaults — they carry the same value in light and dark.
The two SDKs share a model, not an API. The concepts line up almost exactly — same three-way theming choice, same slot vocabularies — but the host-facing code differs enough that theming can’t be written once and translated mechanically, and the out-of-the-box colors aren’t identical.
What matches: the AgentforceTheming three-way choice (.default / .overrides / .customManager) and its setTheming entry point; 23 icon slots and 45 display-name slots with identical names on both platforms; the same 23 typography styles at the same sizes; and all 224 component color tokens, name for name, with the same fallback wiring.
What differs:
| Area | iOS | Android |
|---|---|---|
| Color token count | 275 (51 generic + 224 component) | 271 (47 generic + 224 component) |
| Generic tokens not on the other platform | borderInverse2, brandBase70, feedbackWarning1, feedbackWarningContainer1 | none |
| Reusable palettes | Subclass AgentforceCosmosLightColors / AgentforceCosmosDarkColors | withOverrides(...) on a default palette — no iOS equivalent |
| Default manager | open class you may subclass | Factory functions (createDefaultAgentforceThemeManager, createCustomAgentforceThemeManager) |
| Reading the theme | Hold the manager instance you passed in (@Observable) | Compose CompositionLocal (LocalAgentforceTheme) |
| Theme mode | Set on the theme manager | Carried in the overrides bag |
Of the 47 generic tokens both platforms share, 23 ship different default values, because iOS resolves the semantic families through Salesforce Cosmos ramps while Android uses Material-style ramps — and iOS keeps most of them mode-independent where Android ships a distinct dark value. If cross-platform consistency matters, set the status and semantic tokens (success, warning, info, inverse-surface) explicitly on both platforms rather than relying on defaults.