From 7046fef3c4d71d8e17f090b6f0af4a40eb5f6190 Mon Sep 17 00:00:00 2001
From: Denis Berezin <denis.berezin@metabase.com>
Date: Mon, 10 Jun 2024 16:34:51 +0300
Subject: [PATCH] feat(sdk): SDK theming part 5 - success, summarize, warning,
 white, text-white, bg-white (#43676)

* Migrate success

* Migrate summarize

* Migrate warning

* Migrate white

* Add colors to storybook

* Fix CI

* Fix CI

* Codereview fixes

* Convert warning color
---
 .storybook/preview-head.html                  | 17 ++++++++----
 .../components/private/SdkContentWrapper.tsx  |  4 +++
 .../lib/theme/default-component-theme.ts      |  4 +--
 .../components/InvalidateNowButton.tsx        |  2 +-
 .../StrategyFormLauncher.styled.tsx           |  2 +-
 .../SettingsCloudStoreLink.styled.tsx         |  4 +--
 .../BillingInfo/BillingInfo.styled.tsx        |  3 +--
 .../ImageUpload/ImageUpload.styled.tsx        |  2 +-
 .../AccountHeader/AccountHeader.styled.tsx    |  2 +-
 .../LoginHistory/LoginHistory.styled.tsx      |  3 +--
 .../NotificationCard.styled.tsx               |  2 +-
 .../ActionViz/ActionForm.styled.tsx           |  3 +--
 .../ActionCreator/ActionCreator.styled.tsx    |  3 +--
 .../ActionCreatorHeader.styled.tsx            |  2 +-
 .../FormCreator/FormCreator.styled.tsx        |  8 +++---
 .../ActionPicker/ActionOptionItem.styled.tsx  |  4 +--
 .../DimensionList/DimensionList.styled.tsx    |  2 +-
 .../GuiQueryEditor/GuiQueryEditor.module.css  |  2 +-
 .../components/ObjectActionSelect.styled.tsx  |  2 +-
 .../CurrentPicker/CurrentPicker.styled.tsx    |  4 +--
 .../DatePicker/RelativeDatePicker.styled.tsx  |  2 +-
 .../filters/pickers/SelectPicker.styled.tsx   |  4 +--
 .../revisions/RevisionDiff.styled.tsx         |  3 +--
 .../MetadataBackButton.styled.tsx             |  4 +--
 .../MetadataTableColumn.styled.tsx            |  3 +--
 .../components/GroupsListing.styled.tsx       |  6 ++---
 .../MembershipSelect.styled.tsx               |  6 ++---
 .../people/components/NudgeToPro.styled.tsx   |  3 +--
 .../StrategyEditorForDatabases.styled.tsx     |  4 +--
 .../performance/components/StrategyForm.tsx   |  3 +--
 .../FilterableTree/FilterableTree.styled.tsx  |  3 ++-
 .../PermissionHelpDescription.styled.tsx      |  2 +-
 .../PermissionsSelect.styled.tsx              |  2 +-
 .../PermissionsSelectOption.styled.tsx        |  2 +-
 .../PermissionsTable.styled.tsx               |  7 ++---
 .../SettingsEditor/SettingsEditor.styled.tsx  |  4 +--
 .../VersionUpdateNotice.styled.tsx            |  6 ++---
 .../EmbeddingOption.styled.tsx                |  3 +--
 .../HostingInfoLink.styled.tsx                |  3 +--
 .../CronExpressionInput.styled.tsx            |  2 +-
 .../SlackAppsLink/SlackAppsLink.styled.tsx    |  3 +--
 .../tasks/components/Logs/Logs.styled.tsx     |  2 +-
 .../upsells/components/Upsells.styled.tsx     |  7 +++--
 .../ArchivedEntityBanner.tsx                  |  4 +--
 .../ArchivedEntityBanner/BannerButton.tsx     |  4 +--
 .../AuthButton/AuthButton.styled.tsx          |  2 +-
 .../AuthLayout/AuthLayout.styled.tsx          |  4 +--
 .../PinnedQuestionCard.styled.tsx             |  2 +-
 .../ResultItem/ResultItem.styled.tsx          |  4 +--
 .../components/ResultItem/ResultItem.tsx      |  4 +--
 .../common/components/EntityPicker/utils.ts   |  2 +-
 .../BaseBucketPickerPopover.styled.tsx        |  6 ++---
 .../BulkActionBar/BulkActionBar.styled.tsx    | 25 +++++++++---------
 .../BulkActionBar/BulkActionBar.tsx           |  2 +-
 .../components/Calendar/Calendar.styled.tsx   |  2 +-
 .../src/metabase/components/Card/Card.tsx     |  3 ++-
 .../CollectionItem/CollectionItem.styled.tsx  |  2 +-
 .../components/CopyButton/CopyButton.tsx      |  2 +-
 .../CopyTextInput/CopyTextInput.styled.tsx    |  3 +--
 .../CopyWidget/CopyWidget.styled.tsx          |  3 +--
 .../DateMonthYearWidget.styled.tsx            |  4 +--
 .../DateQuarterYearWidget.styled.tsx          |  6 ++---
 .../components/EditBar/EditBar.styled.tsx     | 13 +++++-----
 .../components/HelpCard/HelpCard.styled.tsx   |  2 +-
 .../ItemsTable/BaseItemsTable.styled.tsx      |  2 +-
 .../MetadataInfo/MetadataInfo.styled.tsx      |  2 +-
 .../ModalContent/ModalContent.stories.tsx     |  2 +-
 .../SelectList/SelectListItem.styled.tsx      |  2 +-
 .../SingleSelectListField.styled.tsx          |  4 +--
 .../components/Toaster/Toaster.styled.tsx     | 10 +++----
 .../TokenField/TokenField.styled.tsx          |  2 +-
 .../UserAvatar/UserAvatar.styled.tsx          |  6 ++---
 .../UserPicker/UserPicker.styled.tsx          |  3 +--
 .../components/icons/CountdownIcon.styled.tsx |  4 +--
 .../components/tree/TreeNode.styled.tsx       |  2 +-
 .../src/metabase/containers/UndoListing.jsx   |  2 +-
 .../containers/UndoListing.styled.tsx         |  6 ++---
 .../containers/Unsubscribe.styled.tsx         |  2 +-
 .../core/components/Button/Button.styled.tsx  |  6 ++---
 .../ColorPicker/ColorPicker.styled.tsx        |  4 +--
 .../components/Markdown/Markdown.styled.tsx   |  3 ++-
 .../core/components/Radio/Radio.styled.tsx    |  4 ++-
 .../SelectButton/SelectButton.styled.tsx      |  2 +-
 .../core/components/Slider/Slider.styled.tsx  |  6 ++---
 .../core/components/TabRow/TabRow.styled.tsx  |  7 +++--
 .../core/components/Toggle/Toggle.styled.tsx  |  2 +-
 .../css/components/buttons.module.css         | 26 +++++++++----------
 .../src/metabase/css/core/bordered.module.css |  2 +-
 .../src/metabase/css/core/colors.module.css   | 10 +++----
 .../src/metabase/css/dashboard.module.css     |  6 ++---
 .../src/metabase/css/query_builder.module.css |  6 ++---
 .../SidebarItem/SidebarItem.styled.tsx        |  2 +-
 .../TypeSelector/TypeSelector.styled.tsx      |  3 ++-
 .../TypeSelector/TypeSelector.tsx             |  2 +-
 .../DashCardCardParameterMapper.styled.tsx    | 12 ++++-----
 .../components/Dashboard/Dashboard.styled.tsx |  2 +-
 .../DashboardEmptyState.styled.tsx            |  4 ++-
 .../DashboardHeader/SectionLayoutPreview.tsx  |  2 +-
 .../DashboardInfoSidebar.styled.tsx           |  3 +--
 .../components/DashboardMoveModal.tsx         |  2 +-
 .../components/ParametersPopover.styled.tsx   |  4 +--
 .../DatabaseEngineWidget.styled.tsx           |  2 +-
 .../FormMessage/FormMessage.styled.tsx        |  2 +-
 .../FormTextInput/FormTextInput.styled.tsx    |  3 +--
 .../CustomHomePageModal.tsx                   |  4 +--
 .../components/HomeCard/HomeCard.styled.tsx   |  4 +--
 .../HomeHelpCard/HomeHelpCard.styled.tsx      |  2 +-
 frontend/src/metabase/hooks/use-palette.ts    |  2 +-
 frontend/src/metabase/lib/colors/groups.ts    |  2 +-
 frontend/src/metabase/lib/colors/palette.ts   |  4 +--
 .../metabase/lib/colors/scales.unit.spec.ts   |  2 +-
 .../ModelActionListItem.styled.tsx            |  2 +-
 .../NewModelOptions.styled.tsx                |  3 +--
 .../AdminNavbar/AdminNavItem.styled.tsx       |  3 ++-
 .../AdminNavbar/AdminNavbar.styled.tsx        |  8 +++---
 .../components/AdminNavbar/AdminNavbar.tsx    |  2 +-
 .../CollectionBreadcrumbs.styled.tsx          |  2 +-
 .../components/StoreLink/StoreLink.styled.tsx |  4 +--
 .../search/SearchBar/SearchBar.styled.tsx     |  2 +-
 .../MainNavbar/MainNavbar.styled.tsx          |  6 ++---
 .../SidebarItems/SidebarItems.styled.tsx      |  2 +-
 .../palette/components/PaletteResultItem.tsx  |  6 ++---
 .../ParameterSettings.styled.tsx              |  2 +-
 .../ParameterValueWidget.module.css           |  2 +-
 .../ParameterWidget/ParameterWidget.styled.ts |  4 +--
 .../EmbedFrame/EmbedFrame.module.css          |  6 ++---
 .../EmbedFrame/EmbedFrame.styled.tsx          |  2 +-
 .../EmbedFrame/LogoBadge.styled.tsx           |  2 +-
 .../InteractiveEmbeddingCTA.tsx               |  2 +-
 .../StaticEmbedSetupPane.styled.tsx           |  2 +-
 .../widgets/LegaleseStep/LegaleseStep.tsx     |  2 +-
 .../pulse/components/RecipientPicker.jsx      |  2 +-
 .../AlertModals/AlertModals.styled.tsx        |  2 +-
 .../DataSelectorDataBucketPicker.styled.tsx   |  2 +-
 .../DatasetEditor/DatasetEditor.styled.tsx    | 10 +++----
 .../MappedFieldPicker.styled.tsx              |  5 ++--
 .../EditorTabs/EditorTabs.styled.tsx          |  4 +--
 .../NativeQueryEditor.styled.tsx              |  2 +-
 .../QueryDownloadPopover.styled.tsx           |  4 +--
 .../ExpressionEditorSuggestions.styled.tsx    |  5 +---
 .../ExtractColumn/ExtractColumn.module.css    |  2 +-
 .../components/notebook/FieldsPickerIcon.tsx  |  3 +--
 .../NotebookCell/NotebookCell.styled.tsx      |  9 ++++---
 .../NotebookNativePreview.tsx                 |  2 +-
 .../steps/DataStep/DataStep.styled.tsx        |  3 +--
 .../JoinConditionColumnPicker.tsx             |  4 +--
 .../JoinConditionOperatorPicker.styled.tsx    |  2 +-
 .../JoinConditionRemoveButton.styled.tsx      |  4 +--
 .../JoinTablePicker.styled.tsx                |  3 +--
 .../steps/SortStep/SortStep.styled.tsx        |  4 +--
 .../SnippetRow/SnippetRow.styled.tsx          |  3 +--
 .../TagEditorParam.styled.tsx                 |  2 +-
 .../QuestionDisplayToggle.styled.tsx          |  2 +-
 .../NotebookContainer/NotebookContainer.tsx   |  4 +--
 .../components/view/ViewButton.tsx            |  4 +--
 .../components/view/ViewFooter.styled.tsx     |  2 +-
 .../view/ViewHeader/ViewHeader.styled.tsx     |  4 +--
 .../ToggleNativeQueryPreview.styled.tsx       |  2 +-
 .../view/sidebars/ChartTypeSidebar.styled.tsx |  4 +--
 .../AddAggregationButton.styled.tsx           |  5 ++--
 .../AggregationItem.styled.tsx                | 10 +++----
 .../BreakoutColumnList.styled.tsx             |  4 +--
 .../BreakoutColumnListItem.styled.tsx         | 23 ++++++++--------
 .../SummarizeSidebar.styled.tsx               |  3 +--
 .../FilterPanelButton.styled.tsx              |  5 ++--
 .../QuestionMoveToast.styled.tsx              |  3 +--
 .../InfoText/InfoTextEditedInfo.styled.tsx    |  3 +--
 .../components/ItemIcon.styled.tsx            |  2 +-
 .../ActiveStep/ActiveStep.styled.tsx          |  4 +--
 .../CompletedStep/CompletedStep.styled.tsx    |  2 +-
 .../InactiveStep/InactiveStep.styled.tsx      | 12 ++++-----
 .../LanguageStep/LanguageStep.styled.tsx      |  6 ++---
 .../NewsletterForm/NewsletterForm.styled.tsx  |  6 ++---
 .../components/NewPulseSidebar.styled.tsx     |  3 +--
 .../components/ProgressBar/ProgressBar.tsx    |  6 ++---
 .../StatusLarge/StatusLarge.styled.tsx        | 11 ++++----
 .../StatusSmall/StatusSmall.styled.tsx        |  2 +-
 .../containers/GlobalStyles/GlobalStyles.tsx  |  4 +++
 .../TimelineEmptyState.styled.tsx             |  8 +++---
 .../TimelinePicker/TimelinePicker.styled.tsx  |  6 ++---
 .../navigation/NavLink/NavLink.styled.tsx     |  6 ++---
 frontend/src/metabase/ui/utils/colors.ts      |  1 +
 .../TimelineEventTooltip.styled.tsx           |  3 +--
 .../ClickActionControl.module.css             |  4 +--
 .../ClickActionControl.styled.tsx             |  6 ++---
 .../TableInteractive.styled.tsx               |  2 +-
 .../ChartSettingFieldPicker.styled.tsx        |  4 +--
 .../settings/ColumnItem/ColumnItem.styled.tsx |  2 +-
 .../StaticSkeleton/StaticSkeleton.styled.tsx  |  2 +-
 .../echarts/cartesian/option/series.ts        |  4 +--
 .../cartesian/scatter/option/series.ts        |  2 +-
 .../visualizations/Gauge/Gauge.jsx            |  2 +-
 .../PivotTable/PivotTable.styled.tsx          |  4 +--
 193 files changed, 379 insertions(+), 408 deletions(-)

diff --git a/.storybook/preview-head.html b/.storybook/preview-head.html
index 27940e11057..5f4ce19ca00 100644
--- a/.storybook/preview-head.html
+++ b/.storybook/preview-head.html
@@ -1,20 +1,27 @@
 <style>
   :root {
     --mb-default-font-family: "Lato";
-    --mb-color-brand: #509ee3;
-    --mb-color-brand-alpha-04: rgba(80, 158, 227, 0.04);
-    --mb-color-brand-alpha-88: rgba(80, 158, 227, 0.88);
-    --mb-color-focus: #cbe2f7;
     --mb-color-bg-dark: #93a1ab;
-    --mb-color-bg-light: #f9fbfc;
     --mb-color-bg-error: #ed6e6e55;
+    --mb-color-bg-light: #f9fbfc;
     --mb-color-bg-medium: #edf2f5;
     --mb-color-bg-night: #42484e;
     --mb-color-bg-white: #fff;
     --mb-color-border: #eeecec;
+    --mb-color-brand-alpha-04: rgba(80, 158, 227, 0.04);
+    --mb-color-brand-alpha-88: rgba(80, 158, 227, 0.88);
     --mb-color-brand-light: #f9fbfc;
     --mb-color-brand-lighter: #eef6fc;
+    --mb-color-brand: #509ee3;
+    --mb-color-danger: #ed6e6e;
+    --mb-color-error: #ed6e6e;
     --mb-color-filter: #7172ad;
+    --mb-color-focus: #cbe2f7;
+    --mb-color-shadow: rgba(0, 0, 0, 0.13);
+    --mb-color-success: #84bb4c;
+    --mb-color-summarize: #88bf4d;
+    --mb-color-text-white: #fff;
+    --mb-color-warning: #f9cf48;
 
     /*
       Theming-specific CSS variables.
diff --git a/enterprise/frontend/src/embedding-sdk/components/private/SdkContentWrapper.tsx b/enterprise/frontend/src/embedding-sdk/components/private/SdkContentWrapper.tsx
index be893605724..732bf9c8b3b 100644
--- a/enterprise/frontend/src/embedding-sdk/components/private/SdkContentWrapper.tsx
+++ b/enterprise/frontend/src/embedding-sdk/components/private/SdkContentWrapper.tsx
@@ -59,6 +59,10 @@ const SdkContentWrapperInner = styled.div<
   --mb-color-bg-error: ${() => color("bg-error")};
   --mb-color-bg-medium: ${({ theme }) => theme.fn.themeColor("bg-medium")};
   --mb-color-bg-night: ${() => color("bg-night")};
+  --mb-color-text-white: ${({ theme }) => theme.fn.themeColor("text-white")};
+  --mb-color-success: ${({ theme }) => theme.fn.themeColor("success")};
+  --mb-color-summarize: ${({ theme }) => theme.fn.themeColor("summarize")};
+  --mb-color-warning: ${({ theme }) => theme.fn.themeColor("warning")};
 
   /**
     Theming-specific CSS variables.
diff --git a/enterprise/frontend/src/embedding-sdk/lib/theme/default-component-theme.ts b/enterprise/frontend/src/embedding-sdk/lib/theme/default-component-theme.ts
index abcf1baa0fa..fda2ec88554 100644
--- a/enterprise/frontend/src/embedding-sdk/lib/theme/default-component-theme.ts
+++ b/enterprise/frontend/src/embedding-sdk/lib/theme/default-component-theme.ts
@@ -48,8 +48,8 @@ export const DEFAULT_METABASE_COMPONENT_THEME: MetabaseComponentTheme = {
   },
   pivotTable: {
     rowToggle: {
-      textColor: "white",
-      backgroundColor: "text-light",
+      textColor: "text-white",
+      backgroundColor: "text-light", // TODO: should it be "bg-dark" ?
     },
   },
   cartesian: {
diff --git a/enterprise/frontend/src/metabase-enterprise/caching/components/InvalidateNowButton.tsx b/enterprise/frontend/src/metabase-enterprise/caching/components/InvalidateNowButton.tsx
index 3e5c0955e94..c261af7cb42 100644
--- a/enterprise/frontend/src/metabase-enterprise/caching/components/InvalidateNowButton.tsx
+++ b/enterprise/frontend/src/metabase-enterprise/caching/components/InvalidateNowButton.tsx
@@ -40,7 +40,7 @@ export const InvalidateNowButton = ({
             icon: "warning",
             message: e.data.message,
             toastColor: "error",
-            dismissIconColor: color("white"),
+            dismissIconColor: color("text-white"),
           }),
         );
       }
diff --git a/enterprise/frontend/src/metabase-enterprise/caching/components/StrategyFormLauncher.styled.tsx b/enterprise/frontend/src/metabase-enterprise/caching/components/StrategyFormLauncher.styled.tsx
index 39303dd3f11..76be3a58977 100644
--- a/enterprise/frontend/src/metabase-enterprise/caching/components/StrategyFormLauncher.styled.tsx
+++ b/enterprise/frontend/src/metabase-enterprise/caching/components/StrategyFormLauncher.styled.tsx
@@ -59,7 +59,7 @@ export const StyledLauncher = styled(Flex)<
   font-weight: ${({ forRoot, inheritsRootStrategy }) =>
     forRoot || inheritsRootStrategy ? "normal" : "bold"};
   background-color: ${({ forRoot }) =>
-    forRoot ? "var(--mb-color-bg-medium)" : color("white")};
+    forRoot ? color("bg-medium") : color("bg-white")};
   ${({ forRoot }) =>
     !forRoot &&
     css`
diff --git a/enterprise/frontend/src/metabase-enterprise/hosting/components/SettingsCloudStoreLink/SettingsCloudStoreLink.styled.tsx b/enterprise/frontend/src/metabase-enterprise/hosting/components/SettingsCloudStoreLink/SettingsCloudStoreLink.styled.tsx
index e42c80d264f..73fdb993e0e 100644
--- a/enterprise/frontend/src/metabase-enterprise/hosting/components/SettingsCloudStoreLink/SettingsCloudStoreLink.styled.tsx
+++ b/enterprise/frontend/src/metabase-enterprise/hosting/components/SettingsCloudStoreLink/SettingsCloudStoreLink.styled.tsx
@@ -12,7 +12,7 @@ export const Description = styled.p`
 export const Link = styled(ExternalLink)`
   display: inline-flex;
   align-items: center;
-  color: ${color("text-white")};
+  color: var(--mb-color-text-white);
   font-weight: bold;
   background-color: var(--mb-color-brand);
   padding: 12px 18px;
@@ -25,7 +25,7 @@ export const Link = styled(ExternalLink)`
 `;
 
 export const LinkIcon = styled(Icon)`
-  color: ${color("text-white")};
+  color: var(--mb-color-text-white);
   opacity: 0.6;
   margin-left: 8px;
 `;
diff --git a/enterprise/frontend/src/metabase-enterprise/license/components/BillingInfo/BillingInfo.styled.tsx b/enterprise/frontend/src/metabase-enterprise/license/components/BillingInfo/BillingInfo.styled.tsx
index e939ad1b0a6..394da162832 100644
--- a/enterprise/frontend/src/metabase-enterprise/license/components/BillingInfo/BillingInfo.styled.tsx
+++ b/enterprise/frontend/src/metabase-enterprise/license/components/BillingInfo/BillingInfo.styled.tsx
@@ -4,7 +4,6 @@ import styled from "@emotion/styled";
 import Card from "metabase/components/Card";
 import ExternalLink from "metabase/core/components/ExternalLink";
 import Link from "metabase/core/components/Link";
-import { color } from "metabase/lib/colors";
 import { Icon } from "metabase/ui";
 
 export const BillingInfoCard = styled(Card)`
@@ -39,7 +38,7 @@ export const BillingExternalLinkIcon = styled(Icon)`
 export const StoreButtonLink = styled(ExternalLink)`
   display: inline-flex;
   background-color: var(--mb-color-brand);
-  color: ${color("text-white")};
+  color: var(--mb-color-text-white);
   align-items: center;
   font-weight: bold;
   padding: 0.75rem 1rem;
diff --git a/enterprise/frontend/src/metabase-enterprise/whitelabel/components/ImageUpload/ImageUpload.styled.tsx b/enterprise/frontend/src/metabase-enterprise/whitelabel/components/ImageUpload/ImageUpload.styled.tsx
index 73892e1869c..ec5fa12d213 100644
--- a/enterprise/frontend/src/metabase-enterprise/whitelabel/components/ImageUpload/ImageUpload.styled.tsx
+++ b/enterprise/frontend/src/metabase-enterprise/whitelabel/components/ImageUpload/ImageUpload.styled.tsx
@@ -8,7 +8,7 @@ export const FileInput = styled.input`
     margin-right: 1rem;
     border-radius: 4px;
     border: 1px solid var(--mb-color-border);
-    background-color: ${color("white")};
+    background-color: var(--mb-color-bg-white);
     color: ${color("text-dark")};
     transition: 200ms;
     cursor: pointer;
diff --git a/frontend/src/metabase/account/app/components/AccountHeader/AccountHeader.styled.tsx b/frontend/src/metabase/account/app/components/AccountHeader/AccountHeader.styled.tsx
index 40ccf65f310..4d67a5eb838 100644
--- a/frontend/src/metabase/account/app/components/AccountHeader/AccountHeader.styled.tsx
+++ b/frontend/src/metabase/account/app/components/AccountHeader/AccountHeader.styled.tsx
@@ -15,7 +15,7 @@ export const AccountHeaderRoot = styled.div`
   align-items: center;
   padding-top: ${space(1)};
   border-bottom: 1px solid var(--mb-color-border);
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
 
   ${breakpointMinSmall} {
     padding-top: ${space(2)};
diff --git a/frontend/src/metabase/account/login-history/components/LoginHistory/LoginHistory.styled.tsx b/frontend/src/metabase/account/login-history/components/LoginHistory/LoginHistory.styled.tsx
index 74b030a6c09..6e881b24240 100644
--- a/frontend/src/metabase/account/login-history/components/LoginHistory/LoginHistory.styled.tsx
+++ b/frontend/src/metabase/account/login-history/components/LoginHistory/LoginHistory.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import Label from "metabase/components/type/Label";
-import { color } from "metabase/lib/colors";
 
 export const LoginGroup = styled.div`
   padding: 1rem 0;
@@ -18,5 +17,5 @@ export const LoginItemInfo = styled.div`
 `;
 
 export const LoginActiveLabel = styled(Label)`
-  color: ${color("summarize")};
+  color: var(--mb-color-summarize);
 `;
diff --git a/frontend/src/metabase/account/notifications/components/NotificationCard/NotificationCard.styled.tsx b/frontend/src/metabase/account/notifications/components/NotificationCard/NotificationCard.styled.tsx
index b2d42dd813e..3176bc7c745 100644
--- a/frontend/src/metabase/account/notifications/components/NotificationCard/NotificationCard.styled.tsx
+++ b/frontend/src/metabase/account/notifications/components/NotificationCard/NotificationCard.styled.tsx
@@ -9,7 +9,7 @@ export const NotificationCardRoot = styled.div`
   padding: 1rem 1.5rem;
   border: 1px solid var(--mb-color-border);
   border-radius: 6px;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
 
   &:not(:last-child) {
     margin-bottom: 1.25rem;
diff --git a/frontend/src/metabase/actions/components/ActionViz/ActionForm.styled.tsx b/frontend/src/metabase/actions/components/ActionViz/ActionForm.styled.tsx
index 6d3176bb64f..b90c9b2a3a2 100644
--- a/frontend/src/metabase/actions/components/ActionViz/ActionForm.styled.tsx
+++ b/frontend/src/metabase/actions/components/ActionViz/ActionForm.styled.tsx
@@ -1,11 +1,10 @@
 import styled from "@emotion/styled";
 
-import { color } from "metabase/lib/colors";
 import { space } from "metabase/styled-components/theme";
 
 export const FormWrapper = styled.div`
   padding: 1.5rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   border-radius: ${space(1)};
   border: 1px solid var(--mb-color-border);
   overflow-y: auto;
diff --git a/frontend/src/metabase/actions/containers/ActionCreator/ActionCreator.styled.tsx b/frontend/src/metabase/actions/containers/ActionCreator/ActionCreator.styled.tsx
index 68aadbd3d69..640d71a1e07 100644
--- a/frontend/src/metabase/actions/containers/ActionCreator/ActionCreator.styled.tsx
+++ b/frontend/src/metabase/actions/containers/ActionCreator/ActionCreator.styled.tsx
@@ -1,6 +1,5 @@
 import styled from "@emotion/styled";
 
-import { color } from "metabase/lib/colors";
 import SidebarContent from "metabase/query_builder/components/SidebarContent";
 import { space } from "metabase/styled-components/theme";
 
@@ -66,7 +65,7 @@ export const ModalRight = styled.div`
     top: 0;
     padding: 1.5rem 1.5rem 0.5rem 1.5rem;
     margin: 0;
-    background-color: ${color("white")};
+    background-color: var(--mb-color-bg-white);
     z-index: 5;
   }
 `;
diff --git a/frontend/src/metabase/actions/containers/ActionCreator/ActionCreatorHeader.styled.tsx b/frontend/src/metabase/actions/containers/ActionCreator/ActionCreatorHeader.styled.tsx
index 3a630eeed2e..ebf1851630e 100644
--- a/frontend/src/metabase/actions/containers/ActionCreator/ActionCreatorHeader.styled.tsx
+++ b/frontend/src/metabase/actions/containers/ActionCreator/ActionCreatorHeader.styled.tsx
@@ -12,7 +12,7 @@ export const Container = styled.div`
   align-items: center;
   justify-content: space-between;
   width: 100%;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   border-bottom: 1px solid var(--mb-color-border);
   padding: ${space(2)} ${space(3)};
 `;
diff --git a/frontend/src/metabase/actions/containers/ActionCreator/FormCreator/FormCreator.styled.tsx b/frontend/src/metabase/actions/containers/ActionCreator/FormCreator/FormCreator.styled.tsx
index 7241217f967..be63e7e67cd 100644
--- a/frontend/src/metabase/actions/containers/ActionCreator/FormCreator/FormCreator.styled.tsx
+++ b/frontend/src/metabase/actions/containers/ActionCreator/FormCreator/FormCreator.styled.tsx
@@ -1,6 +1,6 @@
 import styled from "@emotion/styled";
 
-import { color, alpha } from "metabase/lib/colors";
+import { alpha } from "metabase/lib/colors";
 import { space } from "metabase/styled-components/theme";
 
 export const FormContainer = styled.div`
@@ -8,7 +8,7 @@ export const FormContainer = styled.div`
   gap: ${space(2)};
   padding: 0 1.5rem 1rem;
   transition: flex 500ms ease-in-out;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   flex-direction: column;
 `;
 
@@ -24,8 +24,8 @@ export const FieldSettingsButtonsContainer = styled.div`
 
 export const WarningBanner = styled.div`
   padding: ${space(2)};
-  border: 1px solid ${color("warning")};
+  border: 1px solid var(--mb-color-warning);
   border-radius: ${space(1)};
-  background: ${alpha("warning", 0.1)};
+  background: ${() => alpha("warning", 0.1)};
   line-height: 1.25rem;
 `;
diff --git a/frontend/src/metabase/actions/containers/ActionPicker/ActionOptionItem.styled.tsx b/frontend/src/metabase/actions/containers/ActionPicker/ActionOptionItem.styled.tsx
index 83c998bbd35..080ed2e4b6e 100644
--- a/frontend/src/metabase/actions/containers/ActionPicker/ActionOptionItem.styled.tsx
+++ b/frontend/src/metabase/actions/containers/ActionPicker/ActionOptionItem.styled.tsx
@@ -12,7 +12,7 @@ export const ActionOptionListItem = styled.div<ActionOptionProps>`
   color: ${props =>
     props.isSelected ? color("text-white") : color("text-normal")};
   background-color: ${props =>
-    props.isSelected ? "var(--mb-color-brand)" : color("white")};
+    props.isSelected ? color("brand") : color("bg-white")};
   cursor: pointer;
 
   display: flex;
@@ -27,7 +27,7 @@ export const ActionOptionListItem = styled.div<ActionOptionProps>`
 
   &:hover {
     background-color: ${() => lighten("brand", 0.1)};
-    color: ${color("text-white")};
+    color: var(--mb-color-text-white);
   }
 `;
 
diff --git a/frontend/src/metabase/admin/datamodel/components/DimensionList/DimensionList.styled.tsx b/frontend/src/metabase/admin/datamodel/components/DimensionList/DimensionList.styled.tsx
index 916e03f5bb1..ff687c38c5f 100644
--- a/frontend/src/metabase/admin/datamodel/components/DimensionList/DimensionList.styled.tsx
+++ b/frontend/src/metabase/admin/datamodel/components/DimensionList/DimensionList.styled.tsx
@@ -6,5 +6,5 @@ export const FieldListGroupingTrigger = styled.div`
   display: flex;
   visibility: hidden;
   border-left: 2px solid ${() => alpha("filter", 0.1)};
-  color: ${alpha("text-white", 0.5)};
+  color: ${() => alpha("text-white", 0.5)};
 `;
diff --git a/frontend/src/metabase/admin/datamodel/components/GuiQueryEditor/GuiQueryEditor.module.css b/frontend/src/metabase/admin/datamodel/components/GuiQueryEditor/GuiQueryEditor.module.css
index 969358e9535..7726028ca99 100644
--- a/frontend/src/metabase/admin/datamodel/components/GuiQueryEditor/GuiQueryEditor.module.css
+++ b/frontend/src/metabase/admin/datamodel/components/GuiQueryEditor/GuiQueryEditor.module.css
@@ -29,5 +29,5 @@
 /* create a smaller inset arrow on the right */
 .arrowRight::after {
   right: -19px;
-  border-left-color: var(--color-white);
+  border-left-color: var(--mb-color-bg-white);
 }
diff --git a/frontend/src/metabase/admin/datamodel/components/ObjectActionSelect.styled.tsx b/frontend/src/metabase/admin/datamodel/components/ObjectActionSelect.styled.tsx
index ead2eee7333..32ffb0901fa 100644
--- a/frontend/src/metabase/admin/datamodel/components/ObjectActionSelect.styled.tsx
+++ b/frontend/src/metabase/admin/datamodel/components/ObjectActionSelect.styled.tsx
@@ -10,7 +10,7 @@ export const ActionLink = styled(Link)`
   text-decoration: none;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 `;
diff --git a/frontend/src/metabase/admin/datamodel/components/filters/pickers/DatePicker/CurrentPicker/CurrentPicker.styled.tsx b/frontend/src/metabase/admin/datamodel/components/filters/pickers/DatePicker/CurrentPicker/CurrentPicker.styled.tsx
index 76ca856ac77..833410e0ba4 100644
--- a/frontend/src/metabase/admin/datamodel/components/filters/pickers/DatePicker/CurrentPicker/CurrentPicker.styled.tsx
+++ b/frontend/src/metabase/admin/datamodel/components/filters/pickers/DatePicker/CurrentPicker/CurrentPicker.styled.tsx
@@ -12,7 +12,7 @@ export const CurrentContainer = styled.div<{ first?: boolean }>`
 `;
 
 export const CurrentPopover = styled.div`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   background-color: var(--mb-color-bg-black);
   padding: ${space(1)} ${space(2)};
 `;
@@ -29,7 +29,7 @@ export const CurrentButton = styled(Button)<ButtonProps>`
   background-color: ${({ selected, primaryColor = color("brand") }) =>
     selected ? primaryColor : alpha(primaryColor, 0.1)};
   color: ${({ selected, primaryColor = color("brand") }) =>
-    selected ? "white" : primaryColor};
+    selected ? "var(--mb-color-text-white)" : primaryColor};
 
   padding-top: ${space(1)};
   padding-bottom: ${space(1)};
diff --git a/frontend/src/metabase/admin/datamodel/components/filters/pickers/DatePicker/RelativeDatePicker.styled.tsx b/frontend/src/metabase/admin/datamodel/components/filters/pickers/DatePicker/RelativeDatePicker.styled.tsx
index b9809608a32..3bd3d40c659 100644
--- a/frontend/src/metabase/admin/datamodel/components/filters/pickers/DatePicker/RelativeDatePicker.styled.tsx
+++ b/frontend/src/metabase/admin/datamodel/components/filters/pickers/DatePicker/RelativeDatePicker.styled.tsx
@@ -24,7 +24,7 @@ export const NumericInput = styled(BaseNumericInput)<BaseProps>`
 `;
 
 export const OptionsContainer = styled.div`
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   padding: ${space(2)} ${space(1)};
 `;
 
diff --git a/frontend/src/metabase/admin/datamodel/components/filters/pickers/SelectPicker.styled.tsx b/frontend/src/metabase/admin/datamodel/components/filters/pickers/SelectPicker.styled.tsx
index 6fbeba89201..7ca1d85efe6 100644
--- a/frontend/src/metabase/admin/datamodel/components/filters/pickers/SelectPicker.styled.tsx
+++ b/frontend/src/metabase/admin/datamodel/components/filters/pickers/SelectPicker.styled.tsx
@@ -7,7 +7,7 @@ export interface SelectPickerButtonProps {
 }
 
 export const SelectPickerButton = styled.button<SelectPickerButtonProps>`
-  color: ${props => (props.isSelected ? color("white") : color("filter"))};
+  color: ${props => (props.isSelected ? color("text-white") : color("filter"))};
   text-align: center;
   font-weight: 700;
   width: 100%;
@@ -15,5 +15,5 @@ export const SelectPickerButton = styled.button<SelectPickerButtonProps>`
   border: 1px solid var(--mb-color-filter);
   border-radius: 0.5rem;
   background-color: ${props =>
-    props.isSelected ? color("filter") : color("white")};
+    props.isSelected ? color("filter") : color("bg-white")};
 `;
diff --git a/frontend/src/metabase/admin/datamodel/components/revisions/RevisionDiff.styled.tsx b/frontend/src/metabase/admin/datamodel/components/revisions/RevisionDiff.styled.tsx
index 132a89f6936..b169f43da0c 100644
--- a/frontend/src/metabase/admin/datamodel/components/revisions/RevisionDiff.styled.tsx
+++ b/frontend/src/metabase/admin/datamodel/components/revisions/RevisionDiff.styled.tsx
@@ -1,6 +1,5 @@
 import styled from "@emotion/styled";
 
-import { color } from "metabase/lib/colors";
 import { Icon } from "metabase/ui";
 
 export const EditIcon = styled(Icon)`
@@ -12,5 +11,5 @@ export const ErrorIcon = styled(Icon)`
 `;
 
 export const SuccessIcon = styled(Icon)`
-  color: ${color("summarize")};
+  color: var(--mb-color-summarize);
 `;
diff --git a/frontend/src/metabase/admin/datamodel/metadata/components/MetadataBackButton/MetadataBackButton.styled.tsx b/frontend/src/metabase/admin/datamodel/metadata/components/MetadataBackButton/MetadataBackButton.styled.tsx
index 11302acfa17..6b5fab2d19d 100644
--- a/frontend/src/metabase/admin/datamodel/metadata/components/MetadataBackButton/MetadataBackButton.styled.tsx
+++ b/frontend/src/metabase/admin/datamodel/metadata/components/MetadataBackButton/MetadataBackButton.styled.tsx
@@ -1,15 +1,13 @@
 import styled from "@emotion/styled";
 import { Link } from "react-router";
 
-import { color } from "metabase/lib/colors";
-
 export const BackButtonLink = styled(Link)`
   display: flex;
   justify-content: center;
   align-items: center;
   padding: 1rem;
   border-radius: 99px;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   background-color: var(--mb-color-bg-dark);
 
   &:hover {
diff --git a/frontend/src/metabase/admin/datamodel/metadata/components/MetadataTableColumn/MetadataTableColumn.styled.tsx b/frontend/src/metabase/admin/datamodel/metadata/components/MetadataTableColumn/MetadataTableColumn.styled.tsx
index 1fc90002d7d..dc6d5bb2e6d 100644
--- a/frontend/src/metabase/admin/datamodel/metadata/components/MetadataTableColumn/MetadataTableColumn.styled.tsx
+++ b/frontend/src/metabase/admin/datamodel/metadata/components/MetadataTableColumn/MetadataTableColumn.styled.tsx
@@ -2,7 +2,6 @@ import styled from "@emotion/styled";
 import { Link } from "react-router";
 
 import InputBlurChange from "metabase/components/InputBlurChange";
-import { color } from "metabase/lib/colors";
 
 export const ColumnContainer = styled.section`
   padding: 1rem 0.5rem 1rem 1rem;
@@ -15,7 +14,7 @@ export const ColumnContainer = styled.section`
   &:last-child {
     margin-bottom: 0;
   }
-  background: ${color("white")};
+  background: var(--mb-color-bg-white);
 `;
 
 export const ColumnInput = styled(InputBlurChange)`
diff --git a/frontend/src/metabase/admin/people/components/GroupsListing.styled.tsx b/frontend/src/metabase/admin/people/components/GroupsListing.styled.tsx
index 9d1f5be03f6..5c6a5127d18 100644
--- a/frontend/src/metabase/admin/people/components/GroupsListing.styled.tsx
+++ b/frontend/src/metabase/admin/people/components/GroupsListing.styled.tsx
@@ -1,13 +1,11 @@
 import styled from "@emotion/styled";
 
-import { color } from "metabase/lib/colors";
-
 export const EditGroupButton = styled.li`
   cursor: pointer;
   padding: 0.5rem 1rem;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 `;
@@ -18,7 +16,7 @@ export const DeleteModalTrigger = styled.li`
   padding: 0.5rem 1rem;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 `;
diff --git a/frontend/src/metabase/admin/people/components/MembershipSelect/MembershipSelect.styled.tsx b/frontend/src/metabase/admin/people/components/MembershipSelect/MembershipSelect.styled.tsx
index 6f674f4753d..dc980fc61f9 100644
--- a/frontend/src/metabase/admin/people/components/MembershipSelect/MembershipSelect.styled.tsx
+++ b/frontend/src/metabase/admin/people/components/MembershipSelect/MembershipSelect.styled.tsx
@@ -19,7 +19,7 @@ export const MembershipSelectItem = styled.li<MembershipSelectItemProps>`
   justify-content: space-between;
   cursor: ${props => (props.isDisabled ? "unset" : "pointer")};
   padding: 0.5rem 1.5rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   color: ${color("text-medium")};
   font-weight: 700;
 
@@ -27,11 +27,11 @@ export const MembershipSelectItem = styled.li<MembershipSelectItemProps>`
     !props.isDisabled &&
     css`
       &:hover {
-        color: ${color("white")};
+        color: var(--mb-color-text-white);
         background-color: var(--mb-color-filter);
 
         .Icon {
-          color: ${color("white")} !important;
+          color: var(--mb-color-text-white) !important;
         }
       }
     `}
diff --git a/frontend/src/metabase/admin/people/components/NudgeToPro.styled.tsx b/frontend/src/metabase/admin/people/components/NudgeToPro.styled.tsx
index 4d81de9da07..14ec42b16dd 100644
--- a/frontend/src/metabase/admin/people/components/NudgeToPro.styled.tsx
+++ b/frontend/src/metabase/admin/people/components/NudgeToPro.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import ExternalLink from "metabase/core/components/ExternalLink";
-import { color } from "metabase/lib/colors";
 
 export const NudgeCard = styled.div`
   background-color: var(--mb-color-bg-light);
@@ -31,7 +30,7 @@ export const ProLink = styled(ExternalLink)`
   width: fit-content;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 `;
diff --git a/frontend/src/metabase/admin/performance/components/StrategyEditorForDatabases.styled.tsx b/frontend/src/metabase/admin/performance/components/StrategyEditorForDatabases.styled.tsx
index 924487161c5..9d4166a72ea 100644
--- a/frontend/src/metabase/admin/performance/components/StrategyEditorForDatabases.styled.tsx
+++ b/frontend/src/metabase/admin/performance/components/StrategyEditorForDatabases.styled.tsx
@@ -1,11 +1,9 @@
 import { css } from "@emotion/react";
 import styled from "@emotion/styled";
 
-import { color } from "metabase/lib/colors";
-
 export const Panel = styled.section<{ hasLeftBorder?: boolean }>`
   overflow-y: auto;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   height: 100%;
 
   ${props =>
diff --git a/frontend/src/metabase/admin/performance/components/StrategyForm.tsx b/frontend/src/metabase/admin/performance/components/StrategyForm.tsx
index 929e33b8221..62f18eb9f0c 100644
--- a/frontend/src/metabase/admin/performance/components/StrategyForm.tsx
+++ b/frontend/src/metabase/admin/performance/components/StrategyForm.tsx
@@ -14,7 +14,6 @@ import {
   FormTextInput,
   useFormContext,
 } from "metabase/forms";
-import { color } from "metabase/lib/colors";
 import { useSelector } from "metabase/lib/redux";
 import { PLUGIN_CACHING } from "metabase/plugins";
 import { getSetting } from "metabase/selectors/settings";
@@ -244,7 +243,7 @@ const FormButtonsGroup = ({
     <Group
       py="md"
       spacing="md"
-      bg={color("white")}
+      bg="bg-white"
       className="form-buttons-group"
       style={{
         justifyContent: isInSidebar ? undefined : "flex-end",
diff --git a/frontend/src/metabase/admin/permissions/components/FilterableTree/FilterableTree.styled.tsx b/frontend/src/metabase/admin/permissions/components/FilterableTree/FilterableTree.styled.tsx
index 6adcf4dbc7e..06db136c0da 100644
--- a/frontend/src/metabase/admin/permissions/components/FilterableTree/FilterableTree.styled.tsx
+++ b/frontend/src/metabase/admin/permissions/components/FilterableTree/FilterableTree.styled.tsx
@@ -28,7 +28,8 @@ export const EmptyStateContainer = styled.div`
 `;
 
 export const AdminTreeNode = styled(Tree.Node)`
-  color: ${props => (props.isSelected ? color("white") : color("text-medium"))};
+  color: ${props =>
+    props.isSelected ? color("text-white") : color("text-medium")};
 
   background-color: ${props => (props.isSelected ? color("filter") : "unset")};
 
diff --git a/frontend/src/metabase/admin/permissions/components/PermissionHelpDescription/PermissionHelpDescription.styled.tsx b/frontend/src/metabase/admin/permissions/components/PermissionHelpDescription/PermissionHelpDescription.styled.tsx
index aa66e206650..b892a02cc0d 100644
--- a/frontend/src/metabase/admin/permissions/components/PermissionHelpDescription/PermissionHelpDescription.styled.tsx
+++ b/frontend/src/metabase/admin/permissions/components/PermissionHelpDescription/PermissionHelpDescription.styled.tsx
@@ -14,6 +14,6 @@ export const PermissionIconContainer = styled.div<PermissionIconContainerProps>`
   justify-content: center;
   border-radius: 0.25rem;
   margin-right: 0.375rem;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   background-color: ${props => color(props.color)};
 `;
diff --git a/frontend/src/metabase/admin/permissions/components/PermissionsSelect/PermissionsSelect.styled.tsx b/frontend/src/metabase/admin/permissions/components/PermissionsSelect/PermissionsSelect.styled.tsx
index 844d819994c..c2747188522 100644
--- a/frontend/src/metabase/admin/permissions/components/PermissionsSelect/PermissionsSelect.styled.tsx
+++ b/frontend/src/metabase/admin/permissions/components/PermissionsSelect/PermissionsSelect.styled.tsx
@@ -30,7 +30,7 @@ export const OptionsListItem = styled.li`
   padding: 0.5rem 1rem;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: ${lighten("accent7", 0.1)};
   }
 `;
diff --git a/frontend/src/metabase/admin/permissions/components/PermissionsSelect/PermissionsSelectOption.styled.tsx b/frontend/src/metabase/admin/permissions/components/PermissionsSelect/PermissionsSelectOption.styled.tsx
index f1c6ceca829..1a5c1682bde 100644
--- a/frontend/src/metabase/admin/permissions/components/PermissionsSelect/PermissionsSelectOption.styled.tsx
+++ b/frontend/src/metabase/admin/permissions/components/PermissionsSelect/PermissionsSelectOption.styled.tsx
@@ -15,7 +15,7 @@ export const IconContainer = styled.div<{ color: string }>`
   border-radius: 3px;
   width: 20px;
   height: 20px;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   background-color: ${props => color(props.color)};
   flex-shrink: 0;
 `;
diff --git a/frontend/src/metabase/admin/permissions/components/PermissionsTable/PermissionsTable.styled.tsx b/frontend/src/metabase/admin/permissions/components/PermissionsTable/PermissionsTable.styled.tsx
index f326f91bb49..94d511b1e4d 100644
--- a/frontend/src/metabase/admin/permissions/components/PermissionsTable/PermissionsTable.styled.tsx
+++ b/frontend/src/metabase/admin/permissions/components/PermissionsTable/PermissionsTable.styled.tsx
@@ -15,9 +15,10 @@ const getHeaderBackground = (theme: Theme) =>
   `linear-gradient(to top, ${alpha(
     theme.fn.themeColor("border"),
     0.5,
-  )}, ${alpha(theme.fn.themeColor("border"), 0.5)} 1px, ${color(
-    "white",
-  )} 1px, ${color("white")} 100%)`;
+  )}, ${alpha(
+    theme.fn.themeColor("border"),
+    0.5,
+  )} 1px, var(--mb-color-bg-white) 1px, var(--mb-color-bg-white) 100%)`;
 
 export const PermissionsTableRoot = styled.table`
   border-collapse: collapse;
diff --git a/frontend/src/metabase/admin/settings/app/components/SettingsEditor/SettingsEditor.styled.tsx b/frontend/src/metabase/admin/settings/app/components/SettingsEditor/SettingsEditor.styled.tsx
index c2e452fc67c..40951f810e2 100644
--- a/frontend/src/metabase/admin/settings/app/components/SettingsEditor/SettingsEditor.styled.tsx
+++ b/frontend/src/metabase/admin/settings/app/components/SettingsEditor/SettingsEditor.styled.tsx
@@ -1,10 +1,8 @@
 import styled from "@emotion/styled";
 
-import { color } from "metabase/lib/colors";
-
 export const NewVersionIndicator = styled.span`
   padding: 0.25rem 0.5rem;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   font-size: 0.75em;
   font-weight: bold;
   background-color: var(--mb-color-brand);
diff --git a/frontend/src/metabase/admin/settings/components/SettingsUpdatesForm/VersionUpdateNotice/VersionUpdateNotice.styled.tsx b/frontend/src/metabase/admin/settings/components/SettingsUpdatesForm/VersionUpdateNotice/VersionUpdateNotice.styled.tsx
index 2f8465e0756..19050105950 100644
--- a/frontend/src/metabase/admin/settings/components/SettingsUpdatesForm/VersionUpdateNotice/VersionUpdateNotice.styled.tsx
+++ b/frontend/src/metabase/admin/settings/components/SettingsUpdatesForm/VersionUpdateNotice/VersionUpdateNotice.styled.tsx
@@ -1,14 +1,12 @@
 import styled from "@emotion/styled";
 
-import { color } from "metabase/lib/colors";
-
 export const NewVersionContainer = styled.div`
-  background-color: ${color("summarize")};
+  background-color: var(--mb-color-summarize);
 `;
 
 export const OnLatestVersionMessage = styled.div`
   padding: 1rem;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   font-weight: bold;
   border: 1px solid var(--mb-color-brand);
   border-radius: 0.5rem;
diff --git a/frontend/src/metabase/admin/settings/components/widgets/EmbeddingOption/EmbeddingOption.styled.tsx b/frontend/src/metabase/admin/settings/components/widgets/EmbeddingOption/EmbeddingOption.styled.tsx
index 2d66aced79a..72bbbf7f496 100644
--- a/frontend/src/metabase/admin/settings/components/widgets/EmbeddingOption/EmbeddingOption.styled.tsx
+++ b/frontend/src/metabase/admin/settings/components/widgets/EmbeddingOption/EmbeddingOption.styled.tsx
@@ -2,7 +2,6 @@ import styled from "@emotion/styled";
 
 import Card from "metabase/components/Card";
 import ExternalLink from "metabase/core/components/ExternalLink";
-import { color } from "metabase/lib/colors";
 import { space } from "metabase/styled-components/theme";
 
 export const StyledCard = styled(Card)`
@@ -20,7 +19,7 @@ export const Label = styled.span`
   font-weight: 700;
   border-radius: 0.25rem;
   text-transform: uppercase;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   background: var(--mb-color-brand);
 `;
 
diff --git a/frontend/src/metabase/admin/settings/components/widgets/HostingInfoLink/HostingInfoLink.styled.tsx b/frontend/src/metabase/admin/settings/components/widgets/HostingInfoLink/HostingInfoLink.styled.tsx
index 21719797ca5..02d009be80f 100644
--- a/frontend/src/metabase/admin/settings/components/widgets/HostingInfoLink/HostingInfoLink.styled.tsx
+++ b/frontend/src/metabase/admin/settings/components/widgets/HostingInfoLink/HostingInfoLink.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import ExternalLink from "metabase/core/components/ExternalLink";
-import { color } from "metabase/lib/colors";
 
 export const HostingLink = styled(ExternalLink)`
   font-weight: bold;
@@ -11,7 +10,7 @@ export const HostingLink = styled(ExternalLink)`
   border-radius: 0.5rem;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 `;
diff --git a/frontend/src/metabase/admin/settings/components/widgets/ModelCachingScheduleWidget/CronExpressionInput.styled.tsx b/frontend/src/metabase/admin/settings/components/widgets/ModelCachingScheduleWidget/CronExpressionInput.styled.tsx
index 013f60b40bc..e63e24cfa18 100644
--- a/frontend/src/metabase/admin/settings/components/widgets/ModelCachingScheduleWidget/CronExpressionInput.styled.tsx
+++ b/frontend/src/metabase/admin/settings/components/widgets/ModelCachingScheduleWidget/CronExpressionInput.styled.tsx
@@ -45,7 +45,7 @@ export const PopoverContent = styled.div`
   background-color: #222;
   padding: 18px;
 
-  color: ${color("text-white")};
+  color: var(--mb-color-text-white);
 `;
 
 export const PopoverTitle = styled.span`
diff --git a/frontend/src/metabase/admin/settings/slack/components/SlackAppsLink/SlackAppsLink.styled.tsx b/frontend/src/metabase/admin/settings/slack/components/SlackAppsLink/SlackAppsLink.styled.tsx
index 4e7ca7606f8..aee6eb40f62 100644
--- a/frontend/src/metabase/admin/settings/slack/components/SlackAppsLink/SlackAppsLink.styled.tsx
+++ b/frontend/src/metabase/admin/settings/slack/components/SlackAppsLink/SlackAppsLink.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import ExternalLink from "metabase/core/components/ExternalLink";
-import { color } from "metabase/lib/colors";
 import { Icon } from "metabase/ui";
 
 export const LinkRoot = styled(ExternalLink)`
@@ -15,7 +14,7 @@ export const LinkText = styled.div`
 `;
 
 export const LinkIcon = styled(Icon)`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   margin-left: 0.5rem;
   width: 0.75rem;
   height: 0.75rem;
diff --git a/frontend/src/metabase/admin/tasks/components/Logs/Logs.styled.tsx b/frontend/src/metabase/admin/tasks/components/Logs/Logs.styled.tsx
index d2d1327c185..b28f55c2778 100644
--- a/frontend/src/metabase/admin/tasks/components/Logs/Logs.styled.tsx
+++ b/frontend/src/metabase/admin/tasks/components/Logs/Logs.styled.tsx
@@ -54,7 +54,7 @@ export const LogsContent = styled.div`
 
   ${LOG_PREFIX}-inverse {
     color: var(--mb-color-text-dark);
-    background-color: ${color("white")};
+    background-color: var(--mb-color-bg-white);
   }
 
   ${LOG_PREFIX}-hidden {
diff --git a/frontend/src/metabase/admin/upsells/components/Upsells.styled.tsx b/frontend/src/metabase/admin/upsells/components/Upsells.styled.tsx
index dc8d9885eaa..0577d3f1d3b 100644
--- a/frontend/src/metabase/admin/upsells/components/Upsells.styled.tsx
+++ b/frontend/src/metabase/admin/upsells/components/Upsells.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import ExternalLink from "metabase/core/components/ExternalLink";
-import { color } from "metabase/lib/colors";
 
 /**
  * The upsell color palette is designed to function in harmony with the original Metabase set of Blues, Grays and Purples
@@ -30,7 +29,7 @@ export const UpsellPillComponent = styled(ExternalLink)`
 
   &:hover {
     background-color: ${upsellColors.primary};
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     border: 1px solid ${upsellColors.primary};
   }
 `;
@@ -54,7 +53,7 @@ export const UpsellCTALink = styled(ExternalLink)`
 
   &:hover {
     background-color: ${upsellColors.primary};
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
   }
 `;
 
@@ -64,5 +63,5 @@ export const UpsellCardComponent = styled.div`
   border-radius: 0.5rem;
   overflow: hidden;
   border: 1px solid ${upsellColors.secondary};
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
 `;
diff --git a/frontend/src/metabase/archive/components/ArchivedEntityBanner/ArchivedEntityBanner.tsx b/frontend/src/metabase/archive/components/ArchivedEntityBanner/ArchivedEntityBanner.tsx
index e4de77fd9bc..0322d1ba235 100644
--- a/frontend/src/metabase/archive/components/ArchivedEntityBanner/ArchivedEntityBanner.tsx
+++ b/frontend/src/metabase/archive/components/ArchivedEntityBanner/ArchivedEntityBanner.tsx
@@ -44,9 +44,9 @@ export const ArchivedEntityBanner = ({
               style={{ marginInlineEnd: "1rem" }}
               display={{ base: "none", sm: "block" }}
             >
-              <FixedSizeIcon color="white" name="trash_filled" />
+              <FixedSizeIcon color="text-white" name="trash_filled" />
             </Box>
-            <Text color="white" size="md" lh="1rem">
+            <Text color="text-white" size="md" lh="1rem">
               {c(
                 "{0} is the entity in the trash, e.g. collection, dashboard, etc.",
               ).t`This ${entityType} is in the trash.`}
diff --git a/frontend/src/metabase/archive/components/ArchivedEntityBanner/BannerButton.tsx b/frontend/src/metabase/archive/components/ArchivedEntityBanner/BannerButton.tsx
index 1752bcce0f4..61470ae912e 100644
--- a/frontend/src/metabase/archive/components/ArchivedEntityBanner/BannerButton.tsx
+++ b/frontend/src/metabase/archive/components/ArchivedEntityBanner/BannerButton.tsx
@@ -15,14 +15,14 @@ export const BannerButton = ({
   <Button
     compact
     variant="outline"
-    color="white"
+    color="text-white"
     miw="2rem"
     h="2rem"
     onClick={onClick}
   >
     <Flex align="center" gap="sm">
       <FixedSizeIcon size={12} name={iconName} />
-      <Text color="white" display={{ base: "none", sm: "inline" }}>
+      <Text color="text-white" display={{ base: "none", sm: "inline" }}>
         {children}
       </Text>
     </Flex>
diff --git a/frontend/src/metabase/auth/components/AuthButton/AuthButton.styled.tsx b/frontend/src/metabase/auth/components/AuthButton/AuthButton.styled.tsx
index d63497e77ad..73d5d0815b4 100644
--- a/frontend/src/metabase/auth/components/AuthButton/AuthButton.styled.tsx
+++ b/frontend/src/metabase/auth/components/AuthButton/AuthButton.styled.tsx
@@ -17,7 +17,7 @@ export const CardLink = styled(TextLink)`
   justify-content: center;
   align-items: center;
   padding: 1.25rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   box-shadow: 0 3px 10px var(--mb-color-shadow);
   border-radius: 6px;
 `;
diff --git a/frontend/src/metabase/auth/components/AuthLayout/AuthLayout.styled.tsx b/frontend/src/metabase/auth/components/AuthLayout/AuthLayout.styled.tsx
index 9b5b616d52f..8a47237525e 100644
--- a/frontend/src/metabase/auth/components/AuthLayout/AuthLayout.styled.tsx
+++ b/frontend/src/metabase/auth/components/AuthLayout/AuthLayout.styled.tsx
@@ -1,6 +1,6 @@
 import styled from "@emotion/styled";
 
-import { color, hueRotate } from "metabase/lib/colors";
+import { hueRotate } from "metabase/lib/colors";
 import { breakpointMinSmall } from "metabase/styled-components/theme";
 
 export const LayoutRoot = styled.div`
@@ -23,7 +23,7 @@ export const LayoutCard = styled.div`
   width: 100%;
   margin-top: 1.5rem;
   padding: 2.5rem 1.5rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   box-shadow: 0 1px 15px var(--mb-color-shadow);
   border-radius: 6px;
 
diff --git a/frontend/src/metabase/collections/components/PinnedQuestionCard/PinnedQuestionCard.styled.tsx b/frontend/src/metabase/collections/components/PinnedQuestionCard/PinnedQuestionCard.styled.tsx
index 66a543f4072..ae76a259e25 100644
--- a/frontend/src/metabase/collections/components/PinnedQuestionCard/PinnedQuestionCard.styled.tsx
+++ b/frontend/src/metabase/collections/components/PinnedQuestionCard/PinnedQuestionCard.styled.tsx
@@ -35,7 +35,7 @@ export const CardRoot = styled(Link)<CardRootProps>`
   padding: ${props => (props.isPreview ? "0" : "0.5rem 0")};
   border: 1px solid var(--mb-color-border);
   border-radius: 0.375rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
 
   &:hover {
     ${CardActionMenuContainer} {
diff --git a/frontend/src/metabase/common/components/EntityPicker/components/ResultItem/ResultItem.styled.tsx b/frontend/src/metabase/common/components/EntityPicker/components/ResultItem/ResultItem.styled.tsx
index 5e9aa036e94..6d17cdf26f3 100644
--- a/frontend/src/metabase/common/components/EntityPicker/components/ResultItem/ResultItem.styled.tsx
+++ b/frontend/src/metabase/common/components/EntityPicker/components/ResultItem/ResultItem.styled.tsx
@@ -11,10 +11,10 @@ export const ChunkyListItem = styled.button<{
   cursor: pointer;
 
   background-color: ${({ isSelected }) =>
-    isSelected ? "var(--mb-color-brand)" : color("white")};
+    isSelected ? color("brand") : color("bg-white")};
 
   color: ${({ isSelected }) =>
-    isSelected ? color("white") : color("text-dark")};
+    isSelected ? color("text-white") : color("text-dark")};
 
   &:hover {
     ${({ isSelected }) =>
diff --git a/frontend/src/metabase/common/components/EntityPicker/components/ResultItem/ResultItem.tsx b/frontend/src/metabase/common/components/EntityPicker/components/ResultItem/ResultItem.tsx
index c000d099bce..23e579c577e 100644
--- a/frontend/src/metabase/common/components/EntityPicker/components/ResultItem/ResultItem.tsx
+++ b/frontend/src/metabase/common/components/EntityPicker/components/ResultItem/ResultItem.tsx
@@ -50,7 +50,7 @@ export const ResultItem = ({
     >
       <Flex gap="md" miw="10rem" align="center" style={{ flex: 1 }}>
         <FixedSizeIcon
-          color={color(icon.color ?? (isSelected ? "white" : "brand"))}
+          color={color(icon.color ?? (isSelected ? "text-white" : "brand"))}
           name={icon.name}
           style={{
             flexShrink: 0,
@@ -74,7 +74,7 @@ export const ResultItem = ({
       {parentInfo && (
         <Flex
           style={{
-            color: isSelected ? color("white") : color("text-light"),
+            color: isSelected ? color("text-white") : color("text-light"),
             flexShrink: 0,
           }}
           align="center"
diff --git a/frontend/src/metabase/common/components/EntityPicker/utils.ts b/frontend/src/metabase/common/components/EntityPicker/utils.ts
index 4747f754567..bf519abd10a 100644
--- a/frontend/src/metabase/common/components/EntityPicker/utils.ts
+++ b/frontend/src/metabase/common/components/EntityPicker/utils.ts
@@ -16,7 +16,7 @@ export const getEntityPickerIcon = <Id, Model extends string>(
   }
 
   if (isSelected && !icon.color) {
-    icon.color = color("white");
+    icon.color = color("text-white");
   }
 
   if (icon.name === "folder" && isSelected) {
diff --git a/frontend/src/metabase/common/components/QueryColumnPicker/BucketPickerPopover/BaseBucketPickerPopover.styled.tsx b/frontend/src/metabase/common/components/QueryColumnPicker/BucketPickerPopover/BaseBucketPickerPopover.styled.tsx
index 7e4b63432eb..5a9a5c0bc87 100644
--- a/frontend/src/metabase/common/components/QueryColumnPicker/BucketPickerPopover/BaseBucketPickerPopover.styled.tsx
+++ b/frontend/src/metabase/common/components/QueryColumnPicker/BucketPickerPopover/BaseBucketPickerPopover.styled.tsx
@@ -7,7 +7,7 @@ import type { ColorName } from "metabase/lib/colors/types";
 import { Icon } from "metabase/ui";
 
 export const TriggerIcon = styled(Icon)`
-  color: ${color("white")} !important;
+  color: var(--mb-color-text-white) !important;
   flex: 0 0 auto;
 `;
 
@@ -26,7 +26,7 @@ export const TriggerButton = styled.button`
   max-width: 50%;
   gap: 0.5rem;
 
-  color: ${alpha(color("white"), 0.5)};
+  color: ${() => alpha(color("text-white"), 0.5)};
   font-weight: 700;
   border-left: 2px solid ${() => alpha(color("border"), 0.1)};
   padding: 0.5rem;
@@ -38,7 +38,7 @@ export const TriggerButton = styled.button`
   }
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
   }
 `;
 
diff --git a/frontend/src/metabase/components/BulkActionBar/BulkActionBar.styled.tsx b/frontend/src/metabase/components/BulkActionBar/BulkActionBar.styled.tsx
index 78d6663b373..d505aa58644 100644
--- a/frontend/src/metabase/components/BulkActionBar/BulkActionBar.styled.tsx
+++ b/frontend/src/metabase/components/BulkActionBar/BulkActionBar.styled.tsx
@@ -20,7 +20,7 @@ export const BulkActionsToast = styled.div<{ isNavbarOpen: boolean }>`
 `;
 
 export const ToastCard = styled(Card)`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
 
   padding: 0.75rem ${space(2)};
   display: flex;
@@ -30,21 +30,20 @@ export const ToastCard = styled(Card)`
 `;
 
 export const BulkActionButton = styled(Button)`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
+
+  border-color: ${() => alpha(color("bg-white"), 0)};
+  background-color: ${() => alpha(color("bg-white"), 0.1)};
 
-  border-color: ${({ theme }) => alpha(theme.fn.themeColor("bg-white"), 0)};
-  background-color: ${({ theme }) =>
-    alpha(theme.fn.themeColor("bg-white"), 0.1)};
   :hover {
-    color: ${color("white")};
-    border-color: ${({ theme }) => alpha(theme.fn.themeColor("bg-white"), 0)};
-    background-color: ${({ theme }) =>
-      alpha(theme.fn.themeColor("bg-white"), 0.3)};
+    color: var(--mb-color-text-white);
+    border-color: ${() => alpha(color("bg-white"), 0)};
+    background-color: ${() => alpha(color("bg-white"), 0.3)};
   }
+
   :disabled {
-    border-color: ${({ theme }) => alpha(theme.fn.themeColor("bg-white"), 0)};
-    background-color: ${({ theme }) =>
-      alpha(theme.fn.themeColor("bg-white"), 0.1)};
+    border-color: ${() => alpha(color("bg-white"), 0)};
+    background-color: ${() => alpha(color("bg-white"), 0.1)};
   }
 ` as unknown as typeof Button;
 
@@ -52,7 +51,7 @@ export const BulkActionDangerButton = styled(BulkActionButton)`
   color: var(--mb-color-danger);
 
   :hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-bg-error);
   }
 ` as unknown as typeof Button;
diff --git a/frontend/src/metabase/components/BulkActionBar/BulkActionBar.tsx b/frontend/src/metabase/components/BulkActionBar/BulkActionBar.tsx
index 227ca6fd993..326da1719e5 100644
--- a/frontend/src/metabase/components/BulkActionBar/BulkActionBar.tsx
+++ b/frontend/src/metabase/components/BulkActionBar/BulkActionBar.tsx
@@ -44,7 +44,7 @@ export const BulkActionBar = ({
       {styles => (
         <BulkActionsToast style={styles} isNavbarOpen={isNavbarOpen}>
           <ToastCard dark data-testid="toast-card">
-            {message && <Text color="white">{message}</Text>}
+            {message && <Text color="text-white">{message}</Text>}
             <Flex gap="sm" align="center">
               {children}
             </Flex>
diff --git a/frontend/src/metabase/components/Calendar/Calendar.styled.tsx b/frontend/src/metabase/components/Calendar/Calendar.styled.tsx
index 7f78e086c80..f46716a173d 100644
--- a/frontend/src/metabase/components/Calendar/Calendar.styled.tsx
+++ b/frontend/src/metabase/components/Calendar/Calendar.styled.tsx
@@ -35,7 +35,7 @@ export const CalendarDay = styled.div<CalendarDayProps>`
   ${({ primaryColor, isSelectedStart, isSelectedEnd }) =>
     (isSelectedStart || isSelectedEnd) &&
     css`
-      color: ${color("white")} !important;
+      color: var(--mb-color-text-white) !important;
       background-color: ${primaryColor};
       z-index: 1;
     `}
diff --git a/frontend/src/metabase/components/Card/Card.tsx b/frontend/src/metabase/components/Card/Card.tsx
index 2f5c29e6e3b..435ec21f3ce 100644
--- a/frontend/src/metabase/components/Card/Card.tsx
+++ b/frontend/src/metabase/components/Card/Card.tsx
@@ -12,7 +12,8 @@ type CardProps = {
 };
 
 const Card = styled.div<CardProps>`
-  background-color: ${props => (props.dark ? color("text-dark") : "white")};
+  background-color: ${props =>
+    props.dark ? color("text-dark") : color("bg-white")};
   border: 1px solid
     ${props => (props.dark ? "transparent" : "var(--mb-color-bg-medium)")};
   ${props => props.dark && `color: white`};
diff --git a/frontend/src/metabase/components/CollectionItem/CollectionItem.styled.tsx b/frontend/src/metabase/components/CollectionItem/CollectionItem.styled.tsx
index deb46dd0878..1787a1e45a4 100644
--- a/frontend/src/metabase/components/CollectionItem/CollectionItem.styled.tsx
+++ b/frontend/src/metabase/components/CollectionItem/CollectionItem.styled.tsx
@@ -36,5 +36,5 @@ export const CardContent = styled.div`
 `;
 
 export const CollectionIcon = styled(Icon)`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
 `;
diff --git a/frontend/src/metabase/components/CopyButton/CopyButton.tsx b/frontend/src/metabase/components/CopyButton/CopyButton.tsx
index f6681720de7..1b09bd5d359 100644
--- a/frontend/src/metabase/components/CopyButton/CopyButton.tsx
+++ b/frontend/src/metabase/components/CopyButton/CopyButton.tsx
@@ -29,7 +29,7 @@ export const CopyButton = ({
     <CopyToClipboard text={value} onCopy={onCopyValue}>
       <div className={className} style={style} data-testid="copy-button">
         <Tooltip
-          label={<Text fw={700} c="white">{t`Copied!`}</Text>}
+          label={<Text fw={700} c="text-white">{t`Copied!`}</Text>}
           opened={copied}
         >
           <Icon name="copy" />
diff --git a/frontend/src/metabase/components/CopyTextInput/CopyTextInput.styled.tsx b/frontend/src/metabase/components/CopyTextInput/CopyTextInput.styled.tsx
index 6479489790f..d0b91b08272 100644
--- a/frontend/src/metabase/components/CopyTextInput/CopyTextInput.styled.tsx
+++ b/frontend/src/metabase/components/CopyTextInput/CopyTextInput.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import { CopyButton } from "metabase/components/CopyButton";
-import { color } from "metabase/lib/colors";
 
 export const CopyWidgetButton = styled(CopyButton)`
   position: absolute;
@@ -19,7 +18,7 @@ export const CopyWidgetButton = styled(CopyButton)`
   cursor: pointer;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 `;
diff --git a/frontend/src/metabase/components/CopyWidget/CopyWidget.styled.tsx b/frontend/src/metabase/components/CopyWidget/CopyWidget.styled.tsx
index 54796da7f69..cdc57b97dd1 100644
--- a/frontend/src/metabase/components/CopyWidget/CopyWidget.styled.tsx
+++ b/frontend/src/metabase/components/CopyWidget/CopyWidget.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import { CopyButton } from "metabase/components/CopyButton";
-import { color } from "metabase/lib/colors";
 
 export const CopyWidgetButton = styled(CopyButton)`
   position: absolute;
@@ -18,7 +17,7 @@ export const CopyWidgetButton = styled(CopyButton)`
   outline: none;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 `;
diff --git a/frontend/src/metabase/components/DateMonthYearWidget/DateMonthYearWidget.styled.tsx b/frontend/src/metabase/components/DateMonthYearWidget/DateMonthYearWidget.styled.tsx
index 3893ef478ac..f47511490e1 100644
--- a/frontend/src/metabase/components/DateMonthYearWidget/DateMonthYearWidget.styled.tsx
+++ b/frontend/src/metabase/components/DateMonthYearWidget/DateMonthYearWidget.styled.tsx
@@ -28,8 +28,8 @@ export const MonthRoot = styled.div<MonthRootProps>`
   margin: 0.5rem 0;
   padding: 0.5rem 1rem;
   border-radius: 99px;
-  color: ${props => props.isSelected && color("white")};
-  background-color: ${props => props.isSelected && "var(--mb-color-brand)"};
+  color: ${props => props.isSelected && color("text-white")};
+  background-color: ${props => props.isSelected && color("brand")};
 
   &:hover {
     background-color: ${props =>
diff --git a/frontend/src/metabase/components/DateQuarterYearWidget/DateQuarterYearWidget.styled.tsx b/frontend/src/metabase/components/DateQuarterYearWidget/DateQuarterYearWidget.styled.tsx
index 627395357b4..f676d138d20 100644
--- a/frontend/src/metabase/components/DateQuarterYearWidget/DateQuarterYearWidget.styled.tsx
+++ b/frontend/src/metabase/components/DateQuarterYearWidget/DateQuarterYearWidget.styled.tsx
@@ -1,8 +1,6 @@
 import { css } from "@emotion/react";
 import styled from "@emotion/styled";
 
-import { color } from "metabase/lib/colors";
-
 export interface QuarterRootProps {
   isSelected: boolean;
 }
@@ -16,14 +14,14 @@ export const QuarterRoot = styled.li<QuarterRootProps>`
   cursor: pointer;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 
   ${({ isSelected }) =>
     isSelected &&
     css`
-      color: ${color("white")};
+      color: var(--mb-color-text-white);
       background-color: var(--mb-color-brand);
     `}
 `;
diff --git a/frontend/src/metabase/components/EditBar/EditBar.styled.tsx b/frontend/src/metabase/components/EditBar/EditBar.styled.tsx
index 9cff96b41cb..903904bba27 100644
--- a/frontend/src/metabase/components/EditBar/EditBar.styled.tsx
+++ b/frontend/src/metabase/components/EditBar/EditBar.styled.tsx
@@ -18,9 +18,8 @@ export const Root = styled(FullWidthContainer)<{ admin: boolean }>`
     alpha(color(props.admin ? "accent7" : "brand"), 0.85)};
 
   .${ButtonsS.Button} {
-    color: ${color("text-white")};
-    background-color: ${({ theme }) =>
-      alpha(theme.fn.themeColor("bg-white"), 0.1)};
+    color: var(--mb-color-text-white);
+    background-color: ${() => alpha(color("bg-white"), 0.1)};
 
     border: none;
     font-size: 1em;
@@ -33,23 +32,23 @@ export const Root = styled(FullWidthContainer)<{ admin: boolean }>`
   }
 
   .${ButtonsS.Button}:hover {
-    color: ${color("text-white")};
+    color: var(--mb-color-text-white);
     background-color: ${props => color(props.admin ? "accent7" : "brand")};
   }
 `;
 
 export const EditIcon = styled(Icon)`
-  color: ${color("text-white")};
+  color: var(--mb-color-text-white);
   margin-right: 0.5rem;
 `;
 
 export const Title = styled.span`
-  color: ${color("text-white")};
+  color: var(--mb-color-text-white);
   font-weight: 700;
 `;
 
 export const Subtitle = styled.span`
-  color: ${alpha(color("text-white"), 0.5)};
+  color: ${() => alpha(color("text-white"), 0.5)};
   margin-left: 0.5rem;
   margin-right: 0.5rem;
 `;
diff --git a/frontend/src/metabase/components/HelpCard/HelpCard.styled.tsx b/frontend/src/metabase/components/HelpCard/HelpCard.styled.tsx
index b996b08e701..280d862a677 100644
--- a/frontend/src/metabase/components/HelpCard/HelpCard.styled.tsx
+++ b/frontend/src/metabase/components/HelpCard/HelpCard.styled.tsx
@@ -10,7 +10,7 @@ const CardRootMixin = css`
   padding: 1.5rem;
   border: 1px solid var(--mb-color-border);
   border-radius: 0.375rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   box-shadow: 0 1px 6px var(--mb-color-shadow);
   box-sizing: border-box;
 `;
diff --git a/frontend/src/metabase/components/ItemsTable/BaseItemsTable.styled.tsx b/frontend/src/metabase/components/ItemsTable/BaseItemsTable.styled.tsx
index 76da38d9b12..16a302ddb99 100644
--- a/frontend/src/metabase/components/ItemsTable/BaseItemsTable.styled.tsx
+++ b/frontend/src/metabase/components/ItemsTable/BaseItemsTable.styled.tsx
@@ -13,7 +13,7 @@ import type { ResponsiveProps } from "./utils";
 import { getContainerQuery } from "./utils";
 
 export const Table = styled.table<{ isInDragLayer?: boolean }>`
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   table-layout: fixed;
   border-collapse: unset;
   border-radius: 0.5rem;
diff --git a/frontend/src/metabase/components/MetadataInfo/MetadataInfo.styled.tsx b/frontend/src/metabase/components/MetadataInfo/MetadataInfo.styled.tsx
index c4c2aa08d28..6833ae5eb70 100644
--- a/frontend/src/metabase/components/MetadataInfo/MetadataInfo.styled.tsx
+++ b/frontend/src/metabase/components/MetadataInfo/MetadataInfo.styled.tsx
@@ -64,7 +64,7 @@ export const RelativeSizeIcon = styled(Icon)`
 
 export const InvertedColorRelativeSizeIcon = styled(RelativeSizeIcon)`
   background-color: var(--mb-color-brand);
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   border-radius: 0.3em;
   padding: 0.3em;
 `;
diff --git a/frontend/src/metabase/components/ModalContent/ModalContent.stories.tsx b/frontend/src/metabase/components/ModalContent/ModalContent.stories.tsx
index 78a070c9758..f03e257be8c 100644
--- a/frontend/src/metabase/components/ModalContent/ModalContent.stories.tsx
+++ b/frontend/src/metabase/components/ModalContent/ModalContent.stories.tsx
@@ -29,7 +29,7 @@ const Template: ComponentStory<typeof ModalContent> = args => {
     <div
       style={{
         width: 1200,
-        background: color("white"),
+        background: color("bg-white"),
         border: "1px solid black",
       }}
     >
diff --git a/frontend/src/metabase/components/SelectList/SelectListItem.styled.tsx b/frontend/src/metabase/components/SelectList/SelectListItem.styled.tsx
index cad6b5e947c..05474cb9eb8 100644
--- a/frontend/src/metabase/components/SelectList/SelectListItem.styled.tsx
+++ b/frontend/src/metabase/components/SelectList/SelectListItem.styled.tsx
@@ -20,7 +20,7 @@ const activeItemCss = css`
 
   ${ItemIcon},
   ${ItemTitle} {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
   }
 `;
 
diff --git a/frontend/src/metabase/components/SingleSelectListField/SingleSelectListField.styled.tsx b/frontend/src/metabase/components/SingleSelectListField/SingleSelectListField.styled.tsx
index 7aefe00d1c3..8f04b89ef25 100644
--- a/frontend/src/metabase/components/SingleSelectListField/SingleSelectListField.styled.tsx
+++ b/frontend/src/metabase/components/SingleSelectListField/SingleSelectListField.styled.tsx
@@ -42,8 +42,8 @@ export const OptionItem = styled.div<OptionItemProps>`
   padding: 0.5rem 0.6rem;
   width: 100%;
   background-color: ${props =>
-    color(props.selected ? props.selectedColor : color("white"))};
-  color: ${props => color(props.selected ? "white" : color("text"))};
+    color(props.selected ? props.selectedColor : color("bg-white"))};
+  color: ${props => color(props.selected ? "text-white" : color("text"))};
 
   &:hover {
     background-color: ${props =>
diff --git a/frontend/src/metabase/components/Toaster/Toaster.styled.tsx b/frontend/src/metabase/components/Toaster/Toaster.styled.tsx
index 9db13557f13..cdfff06c111 100644
--- a/frontend/src/metabase/components/Toaster/Toaster.styled.tsx
+++ b/frontend/src/metabase/components/Toaster/Toaster.styled.tsx
@@ -30,7 +30,7 @@ export const ToasterContainer = styled.div<ToasterContainerProps>`
 `;
 
 export const ToasterMessage = styled.p`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   width: 250px;
   line-height: 24px;
   font-size: 14px;
@@ -40,10 +40,9 @@ export const ToasterMessage = styled.p`
 export const ToasterButton = styled.button`
   display: flex;
   padding: 7px 18px;
-  background-color: ${({ theme }) =>
-    alpha(theme.fn.themeColor("bg-white"), 0.1)};
+  background-color: ${() => alpha(color("bg-white"), 0.1)};
   border-radius: 6px;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   width: 90px;
   height: fit-content;
   font-size: 14px;
@@ -52,8 +51,7 @@ export const ToasterButton = styled.button`
 
   &:hover {
     cursor: pointer;
-    background-color: ${({ theme }) =>
-      alpha(theme.fn.themeColor("bg-white"), 0.3)};
+    background-color: ${() => alpha(color("bg-white"), 0.3)};
   }
 `;
 
diff --git a/frontend/src/metabase/components/TokenField/TokenField.styled.tsx b/frontend/src/metabase/components/TokenField/TokenField.styled.tsx
index 8d626210b1a..0f46a59eb52 100644
--- a/frontend/src/metabase/components/TokenField/TokenField.styled.tsx
+++ b/frontend/src/metabase/components/TokenField/TokenField.styled.tsx
@@ -13,7 +13,7 @@ export const TokenFieldContainer = styled.ul`
 
   max-height: 130px;
 
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   overflow-x: auto;
   overflow-y: auto;
   border-radius: ${space(1)};
diff --git a/frontend/src/metabase/components/UserAvatar/UserAvatar.styled.tsx b/frontend/src/metabase/components/UserAvatar/UserAvatar.styled.tsx
index de03761eb25..5921b87ad41 100644
--- a/frontend/src/metabase/components/UserAvatar/UserAvatar.styled.tsx
+++ b/frontend/src/metabase/components/UserAvatar/UserAvatar.styled.tsx
@@ -1,6 +1,6 @@
 import styled from "@emotion/styled";
 
-import { color as brandColor, color } from "metabase/lib/colors";
+import { color } from "metabase/lib/colors";
 
 export interface AvatarProps {
   color?: string;
@@ -10,7 +10,7 @@ export interface AvatarProps {
 }
 
 export const Avatar = styled.div<AvatarProps>`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   width: 3em;
   height: 3em;
   display: flex;
@@ -19,6 +19,6 @@ export const Avatar = styled.div<AvatarProps>`
   border-radius: 999px;
   font-weight: 900;
   line-height: 1;
-  background-color: ${({ bg = brandColor("brand") }) => bg};
+  background-color: ${({ bg = color("brand") }) => bg};
   flex-shrink: 0;
 `;
diff --git a/frontend/src/metabase/components/UserPicker/UserPicker.styled.tsx b/frontend/src/metabase/components/UserPicker/UserPicker.styled.tsx
index 0a7e01fa412..d4d35d4ff74 100644
--- a/frontend/src/metabase/components/UserPicker/UserPicker.styled.tsx
+++ b/frontend/src/metabase/components/UserPicker/UserPicker.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import UserAvatar from "metabase/components/UserAvatar";
-import { color } from "metabase/lib/colors";
 import { space } from "metabase/styled-components/theme";
 
 export const UserPickerRoot = styled.div`
@@ -16,7 +15,7 @@ export const UserPickerOption = styled.div`
 `;
 
 export const UserPickerAvatar = styled(UserAvatar)`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
 `;
 
 export const UserPickerText = styled.div`
diff --git a/frontend/src/metabase/components/icons/CountdownIcon.styled.tsx b/frontend/src/metabase/components/icons/CountdownIcon.styled.tsx
index 87c6232c80b..50fd3dcbfcf 100644
--- a/frontend/src/metabase/components/icons/CountdownIcon.styled.tsx
+++ b/frontend/src/metabase/components/icons/CountdownIcon.styled.tsx
@@ -1,7 +1,5 @@
 import styled from "@emotion/styled";
 
-import { color } from "metabase/lib/colors";
-
 export const IconRoot = styled.svg`
-  color: ${color("summarize")};
+  color: var(--mb-color-summarize);
 `;
diff --git a/frontend/src/metabase/components/tree/TreeNode.styled.tsx b/frontend/src/metabase/components/tree/TreeNode.styled.tsx
index ef27b604f84..9e244e3301b 100644
--- a/frontend/src/metabase/components/tree/TreeNode.styled.tsx
+++ b/frontend/src/metabase/components/tree/TreeNode.styled.tsx
@@ -13,7 +13,7 @@ interface TreeNodeRootProps {
 export const TreeNodeRoot = styled.li<TreeNodeRootProps>`
   display: flex;
   align-items: center;
-  color: ${props => (props.isSelected ? color("white") : color("brand"))};
+  color: ${props => (props.isSelected ? color("text-white") : color("brand"))};
   background-color: ${props => (props.isSelected ? color("brand") : "unset")};
   padding-left: ${props => props.depth + 0.5}rem;
   padding-right: 0.5rem;
diff --git a/frontend/src/metabase/containers/UndoListing.jsx b/frontend/src/metabase/containers/UndoListing.jsx
index 17427367ba8..72d4a704a6c 100644
--- a/frontend/src/metabase/containers/UndoListing.jsx
+++ b/frontend/src/metabase/containers/UndoListing.jsx
@@ -83,7 +83,7 @@ function UndoToast({ undo, onUndo, onDismiss }) {
         >
           <CardContent>
             <CardContentSide maw="75ch">
-              {undo.icon && <CardIcon name={undo.icon} color="white" />}
+              {undo.icon && <CardIcon name={undo.icon} color="text-white" />}
               <Ellipsified showTooltip={false}>
                 {renderMessage(undo)}
               </Ellipsified>
diff --git a/frontend/src/metabase/containers/UndoListing.styled.tsx b/frontend/src/metabase/containers/UndoListing.styled.tsx
index 3518e5751f0..19ad30d9e20 100644
--- a/frontend/src/metabase/containers/UndoListing.styled.tsx
+++ b/frontend/src/metabase/containers/UndoListing.styled.tsx
@@ -59,15 +59,13 @@ export const DefaultText = styled.span`
 
 export const UndoButton = styled(Link)`
   font-weight: bold;
-  background-color: ${({ theme }) =>
-    alpha(theme.fn.themeColor("bg-white"), 0.1)};
+  background-color: ${() => alpha(color("bg-white"), 0.1)};
   padding: 4px 12px;
   margin-left: ${space(1)};
   border-radius: 8px;
 
   :hover {
-    background-color: ${({ theme }) =>
-      alpha(theme.fn.themeColor("bg-white"), 0.3)};
+    background-color: ${() => alpha(color("bg-white"), 0.3)};
   }
 `;
 
diff --git a/frontend/src/metabase/containers/Unsubscribe.styled.tsx b/frontend/src/metabase/containers/Unsubscribe.styled.tsx
index 81d0570cf4e..1ad74c9b41e 100644
--- a/frontend/src/metabase/containers/Unsubscribe.styled.tsx
+++ b/frontend/src/metabase/containers/Unsubscribe.styled.tsx
@@ -44,7 +44,7 @@ export const LayoutCard = styled.div`
   width: 100%;
   margin-top: 1.5rem;
   padding: 2.5rem 1.5rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   box-shadow: 0 1px 15px var(--mb-color-shadow);
   border-radius: 6px;
   min-height: 20rem;
diff --git a/frontend/src/metabase/core/components/Button/Button.styled.tsx b/frontend/src/metabase/core/components/Button/Button.styled.tsx
index d085a9fc7e6..ac4c4e7129f 100644
--- a/frontend/src/metabase/core/components/Button/Button.styled.tsx
+++ b/frontend/src/metabase/core/components/Button/Button.styled.tsx
@@ -1,7 +1,7 @@
 import { css } from "@emotion/react";
 import styled from "@emotion/styled";
 
-import { alpha, color } from "metabase/lib/colors";
+import { alpha } from "metabase/lib/colors";
 
 export interface ButtonRootProps {
   purple?: boolean;
@@ -22,12 +22,12 @@ export const ButtonRoot = styled.button<ButtonRootProps>`
   ${({ purple, theme }) =>
     purple &&
     css`
-      color: ${color("white")};
+      color: var(--mb-color-text-white);
       background-color: var(--mb-color-filter);
       border: 1px solid var(--mb-color-filter);
 
       &:hover {
-        color: ${color("white")};
+        color: var(--mb-color-text-white);
         background-color: ${alpha(theme.fn.themeColor("filter"), 0.88)};
         border-color: ${alpha(theme.fn.themeColor("filter"), 0.88)};
       }
diff --git a/frontend/src/metabase/core/components/ColorPicker/ColorPicker.styled.tsx b/frontend/src/metabase/core/components/ColorPicker/ColorPicker.styled.tsx
index cd44cab0b51..6ba82ad66bc 100644
--- a/frontend/src/metabase/core/components/ColorPicker/ColorPicker.styled.tsx
+++ b/frontend/src/metabase/core/components/ColorPicker/ColorPicker.styled.tsx
@@ -1,7 +1,5 @@
 import styled from "@emotion/styled";
 
-import { color } from "metabase/lib/colors";
-
 export const TriggerContainer = styled.div`
   display: flex;
   align-items: center;
@@ -59,7 +57,7 @@ export const HueContainer = styled.div`
 `;
 
 export const ControlsPointer = styled.div`
-  border: 2px solid ${color("white")};
+  border: 2px solid var(--mb-color-bg-white);
   border-radius: 50%;
   pointer-events: none;
 `;
diff --git a/frontend/src/metabase/core/components/Markdown/Markdown.styled.tsx b/frontend/src/metabase/core/components/Markdown/Markdown.styled.tsx
index fe25f6ca616..4aaed46bca9 100644
--- a/frontend/src/metabase/core/components/Markdown/Markdown.styled.tsx
+++ b/frontend/src/metabase/core/components/Markdown/Markdown.styled.tsx
@@ -31,7 +31,8 @@ export const MarkdownRoot = styled(getComponent(ReactMarkdown))<MarkdownProps>`
   a {
     cursor: pointer;
     text-decoration: none;
-    color: ${props => (props.unstyleLinks ? color("white") : color("brand"))};
+    color: ${props =>
+      props.unstyleLinks ? color("text-white") : color("brand")};
   }
 
   a:hover {
diff --git a/frontend/src/metabase/core/components/Radio/Radio.styled.tsx b/frontend/src/metabase/core/components/Radio/Radio.styled.tsx
index 16c7169f642..2355c6dba8c 100644
--- a/frontend/src/metabase/core/components/Radio/Radio.styled.tsx
+++ b/frontend/src/metabase/core/components/Radio/Radio.styled.tsx
@@ -98,7 +98,9 @@ export const RadioContainerBubble = styled(RadioContainer)`
   border-radius: 10rem;
   font-weight: bold;
   color: ${props =>
-    props.checked ? color("white") : getContrastSchemeColor(props.colorScheme)};
+    props.checked
+      ? color("text-white")
+      : getContrastSchemeColor(props.colorScheme)};
   background-color: ${props =>
     props.checked
       ? getSchemeColor(props.colorScheme)
diff --git a/frontend/src/metabase/core/components/SelectButton/SelectButton.styled.tsx b/frontend/src/metabase/core/components/SelectButton/SelectButton.styled.tsx
index 29d24289a85..5b17a1f87aa 100644
--- a/frontend/src/metabase/core/components/SelectButton/SelectButton.styled.tsx
+++ b/frontend/src/metabase/core/components/SelectButton/SelectButton.styled.tsx
@@ -29,7 +29,7 @@ export const SelectButtonRoot = styled.button<SelectButtonRootProps>`
     ${({ hasValue, highlighted }) =>
       hasValue && highlighted ? color("brand") : color("border")};
   background-color: ${({ hasValue, highlighted }) =>
-    hasValue && highlighted ? color("brand") : color("white")};
+    hasValue && highlighted ? color("brand") : color("bg-white")};
   border-radius: ${space(1)};
   font-weight: 700;
   min-width: 104px;
diff --git a/frontend/src/metabase/core/components/Slider/Slider.styled.tsx b/frontend/src/metabase/core/components/Slider/Slider.styled.tsx
index 6e0f17e8e74..815a6130f35 100644
--- a/frontend/src/metabase/core/components/Slider/Slider.styled.tsx
+++ b/frontend/src/metabase/core/components/Slider/Slider.styled.tsx
@@ -1,7 +1,7 @@
 import { css } from "@emotion/react";
 import styled from "@emotion/styled";
 
-import { color, alpha } from "metabase/lib/colors";
+import { alpha } from "metabase/lib/colors";
 import { space } from "metabase/styled-components/theme";
 
 export const THUMB_SIZE = "1.2rem";
@@ -24,7 +24,7 @@ const thumbStyles = `
   border-radius: 50%;
   border: 2px solid var(--mb-color-brand);
   box-sizing: border-box;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   cursor: pointer;
   box-shadow: 0 0 2px 1px var(--mb-color-brand);
   pointer-events: all;
@@ -81,7 +81,7 @@ export const SliderTooltip = styled.div`
   text-align: center;
   padding: ${space(0.5)} ${space(1)};
   background: var(--mb-color-bg-black);
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   display: block;
   border-radius: ${space(1)};
   opacity: 0;
diff --git a/frontend/src/metabase/core/components/TabRow/TabRow.styled.tsx b/frontend/src/metabase/core/components/TabRow/TabRow.styled.tsx
index e162942cf1f..5b8846549a1 100644
--- a/frontend/src/metabase/core/components/TabRow/TabRow.styled.tsx
+++ b/frontend/src/metabase/core/components/TabRow/TabRow.styled.tsx
@@ -43,7 +43,6 @@ export const ScrollButton = styled.button<ScrollButtonProps>`
   position: absolute;
   cursor: pointer;
   height: 100%;
-  height: 100%;
   width: 3rem;
   padding-bottom: ${space(2)};
   text-align: ${props => props.direction};
@@ -54,9 +53,9 @@ export const ScrollButton = styled.button<ScrollButtonProps>`
   ${props => props.direction}: 0;
   background: linear-gradient(
     to ${props => props.direction},
-    ${alpha("white", 0.1)},
-    ${alpha("white", 0.5)},
+    ${() => alpha("bg-white", 0.1)},
+    ${() => alpha("bg-white", 0.5)},
     30%,
-    ${color("white")}
+    var(--mb-color-bg-white)
   );
 `;
diff --git a/frontend/src/metabase/core/components/Toggle/Toggle.styled.tsx b/frontend/src/metabase/core/components/Toggle/Toggle.styled.tsx
index de316de6178..a38f8410e20 100644
--- a/frontend/src/metabase/core/components/Toggle/Toggle.styled.tsx
+++ b/frontend/src/metabase/core/components/Toggle/Toggle.styled.tsx
@@ -59,7 +59,7 @@ export const ToggleRoot = styled.input<ToggleRootProps>`
     position: absolute;
     top: 1px;
     transform: translateX(${getTranslateX});
-    background-color: ${color("white")};
+    background-color: var(--mb-color-bg-white);
     transition: transform 0.3s;
     box-shadow: 2px 2px 6px var(--mb-color-shadow);
   }
diff --git a/frontend/src/metabase/css/components/buttons.module.css b/frontend/src/metabase/css/components/buttons.module.css
index 04fd19c814f..6226dfe721a 100644
--- a/frontend/src/metabase/css/components/buttons.module.css
+++ b/frontend/src/metabase/css/components/buttons.module.css
@@ -61,25 +61,25 @@
 }
 
 .ButtonPrimary {
-  color: var(--color-text-white);
+  color: var(--mb-color-text-white);
   background: var(--mb-color-brand);
   border: 1px solid var(--mb-color-brand);
 }
 
 .ButtonPrimary:hover {
-  color: var(--color-text-white);
+  color: var(--mb-color-text-white);
   border-color: var(--mb-color-brand);
   background-color: var(--mb-color-brand-alpha-88);
 }
 
 .ButtonWarning {
-  color: var(--color-text-white);
+  color: var(--mb-color-text-white);
   background: var(--mb-color-error);
   border: 1px solid var(--mb-color-error);
 }
 
 .ButtonWarning:hover {
-  color: var(--color-text-white);
+  color: var(--mb-color-text-white);
   border-color: var(--mb-color-error);
   background-color: var(--mb-color-error);
 }
@@ -131,8 +131,8 @@
 }
 
 .ButtonGroup .ButtonActive {
-  background-color: var(--color-success);
-  color: var(--color-text-white);
+  background-color: var(--mb-color-success);
+  color: var(--mb-color-text-white);
 }
 
 .ButtonGroup .Button:first-child {
@@ -162,7 +162,7 @@
 .ButtonDanger {
   background-color: var(--mb-color-error);
   border-color: var(--mb-color-error);
-  color: var(--color-text-white);
+  color: var(--mb-color-text-white);
 }
 
 .ButtonDanger:hover {
@@ -172,15 +172,15 @@
 }
 
 .ButtonSuccess {
-  background-color: var(--color-success);
-  border-color: var(--color-success);
-  color: var(--color-text-white);
+  background-color: var(--mb-color-success);
+  border-color: var(--mb-color-success);
+  color: var(--mb-color-text-white);
 }
 
 .ButtonSuccess:hover {
-  background-color: var(--color-success);
-  border-color: var(--color-success);
-  color: var(--color-text-white);
+  background-color: var(--mb-color-success);
+  border-color: var(--mb-color-success);
+  color: var(--mb-color-text-white);
 }
 
 .ButtonFullWidth {
diff --git a/frontend/src/metabase/css/core/bordered.module.css b/frontend/src/metabase/css/core/bordered.module.css
index e2bcf3440e9..12a360e5dc0 100644
--- a/frontend/src/metabase/css/core/bordered.module.css
+++ b/frontend/src/metabase/css/core/bordered.module.css
@@ -52,7 +52,7 @@
 }
 
 .borderSuccess {
-  border-color: var(--color-success) !important;
+  border-color: var(--mb-color-success) !important;
 }
 
 .borderBrand {
diff --git a/frontend/src/metabase/css/core/colors.module.css b/frontend/src/metabase/css/core/colors.module.css
index 42f5b7974af..7198220d9ad 100644
--- a/frontend/src/metabase/css/core/colors.module.css
+++ b/frontend/src/metabase/css/core/colors.module.css
@@ -6,18 +6,17 @@
  * .storybook/preview-head.html
  */
 :root {
-  --color-white: #fff;
+  --mb-color-text-white: #fff;
   --mb-color-brand: #509ee3;
   --mb-color-brand-light: #f9fbfc;
   --mb-color-brand-lighter: #eef6fc;
-  --color-success: #84bb4c;
+  --mb-color-success: #84bb4c;
   --mb-color-summarize: #88bf4d;
   --mb-color-error: #ed6e6e;
   --mb-color-danger: #ed6e6e;
   --mb-color-text-dark: #4c5773;
   --mb-color-text-medium: #696e7b;
   --mb-color-text-light: #949aab;
-  --color-text-white: #fff;
   --mb-color-bg-black: #2e353b;
   --mb-color-bg-dark: #93a1ab;
   --mb-color-bg-medium: #edf2f5;
@@ -29,6 +28,7 @@
   --mb-color-border: #eeecec;
   --mb-color-filter: #7172ad;
   --mb-color-focus: #cbe2f7;
+  --mb-color-warning: #f9cf48;
 }
 
 .textDefault {
@@ -40,7 +40,7 @@
 }
 
 .textSuccess {
-  color: var(--color-success);
+  color: var(--mb-color-success);
 }
 
 /* error */
@@ -92,7 +92,7 @@
 /* white  - move to bottom for specificity since its often used on hovers, etc */
 .textWhite,
 .textWhiteHover:hover {
-  color: var(--color-text-white);
+  color: var(--mb-color-text-white);
 }
 
 .bgWhite {
diff --git a/frontend/src/metabase/css/dashboard.module.css b/frontend/src/metabase/css/dashboard.module.css
index 75a991164d9..4f9d6c06aec 100644
--- a/frontend/src/metabase/css/dashboard.module.css
+++ b/frontend/src/metabase/css/dashboard.module.css
@@ -10,7 +10,7 @@
 }
 
 .Dashboard.DashboardNight .Card {
-  color: var(--color-text-white);
+  color: var(--mb-color-text-white);
 }
 
 .Dashboard.DashboardFullscreen .fullscreenNormalText {
@@ -19,12 +19,12 @@
 }
 
 .Dashboard.DashboardNight.DashboardFullscreen .fullscreenNightText {
-  color: color-mod(var(--color-text-white) alpha(-14%));
+  color: color-mod(var(--mb-color-text-white) alpha(-14%));
   transition: color 1s linear;
 }
 
 .Dashboard.DashboardNight .DashCard .Card svg text {
-  fill: color-mod(var(--color-text-white) alpha(-14%)) !important;
+  fill: color-mod(var(--mb-color-text-white) alpha(-14%)) !important;
   stroke: none !important;
 }
 
diff --git a/frontend/src/metabase/css/query_builder.module.css b/frontend/src/metabase/css/query_builder.module.css
index 6346c0c94b8..acdcf68c61b 100644
--- a/frontend/src/metabase/css/query_builder.module.css
+++ b/frontend/src/metabase/css/query_builder.module.css
@@ -91,15 +91,15 @@
 }
 
 .SelectionItem:hover :global(.Icon) {
-  color: var(--color-text-white) !important;
+  color: var(--mb-color-text-white) !important;
 }
 
 .SelectionItem:hover .SelectionModuleDisplay {
-  color: var(--color-text-white);
+  color: var(--mb-color-text-white);
 }
 
 .SelectionItem:hover .SelectionModuleDescription {
-  color: var(--color-text-white);
+  color: var(--mb-color-text-white);
 }
 
 .SelectionItem.SelectionItemSelected :global(.Icon-check) {
diff --git a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/SidebarItem/SidebarItem.styled.tsx b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/SidebarItem/SidebarItem.styled.tsx
index b509bc1e64f..05c30966e4c 100644
--- a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/SidebarItem/SidebarItem.styled.tsx
+++ b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/SidebarItem/SidebarItem.styled.tsx
@@ -41,7 +41,7 @@ export const SelectableSidebarItemRoot = styled(BaseSidebarItemRoot)<{
   background-color: ${props =>
     props.isSelected ? color("brand") : "transparent"};
 
-  color: ${props => (props.isSelected ? color("white") : "inherit")};
+  color: ${props => (props.isSelected ? color("text-white") : "inherit")};
 `;
 
 export const Content = styled.div`
diff --git a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/TypeSelector/TypeSelector.styled.tsx b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/TypeSelector/TypeSelector.styled.tsx
index c5dc3555300..7b97585706a 100644
--- a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/TypeSelector/TypeSelector.styled.tsx
+++ b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/TypeSelector/TypeSelector.styled.tsx
@@ -11,6 +11,7 @@ export const BehaviorOptionIcon = styled(SidebarItem.Icon)<{
     props.isSelected ? "transparent" : "var(--mb-color-border)"};
 
   .Icon {
-    color: ${props => (props.isSelected ? color("white") : color("brand"))};
+    color: ${props =>
+      props.isSelected ? color("text-white") : color("brand")};
   }
 `;
diff --git a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/TypeSelector/TypeSelector.tsx b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/TypeSelector/TypeSelector.tsx
index b2268dcd372..b0af2288a9f 100644
--- a/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/TypeSelector/TypeSelector.tsx
+++ b/frontend/src/metabase/dashboard/components/ClickBehaviorSidebar/TypeSelector/TypeSelector.tsx
@@ -45,7 +45,7 @@ export const BehaviorOption = ({
     >
       <BehaviorOptionIcon
         name={selected ? "check" : icon}
-        color={selected ? color("white") : color("brand")}
+        color={selected ? color("text-white") : color("brand")}
         isSelected={selected}
       />
       <SidebarItem.Content>
diff --git a/frontend/src/metabase/dashboard/components/DashCard/DashCardParameterMapper/DashCardCardParameterMapper.styled.tsx b/frontend/src/metabase/dashboard/components/DashCard/DashCardParameterMapper/DashCardCardParameterMapper.styled.tsx
index 8685bce99fa..2eba3065ed4 100644
--- a/frontend/src/metabase/dashboard/components/DashCard/DashCardParameterMapper/DashCardCardParameterMapper.styled.tsx
+++ b/frontend/src/metabase/dashboard/components/DashCard/DashCardParameterMapper/DashCardCardParameterMapper.styled.tsx
@@ -45,7 +45,7 @@ export const TargetButton = styled.div<{ variant: string }>`
   display: flex;
   align-items: center;
   justify-content: space-between;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   cursor: pointer;
   border: 2px solid var(--mb-color-brand);
   border-radius: 8px;
@@ -67,7 +67,7 @@ export const TargetButton = styled.div<{ variant: string }>`
     css`
       border-color: var(--mb-color-brand);
       background-color: var(--mb-color-brand);
-      color: ${color("white")};
+      color: var(--mb-color-text-white);
     `}
 
   ${({ variant }) =>
@@ -84,7 +84,7 @@ export const TargetButton = styled.div<{ variant: string }>`
     css`
       border-color: var(--mb-color-error);
       background-color: var(--mb-color-error);
-      color: ${color("white")};
+      color: var(--mb-color-text-white);
     `}
 `;
 
@@ -100,14 +100,14 @@ export const TargetButtonText = styled.span`
 `;
 
 export const CloseIconButton = styled(Button)<{ icon?: string; size?: number }>`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   background-color: transparent;
   border: none;
   padding: ${space(0)} !important;
 
   &:hover {
-    color: ${color("white")};
-    background-color: ${alpha("white", 0.2)};
+    color: var(--mb-color-text-white);
+    background-color: ${() => alpha("bg-white", 0.2)};
   }
 `;
 
diff --git a/frontend/src/metabase/dashboard/components/Dashboard/Dashboard.styled.tsx b/frontend/src/metabase/dashboard/components/Dashboard/Dashboard.styled.tsx
index 661d7a01ece..bc8aa4dc5bd 100644
--- a/frontend/src/metabase/dashboard/components/Dashboard/Dashboard.styled.tsx
+++ b/frontend/src/metabase/dashboard/components/Dashboard/Dashboard.styled.tsx
@@ -85,7 +85,7 @@ export const DashboardHeaderContainer = styled.header<{
   ${({ isNightMode }) =>
     isNightMode &&
     css`
-      color: ${color("text-white")};
+      color: var(--mb-color-text-white);
     `}
 `;
 
diff --git a/frontend/src/metabase/dashboard/components/Dashboard/DashboardEmptyState/DashboardEmptyState.styled.tsx b/frontend/src/metabase/dashboard/components/Dashboard/DashboardEmptyState/DashboardEmptyState.styled.tsx
index 73d43ba52d1..77328728229 100644
--- a/frontend/src/metabase/dashboard/components/Dashboard/DashboardEmptyState/DashboardEmptyState.styled.tsx
+++ b/frontend/src/metabase/dashboard/components/Dashboard/DashboardEmptyState/DashboardEmptyState.styled.tsx
@@ -1,10 +1,12 @@
 import styled from "@emotion/styled";
 
+import { color } from "metabase/lib/colors";
 import { space } from "metabase/styled-components/theme";
 
 export const Container = styled.div<{ isNightMode: boolean }>`
   box-sizing: border-box;
-  color: ${({ isNightMode }) => (isNightMode ? "white" : "inherit")};
+  color: ${({ isNightMode }) =>
+    isNightMode ? color("text-white") : "inherit"};
   margin-top: ${space(4)};
 `;
 
diff --git a/frontend/src/metabase/dashboard/components/DashboardHeader/SectionLayoutPreview.tsx b/frontend/src/metabase/dashboard/components/DashboardHeader/SectionLayoutPreview.tsx
index 64f1ad53ade..b6da14680b8 100644
--- a/frontend/src/metabase/dashboard/components/DashboardHeader/SectionLayoutPreview.tsx
+++ b/frontend/src/metabase/dashboard/components/DashboardHeader/SectionLayoutPreview.tsx
@@ -75,7 +75,7 @@ function PreviewCard({
       h={`${height}px`}
       top={`${top}px`}
       left={`${left}px`}
-      bg="white"
+      bg="bg-white"
       style={{ borderRadius: "2px" }}
     />
   );
diff --git a/frontend/src/metabase/dashboard/components/DashboardInfoSidebar/DashboardInfoSidebar.styled.tsx b/frontend/src/metabase/dashboard/components/DashboardInfoSidebar/DashboardInfoSidebar.styled.tsx
index 7e5e2f78a4a..7082d0e53df 100644
--- a/frontend/src/metabase/dashboard/components/DashboardInfoSidebar/DashboardInfoSidebar.styled.tsx
+++ b/frontend/src/metabase/dashboard/components/DashboardInfoSidebar/DashboardInfoSidebar.styled.tsx
@@ -2,7 +2,6 @@ import styled from "@emotion/styled";
 
 import EditableText from "metabase/core/components/EditableText";
 import FormField from "metabase/core/components/FormField/FormField";
-import { color } from "metabase/lib/colors";
 import { breakpointMaxSmall } from "metabase/styled-components/theme";
 
 import { SIDEBAR_WIDTH } from "../Sidebar";
@@ -10,7 +9,7 @@ import { SIDEBAR_WIDTH } from "../Sidebar";
 export const DashboardInfoSidebarRoot = styled.aside`
   width: ${SIDEBAR_WIDTH}px;
   min-width: ${SIDEBAR_WIDTH}px;
-  background: ${color("white")};
+  background: var(--mb-color-bg-white);
   border-left: 1px solid var(--mb-color-border);
   align-self: stretch;
   // FIXME: ensure that removing this style is OK
diff --git a/frontend/src/metabase/dashboard/components/DashboardMoveModal.tsx b/frontend/src/metabase/dashboard/components/DashboardMoveModal.tsx
index 0a4fcec5699..c7fd90eb823 100644
--- a/frontend/src/metabase/dashboard/components/DashboardMoveModal.tsx
+++ b/frontend/src/metabase/dashboard/components/DashboardMoveModal.tsx
@@ -57,7 +57,7 @@ const DashboardMoveToast = ({
   collectionId: CollectionId;
 }) => (
   <ToastRoot>
-    <Icon name="collection" className="mr1" color="white" />
+    <Icon name="collection" className="mr1" color="text-white" />
     {jt`Dashboard moved to ${(
       <Collection.Link
         id={collectionId}
diff --git a/frontend/src/metabase/dashboard/components/ParametersPopover.styled.tsx b/frontend/src/metabase/dashboard/components/ParametersPopover.styled.tsx
index 083b78fe4eb..7ad0c130109 100644
--- a/frontend/src/metabase/dashboard/components/ParametersPopover.styled.tsx
+++ b/frontend/src/metabase/dashboard/components/ParametersPopover.styled.tsx
@@ -15,11 +15,11 @@ export const OptionItemRoot = styled.li`
   cursor: pointer;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
 
     ${OptionItemTitle}, ${OptionItemDescription} {
-      color: ${color("white")};
+      color: var(--mb-color-text-white);
     }
   }
 `;
diff --git a/frontend/src/metabase/databases/components/DatabaseEngineField/DatabaseEngineWidget.styled.tsx b/frontend/src/metabase/databases/components/DatabaseEngineField/DatabaseEngineWidget.styled.tsx
index b036c14c61d..177e77f54c6 100644
--- a/frontend/src/metabase/databases/components/DatabaseEngineField/DatabaseEngineWidget.styled.tsx
+++ b/frontend/src/metabase/databases/components/DatabaseEngineField/DatabaseEngineWidget.styled.tsx
@@ -35,7 +35,7 @@ export const EngineCardRoot = styled.li<EngineCardRootProps>`
   padding: 1rem;
   border: 1px solid var(--mb-color-bg-medium);
   border-radius: 0.375rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   cursor: pointer;
   outline: ${props => props.isActive && `2px solid var(--mb-color-focus)`};
 
diff --git a/frontend/src/metabase/forms/components/FormMessage/FormMessage.styled.tsx b/frontend/src/metabase/forms/components/FormMessage/FormMessage.styled.tsx
index c3f1dd36310..fdac5289073 100644
--- a/frontend/src/metabase/forms/components/FormMessage/FormMessage.styled.tsx
+++ b/frontend/src/metabase/forms/components/FormMessage/FormMessage.styled.tsx
@@ -10,7 +10,7 @@ export const FormMessageStyled = styled.span<{
   noPadding?: boolean;
 }>`
   color: ${({ hasSucceeded }) =>
-    hasSucceeded ? color("success") : color("error")};
+    hasSucceeded ? "var(--mb-color-success)" : color("error")};
   float: left;
   opacity: 0;
   padding-bottom: ${({ noPadding }) => (noPadding ? "" : space(2))};
diff --git a/frontend/src/metabase/forms/components/FormTextInput/FormTextInput.styled.tsx b/frontend/src/metabase/forms/components/FormTextInput/FormTextInput.styled.tsx
index 890e7d2ce7c..91e9be639ef 100644
--- a/frontend/src/metabase/forms/components/FormTextInput/FormTextInput.styled.tsx
+++ b/frontend/src/metabase/forms/components/FormTextInput/FormTextInput.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import { CopyButton } from "metabase/components/CopyButton";
-import { color } from "metabase/lib/colors";
 
 export const CopyWidgetButton = styled(CopyButton)`
   position: absolute;
@@ -18,7 +17,7 @@ export const CopyWidgetButton = styled(CopyButton)`
   outline: none;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 `;
diff --git a/frontend/src/metabase/home/components/CustomHomePageModal/CustomHomePageModal.tsx b/frontend/src/metabase/home/components/CustomHomePageModal/CustomHomePageModal.tsx
index a3e7a689ea1..cb62f6808e5 100644
--- a/frontend/src/metabase/home/components/CustomHomePageModal/CustomHomePageModal.tsx
+++ b/frontend/src/metabase/home/components/CustomHomePageModal/CustomHomePageModal.tsx
@@ -46,13 +46,13 @@ export const CustomHomePageModal = ({
           <Box ml="0.5rem" mr="2.5rem">
             <Text
               span
-              c="white"
+              c="text-white"
               fw={700}
             >{t`This dashboard has been set as your homepage.`}</Text>
             <br />
             <Text
               span
-              c="white"
+              c="text-white"
             >{t`You can change this in Admin > Settings > General.`}</Text>
           </Box>
         ),
diff --git a/frontend/src/metabase/home/components/HomeCard/HomeCard.styled.tsx b/frontend/src/metabase/home/components/HomeCard/HomeCard.styled.tsx
index 9ecc276f34c..07641b185dd 100644
--- a/frontend/src/metabase/home/components/HomeCard/HomeCard.styled.tsx
+++ b/frontend/src/metabase/home/components/HomeCard/HomeCard.styled.tsx
@@ -1,7 +1,7 @@
 import styled from "@emotion/styled";
 
 import Link from "metabase/core/components/Link";
-import { alpha, color } from "metabase/lib/colors";
+import { alpha } from "metabase/lib/colors";
 import {
   breakpointMinLarge,
   breakpointMinSmall,
@@ -13,7 +13,7 @@ export const CardRoot = styled(Link)`
   padding: 1rem;
   border: 1px solid var(--mb-color-border);
   border-radius: 0.5rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   box-shadow: 0 7px 20px var(--mb-color-shadow);
   max-width: 100%;
 
diff --git a/frontend/src/metabase/home/components/HomeHelpCard/HomeHelpCard.styled.tsx b/frontend/src/metabase/home/components/HomeHelpCard/HomeHelpCard.styled.tsx
index 9efcc02fb44..947fbf0d847 100644
--- a/frontend/src/metabase/home/components/HomeHelpCard/HomeHelpCard.styled.tsx
+++ b/frontend/src/metabase/home/components/HomeHelpCard/HomeHelpCard.styled.tsx
@@ -6,7 +6,7 @@ import { breakpointMinLarge } from "metabase/styled-components/theme";
 import { Icon } from "metabase/ui";
 
 export const CardRoot = styled(ExternalLink)`
-  background: ${color("white")};
+  background: var(--mb-color-bg-white);
   display: flex;
   align-items: center;
   padding: 1rem;
diff --git a/frontend/src/metabase/hooks/use-palette.ts b/frontend/src/metabase/hooks/use-palette.ts
index 4b071b9ec8d..cdcd91387ca 100644
--- a/frontend/src/metabase/hooks/use-palette.ts
+++ b/frontend/src/metabase/hooks/use-palette.ts
@@ -19,5 +19,5 @@ export function usePalette(): ColorPalette {
       "text-dark": theme.fn.themeColor("text-dark"),
       "text-white": theme.fn.themeColor("text-white"),
     };
-  }, [theme.fn]);
+  }, [theme]);
 }
diff --git a/frontend/src/metabase/lib/colors/groups.ts b/frontend/src/metabase/lib/colors/groups.ts
index 74d680648a9..10206296ba2 100644
--- a/frontend/src/metabase/lib/colors/groups.ts
+++ b/frontend/src/metabase/lib/colors/groups.ts
@@ -34,7 +34,7 @@ export const getDarkAccentColors = (palette?: ColorPalette) => {
 
 export const getStatusColorRanges = () => {
   return [
-    [color("error"), color("white"), color("success")],
+    [color("error"), color("bg-white"), color("success")],
     [color("error"), color("warning"), color("success")],
   ];
 };
diff --git a/frontend/src/metabase/lib/colors/palette.ts b/frontend/src/metabase/lib/colors/palette.ts
index ee745ae2bf9..cc2bea80836 100644
--- a/frontend/src/metabase/lib/colors/palette.ts
+++ b/frontend/src/metabase/lib/colors/palette.ts
@@ -168,13 +168,13 @@ export const getTextColorForBackground = (
   getColor: ColorGetter = color,
 ) => {
   const whiteTextContrast =
-    Color(getColor(backgroundColor)).contrast(Color(getColor("white"))) *
+    Color(getColor(backgroundColor)).contrast(Color(getColor("text-white"))) *
     whiteTextColorPriorityFactor;
   const darkTextContrast = Color(getColor(backgroundColor)).contrast(
     Color(getColor("text-dark")),
   );
 
   return whiteTextContrast > darkTextContrast
-    ? getColor("white")
+    ? getColor("text-white")
     : getColor("text-dark");
 };
diff --git a/frontend/src/metabase/lib/colors/scales.unit.spec.ts b/frontend/src/metabase/lib/colors/scales.unit.spec.ts
index cbebe289b03..b5285b980da 100644
--- a/frontend/src/metabase/lib/colors/scales.unit.spec.ts
+++ b/frontend/src/metabase/lib/colors/scales.unit.spec.ts
@@ -2,7 +2,7 @@ import { color } from "./palette";
 import { getColorScale } from "./scales";
 
 describe("scales", () => {
-  const colors = [color("white"), color("bg-black")];
+  const colors = [color("bg-white"), color("bg-black")];
 
   it("should interpolate colors by default", () => {
     const scale = getColorScale([0, 1], colors);
diff --git a/frontend/src/metabase/models/components/ModelDetailPage/ModelActionDetails/ModelActionListItem.styled.tsx b/frontend/src/metabase/models/components/ModelDetailPage/ModelActionDetails/ModelActionListItem.styled.tsx
index 33e54429cc2..5b18627b027 100644
--- a/frontend/src/metabase/models/components/ModelDetailPage/ModelActionDetails/ModelActionListItem.styled.tsx
+++ b/frontend/src/metabase/models/components/ModelDetailPage/ModelActionDetails/ModelActionListItem.styled.tsx
@@ -67,7 +67,7 @@ export const CodeBlock = styled.pre`
   white-space: pre-wrap;
   margin: 0;
 
-  color: ${color("text-white")};
+  color: var(--mb-color-text-white);
   background-color: ${color("text-dark")};
 `;
 
diff --git a/frontend/src/metabase/models/containers/NewModelOptions/NewModelOptions.styled.tsx b/frontend/src/metabase/models/containers/NewModelOptions/NewModelOptions.styled.tsx
index 5b0ef90cedd..1f6de2dc473 100644
--- a/frontend/src/metabase/models/containers/NewModelOptions/NewModelOptions.styled.tsx
+++ b/frontend/src/metabase/models/containers/NewModelOptions/NewModelOptions.styled.tsx
@@ -2,7 +2,6 @@ import styled from "@emotion/styled";
 
 import { GridItem } from "metabase/components/Grid";
 import ExternalLink from "metabase/core/components/ExternalLink";
-import { color } from "metabase/lib/colors";
 import {
   breakpointMinMedium,
   breakpointMinSmall,
@@ -37,7 +36,7 @@ export const EducationalButton = styled(ExternalLink)`
   transition: all 0.3s;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 `;
diff --git a/frontend/src/metabase/nav/components/AdminNavbar/AdminNavItem.styled.tsx b/frontend/src/metabase/nav/components/AdminNavbar/AdminNavItem.styled.tsx
index d3a9797c4cb..712963b9af2 100644
--- a/frontend/src/metabase/nav/components/AdminNavbar/AdminNavItem.styled.tsx
+++ b/frontend/src/metabase/nav/components/AdminNavbar/AdminNavItem.styled.tsx
@@ -11,5 +11,6 @@ interface AdminNavLinkProps {
 export const AdminNavLink = styled(Link)<AdminNavLinkProps>`
   padding: 0.5rem 1rem;
   text-decoration: none;
-  color: ${props => (props.isSelected ? color("white") : alpha("white", 0.63))};
+  color: ${props =>
+    props.isSelected ? color("text-white") : alpha("text-white", 0.63)};
 `;
diff --git a/frontend/src/metabase/nav/components/AdminNavbar/AdminNavbar.styled.tsx b/frontend/src/metabase/nav/components/AdminNavbar/AdminNavbar.styled.tsx
index 5135249f8f1..cabf6192efe 100644
--- a/frontend/src/metabase/nav/components/AdminNavbar/AdminNavbar.styled.tsx
+++ b/frontend/src/metabase/nav/components/AdminNavbar/AdminNavbar.styled.tsx
@@ -12,7 +12,7 @@ import { ADMIN_NAVBAR_HEIGHT } from "../../constants";
 export const AdminNavbarRoot = styled.nav`
   padding: 0.5rem 1rem;
   background: ${color("admin-navbar")};
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   font-size: 0.85rem;
   height: ${ADMIN_NAVBAR_HEIGHT};
   display: flex;
@@ -60,18 +60,18 @@ export const AdminMobileNavBarItems = styled.ul`
 `;
 
 export const AdminExitLink = styled(Link)`
-  border: 1px solid ${alpha("white", 0.2)};
+  border: 1px solid ${() => alpha("bg-white", 0.2)};
   padding: 12px 18px;
   border-radius: 5px;
   font-weight: 700;
   font-size: 13px;
   transition: all 200ms;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   white-space: nowrap;
   text-align: center;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: ${() => darken(color("filter"))};
     border-color: ${() => darken(color("filter"))};
   }
diff --git a/frontend/src/metabase/nav/components/AdminNavbar/AdminNavbar.tsx b/frontend/src/metabase/nav/components/AdminNavbar/AdminNavbar.tsx
index 569ab651549..196b043682d 100644
--- a/frontend/src/metabase/nav/components/AdminNavbar/AdminNavbar.tsx
+++ b/frontend/src/metabase/nav/components/AdminNavbar/AdminNavbar.tsx
@@ -97,7 +97,7 @@ const MobileNavbar = ({ adminPaths, currentPath }: AdminMobileNavbarProps) => {
         variant="subtle"
         p="0.25rem"
       >
-        <Icon name="burger" size={32} color="white" />
+        <Icon name="burger" size={32} color="text-white" />
       </Button>
       {mobileNavOpen && (
         <AdminMobileNavBarItems>
diff --git a/frontend/src/metabase/nav/components/CollectionBreadcrumbs/CollectionBreadcrumbs.styled.tsx b/frontend/src/metabase/nav/components/CollectionBreadcrumbs/CollectionBreadcrumbs.styled.tsx
index ceab76b2073..348387e22ba 100644
--- a/frontend/src/metabase/nav/components/CollectionBreadcrumbs/CollectionBreadcrumbs.styled.tsx
+++ b/frontend/src/metabase/nav/components/CollectionBreadcrumbs/CollectionBreadcrumbs.styled.tsx
@@ -29,7 +29,7 @@ export const ExpandButton = styled(Button)`
   color: ${color("text-medium")};
 
   &:hover {
-    color: ${color("text-white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 `;
diff --git a/frontend/src/metabase/nav/components/StoreLink/StoreLink.styled.tsx b/frontend/src/metabase/nav/components/StoreLink/StoreLink.styled.tsx
index 0d4a4f72889..2d7ecceb152 100644
--- a/frontend/src/metabase/nav/components/StoreLink/StoreLink.styled.tsx
+++ b/frontend/src/metabase/nav/components/StoreLink/StoreLink.styled.tsx
@@ -17,11 +17,11 @@ export const StoreIconWrapper = styled.div`
   height: 40px;
   border-radius: 6px;
   cursor: pointer;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   transition: all 300ms ease-in-out;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: ${() => darken(color("filter"))};
   }
 
diff --git a/frontend/src/metabase/nav/components/search/SearchBar/SearchBar.styled.tsx b/frontend/src/metabase/nav/components/search/SearchBar/SearchBar.styled.tsx
index 13b863424ca..ee185671975 100644
--- a/frontend/src/metabase/nav/components/search/SearchBar/SearchBar.styled.tsx
+++ b/frontend/src/metabase/nav/components/search/SearchBar/SearchBar.styled.tsx
@@ -37,7 +37,7 @@ export const SearchInputContainer = styled.div<{
       `;
     }
     return css`
-      background-color: ${color("white")};
+      background-color: var(--mb-color-bg-white);
 
       &:hover {
         background-color: var(--mb-color-bg-light);
diff --git a/frontend/src/metabase/nav/containers/MainNavbar/MainNavbar.styled.tsx b/frontend/src/metabase/nav/containers/MainNavbar/MainNavbar.styled.tsx
index 3457ae12571..50252970a47 100644
--- a/frontend/src/metabase/nav/containers/MainNavbar/MainNavbar.styled.tsx
+++ b/frontend/src/metabase/nav/containers/MainNavbar/MainNavbar.styled.tsx
@@ -33,7 +33,7 @@ export const Sidebar = styled.aside<{ isOpen: boolean }>`
   position: relative;
   flex-shrink: 0;
   align-items: center;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
 
   overflow: auto;
   overflow-x: hidden;
@@ -146,7 +146,7 @@ export const PaddedSidebarLink = styled(SidebarLink)`
 export const AddYourOwnDataLink = styled(SidebarLink)`
   background: var(--mb-color-brand);
   border-radius: 8px;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   margin: ${space(1)};
   padding: 2px 6px;
   svg {
@@ -160,7 +160,7 @@ export const AddYourOwnDataLink = styled(SidebarLink)`
 
   &:hover {
     background: ${() => lighten("brand", 0.12)};
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
 
     svg {
       color: var(--mb-color-brand-light) !important;
diff --git a/frontend/src/metabase/nav/containers/MainNavbar/SidebarItems/SidebarItems.styled.tsx b/frontend/src/metabase/nav/containers/MainNavbar/SidebarItems/SidebarItems.styled.tsx
index c78c3cac3f7..780adf52dff 100644
--- a/frontend/src/metabase/nav/containers/MainNavbar/SidebarItems/SidebarItems.styled.tsx
+++ b/frontend/src/metabase/nav/containers/MainNavbar/SidebarItems/SidebarItems.styled.tsx
@@ -70,7 +70,7 @@ NodeRoot.defaultProps = {
 };
 
 export const collectionDragAndDropHoverStyle = css`
-  color: ${color("text-white")};
+  color: var(--mb-color-text-white);
   background-color: var(--mb-color-brand);
 `;
 
diff --git a/frontend/src/metabase/palette/components/PaletteResultItem.tsx b/frontend/src/metabase/palette/components/PaletteResultItem.tsx
index 23d909caf99..d92971611fe 100644
--- a/frontend/src/metabase/palette/components/PaletteResultItem.tsx
+++ b/frontend/src/metabase/palette/components/PaletteResultItem.tsx
@@ -39,7 +39,7 @@ export const PaletteResultItem = ({ item, active }: PaletteResultItemProps) => {
         flexBasis: 0,
       }}
       bg={active ? color("brand") : "none"}
-      c={active ? color("white") : color("text-dark")}
+      c={active ? color("text-white") : color("text-dark")}
       aria-label={item.name}
     >
       {/** Icon Container */}
@@ -74,7 +74,7 @@ export const PaletteResultItem = ({ item, active }: PaletteResultItemProps) => {
           {item.extra?.isVerified && (
             <Icon
               name="verified_filled"
-              color={active ? color("white") : color("brand")}
+              color={active ? color("text-white") : color("brand")}
               style={{
                 verticalAlign: "sub",
                 marginLeft: "0.25rem",
@@ -94,7 +94,7 @@ export const PaletteResultItem = ({ item, active }: PaletteResultItemProps) => {
         </Box>
         <Text
           component="span"
-          color={active ? "white" : "text-light"}
+          color={active ? "text-white" : "text-light"}
           fw="normal"
           style={{
             textOverflow: "ellipsis",
diff --git a/frontend/src/metabase/parameters/components/ParameterSettings/ParameterSettings.styled.tsx b/frontend/src/metabase/parameters/components/ParameterSettings/ParameterSettings.styled.tsx
index c31ea96ae5e..038dcab6c07 100644
--- a/frontend/src/metabase/parameters/components/ParameterSettings/ParameterSettings.styled.tsx
+++ b/frontend/src/metabase/parameters/components/ParameterSettings/ParameterSettings.styled.tsx
@@ -21,5 +21,5 @@ export const SettingValueWidget = styled(ParameterValueWidget)`
   padding: 0.75rem 0.75rem;
   border: 1px solid var(--mb-color-border);
   border-radius: 0.5rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
 `;
diff --git a/frontend/src/metabase/parameters/components/ParameterValueWidget.module.css b/frontend/src/metabase/parameters/components/ParameterValueWidget.module.css
index 96ca8b9bc83..ed2a5ecb174 100644
--- a/frontend/src/metabase/parameters/components/ParameterValueWidget.module.css
+++ b/frontend/src/metabase/parameters/components/ParameterValueWidget.module.css
@@ -60,7 +60,7 @@
 
 .DashboardNight .parameter.noPopover input:focus,
 .ThemeNight .parameter.noPopover input:focus {
-  color: var(--color-text-white);
+  color: var(--mb-color-text-white);
 }
 
 .name {
diff --git a/frontend/src/metabase/parameters/components/ParameterWidget/ParameterWidget.styled.ts b/frontend/src/metabase/parameters/components/ParameterWidget/ParameterWidget.styled.ts
index 9ea91b52082..3730fda7f88 100644
--- a/frontend/src/metabase/parameters/components/ParameterWidget/ParameterWidget.styled.ts
+++ b/frontend/src/metabase/parameters/components/ParameterWidget/ParameterWidget.styled.ts
@@ -50,9 +50,9 @@ export const ParameterContainer = styled.div<ParameterContainerProps>`
   min-width: 170px;
   margin: 0.25rem 0.5rem 0.25rem 0;
   padding: 0.5rem;
-  color: ${props => props.isEditingParameter && color("white")};
+  color: ${props => props.isEditingParameter && color("text-white")};
   background-color: ${props =>
-    props.isEditingParameter ? color("brand") : color("white")};
+    props.isEditingParameter ? color("brand") : color("bg-white")};
 `;
 
 export const SettingsIcon = styled(Icon)`
diff --git a/frontend/src/metabase/public/components/EmbedFrame/EmbedFrame.module.css b/frontend/src/metabase/public/components/EmbedFrame/EmbedFrame.module.css
index 016d4807227..8ffff811473 100644
--- a/frontend/src/metabase/public/components/EmbedFrame/EmbedFrame.module.css
+++ b/frontend/src/metabase/public/components/EmbedFrame/EmbedFrame.module.css
@@ -19,18 +19,18 @@ body {
 
 .ThemeNight .EmbedFrameHeader,
 .ThemeNight .EmbedFrameFooter {
-  color: color-mod(var(--color-text-white) alpha(-14%));
+  color: color-mod(var(--mb-color-text-white) alpha(-14%));
   background-color: var(--mb-color-bg-black);
   border-color: var(--mb-color-bg-dark);
 }
 
 .ThemeNight.EmbedFrame .fullscreenNightText {
-  color: color-mod(var(--color-text-white) alpha(-14%));
+  color: color-mod(var(--mb-color-text-white) alpha(-14%));
   transition: color 1s linear;
 }
 
 .ThemeNight.EmbedFrame svg text {
-  fill: color-mod(var(--color-text-white) alpha(-14%)) !important;
+  fill: color-mod(var(--mb-color-text-white) alpha(-14%)) !important;
   stroke: none !important;
 }
 
diff --git a/frontend/src/metabase/public/components/EmbedFrame/EmbedFrame.styled.tsx b/frontend/src/metabase/public/components/EmbedFrame/EmbedFrame.styled.tsx
index 5bdf8cb17c6..a3ea20c2155 100644
--- a/frontend/src/metabase/public/components/EmbedFrame/EmbedFrame.styled.tsx
+++ b/frontend/src/metabase/public/components/EmbedFrame/EmbedFrame.styled.tsx
@@ -111,7 +111,7 @@ function getParameterPanelBackgroundColor(theme?: DisplayTheme) {
   if (theme === "transparent") {
     return "transparent";
   }
-  return color("white");
+  return color("bg-white");
 }
 
 function getParameterPanelBorderColor(theme?: DisplayTheme) {
diff --git a/frontend/src/metabase/public/components/EmbedFrame/LogoBadge.styled.tsx b/frontend/src/metabase/public/components/EmbedFrame/LogoBadge.styled.tsx
index 6b8e59681ff..6bcca0deacc 100644
--- a/frontend/src/metabase/public/components/EmbedFrame/LogoBadge.styled.tsx
+++ b/frontend/src/metabase/public/components/EmbedFrame/LogoBadge.styled.tsx
@@ -44,7 +44,7 @@ export const Message = styled.span<{ variant: Variant }>`
 export const MetabaseName = styled.span<{ isDark: boolean; variant: Variant }>`
   color: ${props => {
     if (props.isDark) {
-      return color("white");
+      return color("text-white");
     }
     return color(props.variant === "large" ? "text-dark" : "brand");
   }};
diff --git a/frontend/src/metabase/public/components/EmbedModal/SelectEmbedTypePane/InteractiveEmbeddingCTA/InteractiveEmbeddingCTA.tsx b/frontend/src/metabase/public/components/EmbedModal/SelectEmbedTypePane/InteractiveEmbeddingCTA/InteractiveEmbeddingCTA.tsx
index 0d54a65464c..a4ca42d8c83 100644
--- a/frontend/src/metabase/public/components/EmbedModal/SelectEmbedTypePane/InteractiveEmbeddingCTA/InteractiveEmbeddingCTA.tsx
+++ b/frontend/src/metabase/public/components/EmbedModal/SelectEmbedTypePane/InteractiveEmbeddingCTA/InteractiveEmbeddingCTA.tsx
@@ -53,7 +53,7 @@ export const InteractiveEmbeddingCTA = () => {
       >
         <Text
           align="center"
-          c="white"
+          c="text-white"
           span
           tt="uppercase"
           lts="0.7"
diff --git a/frontend/src/metabase/public/components/EmbedModal/StaticEmbedSetupPane/StaticEmbedSetupPane.styled.tsx b/frontend/src/metabase/public/components/EmbedModal/StaticEmbedSetupPane/StaticEmbedSetupPane.styled.tsx
index 525b36372a1..b665f7e1603 100644
--- a/frontend/src/metabase/public/components/EmbedModal/StaticEmbedSetupPane/StaticEmbedSetupPane.styled.tsx
+++ b/frontend/src/metabase/public/components/EmbedModal/StaticEmbedSetupPane/StaticEmbedSetupPane.styled.tsx
@@ -16,7 +16,7 @@ const SettingsAsideBlock = styled.div`
   width: 21.6rem;
   padding: 2rem;
   border-right: 1px solid var(--mb-color-border);
-  background-color: ${({ theme }) => theme.fn.themeColor("white")};
+  background-color: var(--mb-color-bg-white);
 
   height: 45.125rem;
   overflow-y: auto;
diff --git a/frontend/src/metabase/public/components/widgets/LegaleseStep/LegaleseStep.tsx b/frontend/src/metabase/public/components/widgets/LegaleseStep/LegaleseStep.tsx
index 708bafd9187..511cad6e684 100644
--- a/frontend/src/metabase/public/components/widgets/LegaleseStep/LegaleseStep.tsx
+++ b/frontend/src/metabase/public/components/widgets/LegaleseStep/LegaleseStep.tsx
@@ -24,7 +24,7 @@ export const LegaleseStep = ({
   };
 
   return (
-    <Center bg="white" px="18rem" pt="6.25rem" pb="11.75rem">
+    <Center bg="bg-white" px="18rem" pt="6.25rem" pb="11.75rem">
       <Stack align="center" spacing="3rem">
         <Title order={2} fz="1.25rem">{t`First, some legalese`}</Title>
 
diff --git a/frontend/src/metabase/pulse/components/RecipientPicker.jsx b/frontend/src/metabase/pulse/components/RecipientPicker.jsx
index c4f4b9cffd5..c4147ef4715 100644
--- a/frontend/src/metabase/pulse/components/RecipientPicker.jsx
+++ b/frontend/src/metabase/pulse/components/RecipientPicker.jsx
@@ -77,7 +77,7 @@ export default class RecipientPicker extends Component {
             valueRenderer={value => value.common_name ?? value.email}
             optionRenderer={option => (
               <div className={cx(CS.flex, CS.alignCenter)}>
-                <Text color="white">
+                <Text color="text-white">
                   <UserAvatar user={option.value} />
                 </Text>
                 <span className={CS.ml1}>{option.value.common_name}</span>
diff --git a/frontend/src/metabase/query_builder/components/AlertModals/AlertModals.styled.tsx b/frontend/src/metabase/query_builder/components/AlertModals/AlertModals.styled.tsx
index cae64d1ff48..f8af113c6e3 100644
--- a/frontend/src/metabase/query_builder/components/AlertModals/AlertModals.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/AlertModals/AlertModals.styled.tsx
@@ -28,7 +28,7 @@ export const DangerZone = styled.div`
       opacity: 1;
       background-color: ${color("accent3")};
       border-color: ${color("accent3")};
-      color: ${color("text-white")};
+      color: var(--mb-color-text-white);
     }
   }
 `;
diff --git a/frontend/src/metabase/query_builder/components/DataSelector/DataSelectorDataBucketPicker/DataSelectorDataBucketPicker.styled.tsx b/frontend/src/metabase/query_builder/components/DataSelector/DataSelectorDataBucketPicker/DataSelectorDataBucketPicker.styled.tsx
index ce8f6bc1593..87e956fa1f8 100644
--- a/frontend/src/metabase/query_builder/components/DataSelector/DataSelectorDataBucketPicker/DataSelectorDataBucketPicker.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/DataSelector/DataSelectorDataBucketPicker/DataSelectorDataBucketPicker.styled.tsx
@@ -41,7 +41,7 @@ export const DataBucketListItemContainer = styled(SelectList.BaseItem as any)`
     ${DataBucketListItemIcon},
     ${DataBucketListItemTitle},
     ${DataBucketListItemDescription} {
-      color: ${color("text-white")};
+      color: var(--mb-color-text-white);
     }
   }
 `;
diff --git a/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetEditor.styled.tsx b/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetEditor.styled.tsx
index 91d7602c965..5f7b9acc9e0 100644
--- a/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetEditor.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetEditor.styled.tsx
@@ -49,7 +49,7 @@ export const TableHeaderColumnName = styled.div<{ isSelected: boolean }>`
   ${props =>
     props.isSelected &&
     css`
-      color: ${color("text-white")};
+      color: var(--mb-color-text-white);
       background-color: var(--mb-color-brand);
     `}
 
@@ -59,11 +59,11 @@ export const TableHeaderColumnName = styled.div<{ isSelected: boolean }>`
   }
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
 
     .Icon {
-      background-color: ${color("white")};
+      background-color: var(--mb-color-bg-white);
       color: var(--mb-color-brand);
     }
   }
@@ -71,9 +71,9 @@ export const TableHeaderColumnName = styled.div<{ isSelected: boolean }>`
 
 export const FieldTypeIcon = styled(Icon)<{ isSelected: boolean }>`
   background-color: ${props =>
-    props.isSelected ? color("white") : color("brand")};
+    props.isSelected ? color("bg-white") : color("brand")};
 
-  color: ${props => (props.isSelected ? color("brand") : color("white"))};
+  color: ${props => (props.isSelected ? color("brand") : color("text-white"))};
 
   border-radius: 0.3em;
   padding: 0.2em;
diff --git a/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetFieldMetadataSidebar/MappedFieldPicker/MappedFieldPicker.styled.tsx b/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetFieldMetadataSidebar/MappedFieldPicker/MappedFieldPicker.styled.tsx
index 60ee95e04ac..416988c5148 100644
--- a/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetFieldMetadataSidebar/MappedFieldPicker/MappedFieldPicker.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/DatasetEditor/DatasetFieldMetadataSidebar/MappedFieldPicker/MappedFieldPicker.styled.tsx
@@ -2,18 +2,17 @@ import { css } from "@emotion/react";
 import styled from "@emotion/styled";
 
 import SelectButton from "metabase/core/components/SelectButton";
-import { color } from "metabase/lib/colors";
 
 export const StyledSelectButton = styled(SelectButton)`
   ${props =>
     props.hasValue &&
     css`
-      color: ${color("text-white")} !important;
+      color: var(--mb-color-text-white) !important;
       background-color: var(--mb-color-brand);
       border-color: var(--mb-color-brand);
 
       .Icon {
-        color: ${color("text-white")};
+        color: var(--mb-color-text-white);
       }
     `};
 `;
diff --git a/frontend/src/metabase/query_builder/components/DatasetEditor/EditorTabs/EditorTabs.styled.tsx b/frontend/src/metabase/query_builder/components/DatasetEditor/EditorTabs/EditorTabs.styled.tsx
index aa014aa6395..41d70d3e8f6 100644
--- a/frontend/src/metabase/query_builder/components/DatasetEditor/EditorTabs/EditorTabs.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/DatasetEditor/EditorTabs/EditorTabs.styled.tsx
@@ -1,7 +1,7 @@
 import { css } from "@emotion/react";
 import styled from "@emotion/styled";
 
-import { alpha, darken, color } from "metabase/lib/colors";
+import { alpha, darken } from "metabase/lib/colors";
 
 export const TabBar = styled.ul`
   display: flex;
@@ -40,7 +40,7 @@ export const Tab = styled.label<{ selected: boolean; disabled?: boolean }>`
   align-items: center;
   padding: 6px 12px;
 
-  color: ${color("text-white")};
+  color: var(--mb-color-text-white);
   font-weight: bold;
 
   border: 2px solid;
diff --git a/frontend/src/metabase/query_builder/components/NativeQueryEditor/NativeQueryEditor.styled.tsx b/frontend/src/metabase/query_builder/components/NativeQueryEditor/NativeQueryEditor.styled.tsx
index a147fe0608a..f71c1f21f29 100644
--- a/frontend/src/metabase/query_builder/components/NativeQueryEditor/NativeQueryEditor.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/NativeQueryEditor/NativeQueryEditor.styled.tsx
@@ -24,7 +24,7 @@ const getAceEditorStyles = () => css`
   .ace_search_field,
   .ace_searchbtn,
   .ace_button {
-    background-color: ${color("white")};
+    background-color: var(--mb-color-bg-white);
     border-radius: 5px;
     border: 1px solid var(--mb-color-border);
   }
diff --git a/frontend/src/metabase/query_builder/components/QueryDownloadPopover/QueryDownloadPopover.styled.tsx b/frontend/src/metabase/query_builder/components/QueryDownloadPopover/QueryDownloadPopover.styled.tsx
index 8c8e8c54146..0d14361c257 100644
--- a/frontend/src/metabase/query_builder/components/QueryDownloadPopover/QueryDownloadPopover.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/QueryDownloadPopover/QueryDownloadPopover.styled.tsx
@@ -43,7 +43,7 @@ export const DownloadButtonText = styled.div`
   font-weight: bold;
 
   ${DownloadButtonRoot}:hover & {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
   }
 `;
 
@@ -52,6 +52,6 @@ export const DownloadButtonSecondaryText = styled.div`
   font-weight: bold;
 
   ${DownloadButtonRoot}:hover & {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
   }
 `;
diff --git a/frontend/src/metabase/query_builder/components/expressions/ExpressionEditorSuggestions/ExpressionEditorSuggestions.styled.tsx b/frontend/src/metabase/query_builder/components/expressions/ExpressionEditorSuggestions/ExpressionEditorSuggestions.styled.tsx
index 9ffbb082b7b..44437d48cc3 100644
--- a/frontend/src/metabase/query_builder/components/expressions/ExpressionEditorSuggestions/ExpressionEditorSuggestions.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/expressions/ExpressionEditorSuggestions/ExpressionEditorSuggestions.styled.tsx
@@ -16,7 +16,7 @@ export const SuggestionMatch = styled.span`
 `;
 
 const highlighted = css`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   background-color: var(--mb-color-brand);
 `;
 
@@ -27,8 +27,6 @@ export const ExpressionListItem = styled.li<{ isHighlighted: boolean }>`
   padding-right: 0.5rem;
   cursor: pointer;
   height: 2rem;
-  display: flex;
-  align-items: center;
 
   ${props => props.isHighlighted && highlighted}
 `;
@@ -50,7 +48,6 @@ export const SuggestionTitle = styled.span`
 `;
 
 export const PopoverHoverTarget = styled(BasePopoverHoverTarget)`
-  padding: 0;
   margin-left: auto;
   padding: 0.3125rem 0;
   visibility: hidden;
diff --git a/frontend/src/metabase/query_builder/components/expressions/ExtractColumn/ExtractColumn.module.css b/frontend/src/metabase/query_builder/components/expressions/ExtractColumn/ExtractColumn.module.css
index 85d8a6a556e..7252b05a2b9 100644
--- a/frontend/src/metabase/query_builder/components/expressions/ExtractColumn/ExtractColumn.module.css
+++ b/frontend/src/metabase/query_builder/components/expressions/ExtractColumn/ExtractColumn.module.css
@@ -18,7 +18,7 @@
 
     .content,
     .example {
-      color: var(--color-white);
+      color: var(--mb-color-text-white);
     }
   }
 
diff --git a/frontend/src/metabase/query_builder/components/notebook/FieldsPickerIcon.tsx b/frontend/src/metabase/query_builder/components/notebook/FieldsPickerIcon.tsx
index 76557df4f67..87b14e36547 100644
--- a/frontend/src/metabase/query_builder/components/notebook/FieldsPickerIcon.tsx
+++ b/frontend/src/metabase/query_builder/components/notebook/FieldsPickerIcon.tsx
@@ -3,13 +3,12 @@ import { t } from "ttag";
 
 import IconButtonWrapper from "metabase/components/IconButtonWrapper";
 import Tooltip from "metabase/core/components/Tooltip";
-import { color } from "metabase/lib/colors";
 import { Icon } from "metabase/ui";
 
 import { NotebookCell } from "./NotebookCell";
 
 const FieldPickerContentContainer = styled(IconButtonWrapper)`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   padding: ${NotebookCell.CONTAINER_PADDING};
   opacity: 0.5;
 `;
diff --git a/frontend/src/metabase/query_builder/components/notebook/NotebookCell/NotebookCell.styled.tsx b/frontend/src/metabase/query_builder/components/notebook/NotebookCell/NotebookCell.styled.tsx
index 3925883a4aa..048c21eb5b7 100644
--- a/frontend/src/metabase/query_builder/components/notebook/NotebookCell/NotebookCell.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/notebook/NotebookCell/NotebookCell.styled.tsx
@@ -1,7 +1,7 @@
 import { css } from "@emotion/react";
 import styled from "@emotion/styled";
 
-import { alpha } from "metabase/lib/colors";
+import { alpha, color } from "metabase/lib/colors";
 
 export type BorderSide = "top" | "right" | "bottom" | "left";
 
@@ -26,7 +26,7 @@ export const NotebookCellItemContainer = styled.div<{
   display: flex;
   align-items: center;
   font-weight: bold;
-  color: ${props => (props.inactive ? props.color : "white")};
+  color: ${props => (props.inactive ? props.color : color("text-white"))};
   border-radius: 6px;
 
   border: 2px solid transparent;
@@ -75,7 +75,10 @@ export const NotebookCellItemContentContainer = styled.div<{
   ${props =>
     !!props.border &&
     css`
-    border-${props.border}: 1px solid ${alpha("white", 0.25)};
+    border-${props.border}: 1px solid ${alpha(
+      props.theme.fn.themeColor("bg-white"),
+      0.25,
+    )};
   `}
 
   ${props =>
diff --git a/frontend/src/metabase/query_builder/components/notebook/NotebookNativePreview/NotebookNativePreview.tsx b/frontend/src/metabase/query_builder/components/notebook/NotebookNativePreview/NotebookNativePreview.tsx
index b0cd55befaa..296c01b6c3d 100644
--- a/frontend/src/metabase/query_builder/components/notebook/NotebookNativePreview/NotebookNativePreview.tsx
+++ b/frontend/src/metabase/query_builder/components/notebook/NotebookNativePreview/NotebookNativePreview.tsx
@@ -68,7 +68,7 @@ export const NotebookNativePreview = (): JSX.Element => {
       data-testid="native-query-preview-sidebar"
       w="100%"
       h="100%"
-      bg={color("white")}
+      bg="bg-white"
       display="flex"
       style={{ flexDirection: "column" }}
     >
diff --git a/frontend/src/metabase/query_builder/components/notebook/steps/DataStep/DataStep.styled.tsx b/frontend/src/metabase/query_builder/components/notebook/steps/DataStep/DataStep.styled.tsx
index 5dfbb098ed4..7b6eb3ced7b 100644
--- a/frontend/src/metabase/query_builder/components/notebook/steps/DataStep/DataStep.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/notebook/steps/DataStep/DataStep.styled.tsx
@@ -1,12 +1,11 @@
 import styled from "@emotion/styled";
 
 import IconButtonWrapper from "metabase/components/IconButtonWrapper";
-import { color } from "metabase/lib/colors";
 
 import { NotebookCell } from "../../NotebookCell";
 
 export const DataStepIconButton = styled(IconButtonWrapper)`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   padding: ${NotebookCell.CONTAINER_PADDING};
   opacity: 0.5;
 `;
diff --git a/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinConditionColumnPicker/JoinConditionColumnPicker.tsx b/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinConditionColumnPicker/JoinConditionColumnPicker.tsx
index a614dfc2c60..7cc8b1a72c6 100644
--- a/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinConditionColumnPicker/JoinConditionColumnPicker.tsx
+++ b/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinConditionColumnPicker/JoinConditionColumnPicker.tsx
@@ -116,7 +116,7 @@ const JoinColumnTarget = forwardRef(function JoinColumnTarget(
           display="block"
           size={11}
           lh={1}
-          color={columnInfo ? "white" : "brand"}
+          color={columnInfo ? "text-white" : "brand"}
           align="left"
           weight={400}
         >
@@ -125,7 +125,7 @@ const JoinColumnTarget = forwardRef(function JoinColumnTarget(
       )}
       <Text
         display="block"
-        color={columnInfo ? "white" : "brand"}
+        color={columnInfo ? "text-white" : "brand"}
         align="left"
         weight={700}
         lh={1}
diff --git a/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinConditionOperatorPicker/JoinConditionOperatorPicker.styled.tsx b/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinConditionOperatorPicker/JoinConditionOperatorPicker.styled.tsx
index 6f2d89ab2e6..56a4ae292ab 100644
--- a/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinConditionOperatorPicker/JoinConditionOperatorPicker.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinConditionOperatorPicker/JoinConditionOperatorPicker.styled.tsx
@@ -5,7 +5,7 @@ import SelectList from "metabase/components/SelectList";
 import { color, lighten } from "metabase/lib/colors";
 
 const getCompleteConditionStyle = (theme: Theme, isOpened = false) => css`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   background-color: ${isOpened ? lighten("brand", 0.1) : "transparent"};
 
   &:hover,
diff --git a/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinConditionRemoveButton/JoinConditionRemoveButton.styled.tsx b/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinConditionRemoveButton/JoinConditionRemoveButton.styled.tsx
index 55027140d28..a4d09868d1b 100644
--- a/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinConditionRemoveButton/JoinConditionRemoveButton.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinConditionRemoveButton/JoinConditionRemoveButton.styled.tsx
@@ -13,10 +13,10 @@ export const RemoveButton = styled.button<RemoveButtonProps>`
   width: 44px;
   cursor: pointer;
   border-radius: 0 8px 8px 0;
-  border-left: 1px solid ${alpha(color("white"), 0.25)};
+  border-left: 1px solid ${() => alpha(color("bg-white"), 0.25)};
 
   color: ${props =>
-    props.isConditionComplete ? color("white") : color("brand")};
+    props.isConditionComplete ? color("text-white") : color("brand")};
 
   &:hover,
   &:focus {
diff --git a/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinTablePicker/JoinTablePicker.styled.tsx b/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinTablePicker/JoinTablePicker.styled.tsx
index de3138e294c..0ea11a372b5 100644
--- a/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinTablePicker/JoinTablePicker.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/notebook/steps/JoinStep/JoinTablePicker/JoinTablePicker.styled.tsx
@@ -1,12 +1,11 @@
 import styled from "@emotion/styled";
 
 import IconButtonWrapper from "metabase/components/IconButtonWrapper/IconButtonWrapper";
-import { color } from "metabase/lib/colors";
 
 import { NotebookCell } from "../../../NotebookCell";
 
 export const ColumnPickerButton = styled(IconButtonWrapper)`
   padding: ${NotebookCell.CONTAINER_PADDING};
   opacity: 0.5;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
 `;
diff --git a/frontend/src/metabase/query_builder/components/notebook/steps/SortStep/SortStep.styled.tsx b/frontend/src/metabase/query_builder/components/notebook/steps/SortStep/SortStep.styled.tsx
index fe9898fb87f..5a9f62abd30 100644
--- a/frontend/src/metabase/query_builder/components/notebook/steps/SortStep/SortStep.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/notebook/steps/SortStep/SortStep.styled.tsx
@@ -1,13 +1,11 @@
 import styled from "@emotion/styled";
 
-import { color } from "metabase/lib/colors";
-
 export const SortDirectionButton = styled.button`
   display: flex;
   align-items: center;
   gap: 0.5rem;
 
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   font-weight: 700;
   cursor: pointer;
 `;
diff --git a/frontend/src/metabase/query_builder/components/template_tags/SnippetRow/SnippetRow.styled.tsx b/frontend/src/metabase/query_builder/components/template_tags/SnippetRow/SnippetRow.styled.tsx
index d8855cb142b..950ab68f1bf 100644
--- a/frontend/src/metabase/query_builder/components/template_tags/SnippetRow/SnippetRow.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/template_tags/SnippetRow/SnippetRow.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import Button from "metabase/core/components/Button";
-import { color } from "metabase/lib/colors";
 
 export const SnippetButton = styled(Button)`
   color: var(--mb-color-brand);
@@ -9,7 +8,7 @@ export const SnippetButton = styled(Button)`
   margin-top: 0.5rem;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 `;
diff --git a/frontend/src/metabase/query_builder/components/template_tags/TagEditorParamParts/TagEditorParam.styled.tsx b/frontend/src/metabase/query_builder/components/template_tags/TagEditorParamParts/TagEditorParam.styled.tsx
index bd1eb2de546..d4d7c91b2bd 100644
--- a/frontend/src/metabase/query_builder/components/template_tags/TagEditorParamParts/TagEditorParam.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/template_tags/TagEditorParamParts/TagEditorParam.styled.tsx
@@ -45,7 +45,7 @@ export const DefaultParameterValueWidget = styled(ParameterValueWidget)`
   font-weight: 700;
   color: ${color("text-medium")};
   border-radius: 0.5rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   border: 2px solid var(--mb-color-border);
 `;
 
diff --git a/frontend/src/metabase/query_builder/components/view/QuestionDisplayToggle/QuestionDisplayToggle.styled.tsx b/frontend/src/metabase/query_builder/components/view/QuestionDisplayToggle/QuestionDisplayToggle.styled.tsx
index 63fa588dee7..3df96a76e07 100644
--- a/frontend/src/metabase/query_builder/components/view/QuestionDisplayToggle/QuestionDisplayToggle.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/view/QuestionDisplayToggle/QuestionDisplayToggle.styled.tsx
@@ -23,6 +23,6 @@ export const ToggleIcon = styled.div<ToggleIconProps>`
   padding: 4px 8px;
   cursor: pointer;
   background-color: ${props => (props.active ? color("brand") : "transparent")};
-  color: ${props => (props.active ? "white" : "inherit")};
+  color: ${props => (props.active ? "var(--mb-color-text-white)" : "inherit")};
   border-radius: 99px;
 `;
diff --git a/frontend/src/metabase/query_builder/components/view/View/NotebookContainer/NotebookContainer.tsx b/frontend/src/metabase/query_builder/components/view/View/NotebookContainer/NotebookContainer.tsx
index 2f6f3292729..ae9f2a958d9 100644
--- a/frontend/src/metabase/query_builder/components/view/View/NotebookContainer/NotebookContainer.tsx
+++ b/frontend/src/metabase/query_builder/components/view/View/NotebookContainer/NotebookContainer.tsx
@@ -4,7 +4,7 @@ import type { ResizeCallbackData, ResizableBoxProps } from "react-resizable";
 import { ResizableBox } from "react-resizable";
 import { useWindowSize } from "react-use";
 
-import { color, darken } from "metabase/lib/colors";
+import { darken } from "metabase/lib/colors";
 import { useSelector, useDispatch } from "metabase/lib/redux";
 import {
   setNotebookNativePreviewSidebarWidth,
@@ -98,7 +98,7 @@ export const NotebookContainer = ({
     <Flex
       pos="absolute"
       inset={0}
-      bg={color("white")}
+      bg="bg-white"
       opacity={isOpen ? 1 : 0}
       style={{
         transform: transformStyle,
diff --git a/frontend/src/metabase/query_builder/components/view/ViewButton.tsx b/frontend/src/metabase/query_builder/components/view/ViewButton.tsx
index 4d77362e738..a1d6cf01c02 100644
--- a/frontend/src/metabase/query_builder/components/view/ViewButton.tsx
+++ b/frontend/src/metabase/query_builder/components/view/ViewButton.tsx
@@ -14,7 +14,7 @@ const ViewButton = styled(Button)<Props>`
     active ? color : alpha(color, 0.2)};
 
   color: ${({ active, color = getDefaultColor() }) =>
-    active ? "white" : color};
+    active ? "var(--mb-color-text-white)" : color};
 
   border: none;
   transition: background 300ms linear, border 300ms linear;
@@ -23,7 +23,7 @@ const ViewButton = styled(Button)<Props>`
     background-color: ${({ active, color = getDefaultColor() }) =>
       active ? alpha(color, 0.8) : alpha(color, 0.35)};
     color: ${({ active, color = getDefaultColor() }) =>
-      active ? "white" : color};
+      active ? "var(--mb-color-text-white)" : color};
   }
 
   > .Icon {
diff --git a/frontend/src/metabase/query_builder/components/view/ViewFooter.styled.tsx b/frontend/src/metabase/query_builder/components/view/ViewFooter.styled.tsx
index d3e2cab9731..983cd8d7b1c 100644
--- a/frontend/src/metabase/query_builder/components/view/ViewFooter.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/view/ViewFooter.styled.tsx
@@ -15,6 +15,6 @@ export const FooterButtonGroup = styled(ButtonGroup)`
   align-items: stretch;
 
   ${Button.Root} {
-    border: 1px solid ${"white"};
+    border: 1px solid var(--mb-color-bg-white);
   }
 `;
diff --git a/frontend/src/metabase/query_builder/components/view/ViewHeader/ViewHeader.styled.tsx b/frontend/src/metabase/query_builder/components/view/ViewHeader/ViewHeader.styled.tsx
index 549b5c26174..851af984e98 100644
--- a/frontend/src/metabase/query_builder/components/view/ViewHeader/ViewHeader.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/view/ViewHeader/ViewHeader.styled.tsx
@@ -82,7 +82,7 @@ export const HeaderButton = styled(Button)<{ active: boolean }>`
   font-size: 0.875rem;
   background-color: ${({ active, color = getDefaultColor() }) =>
     active ? color : "transparent"};
-  color: ${({ active }) => (active ? "white" : color("text-dark"))};
+  color: ${({ active }) => (active ? color("text-white") : color("text-dark"))};
   &:hover {
     background-color: ${({ color = getDefaultColor() }) => alpha(color, 0.15)};
     color: ${({ color }) => color};
@@ -213,6 +213,6 @@ export const ViewRunButtonWithTooltip = styled(
   color: ${color("text-dark")};
 
   &:hover {
-    color: ${props => (props.isDirty ? color("white") : color("brand"))};
+    color: ${props => (props.isDirty ? color("text-white") : color("brand"))};
   }
 `;
diff --git a/frontend/src/metabase/query_builder/components/view/ViewHeader/components/ToggleNativeQueryPreview/ToggleNativeQueryPreview.styled.tsx b/frontend/src/metabase/query_builder/components/view/ViewHeader/components/ToggleNativeQueryPreview/ToggleNativeQueryPreview.styled.tsx
index 02080434273..9f56618e60c 100644
--- a/frontend/src/metabase/query_builder/components/view/ViewHeader/components/ToggleNativeQueryPreview/ToggleNativeQueryPreview.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/view/ViewHeader/components/ToggleNativeQueryPreview/ToggleNativeQueryPreview.styled.tsx
@@ -9,7 +9,7 @@ interface SqlButtonProps {
 
 export const SqlButton = styled(IconButtonWrapper)<SqlButtonProps>`
   color: ${({ isSelected }) =>
-    isSelected ? color("white") : color("text-dark")};
+    isSelected ? color("text-white") : color("text-dark")};
   background-color: ${({ isSelected }) => isSelected && color("brand")};
   height: 2rem;
   width: 2rem;
diff --git a/frontend/src/metabase/query_builder/components/view/sidebars/ChartTypeSidebar.styled.tsx b/frontend/src/metabase/query_builder/components/view/sidebars/ChartTypeSidebar.styled.tsx
index 55f00cb1369..e41ad6a7a53 100644
--- a/frontend/src/metabase/query_builder/components/view/sidebars/ChartTypeSidebar.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/view/sidebars/ChartTypeSidebar.styled.tsx
@@ -9,7 +9,7 @@ export interface OptionRootProps {
 
 const getOptionIconColor = ({ isSelected }: OptionIconContainerProps) => {
   if (isSelected) {
-    return color("white");
+    return color("text-white");
   } else {
     return color("brand");
   }
@@ -56,7 +56,7 @@ export const SettingsButton = styled(Button)`
   border: 1px solid var(--mb-color-border);
 
   border-radius: 50px;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   opacity: 0;
 `;
 
diff --git a/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/AddAggregationButton/AddAggregationButton.styled.tsx b/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/AddAggregationButton/AddAggregationButton.styled.tsx
index 8fdcbe6b92a..7cb9a7fd211 100644
--- a/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/AddAggregationButton/AddAggregationButton.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/AddAggregationButton/AddAggregationButton.styled.tsx
@@ -1,16 +1,15 @@
 import styled from "@emotion/styled";
 
 import Button from "metabase/core/components/Button";
-import { color } from "metabase/lib/colors";
 
 export const AddAggregationButtonRoot = styled(Button)`
   padding: 0.625rem;
 
-  color: ${color("summarize")};
+  color: var(--mb-color-summarize);
   background-color: var(--mb-color-bg-light);
 
   &:hover {
-    color: ${color("summarize")};
+    color: var(--mb-color-summarize);
     background-color: var(--mb-color-bg-medium);
   }
 `;
diff --git a/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/AggregationItem/AggregationItem.styled.tsx b/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/AggregationItem/AggregationItem.styled.tsx
index 88acaafd8e2..285e7f59cd7 100644
--- a/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/AggregationItem/AggregationItem.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/AggregationItem/AggregationItem.styled.tsx
@@ -1,6 +1,6 @@
 import styled from "@emotion/styled";
 
-import { color, alpha } from "metabase/lib/colors";
+import { alpha } from "metabase/lib/colors";
 import { Icon } from "metabase/ui";
 
 export const Root = styled.button`
@@ -9,16 +9,16 @@ export const Root = styled.button`
   padding: 0.5rem;
   font-weight: bold;
   border-radius: 6px;
-  color: ${color("white")};
-  background-color: ${color("summarize")};
+  color: var(--mb-color-text-white);
+  background-color: var(--mb-color-summarize);
   transition: background 300ms linear, border 300ms linear;
   min-height: 34px;
   min-width: 34px;
   cursor: pointer;
 
   &:hover {
-    background-color: ${alpha("summarize", 0.8)};
-    border-color: ${alpha("summarize", 0.8)};
+    background-color: ${() => alpha("summarize", 0.8)};
+    border-color: ${() => alpha("summarize", 0.8)};
   }
 `;
 
diff --git a/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/BreakoutColumnList/BreakoutColumnList.styled.tsx b/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/BreakoutColumnList/BreakoutColumnList.styled.tsx
index ba95119c7d6..d7c4c45199e 100644
--- a/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/BreakoutColumnList/BreakoutColumnList.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/BreakoutColumnList/BreakoutColumnList.styled.tsx
@@ -1,14 +1,12 @@
 import styled from "@emotion/styled";
 
-import { color } from "metabase/lib/colors";
-
 export const ColumnGroupName = styled.div`
   margin: 1rem 0 0.5rem 0;
   text-transform: uppercase;
   font-weight: 700;
   font-size: 0.75rem;
   padding: 0 0.5rem;
-  color: ${color("summarize")};
+  color: var(--mb-color-summarize);
 `;
 
 export const SearchContainer = styled.div`
diff --git a/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/BreakoutColumnList/BreakoutColumnListItem/BreakoutColumnListItem.styled.tsx b/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/BreakoutColumnList/BreakoutColumnListItem/BreakoutColumnListItem.styled.tsx
index 1a9fa2fc042..9bdc1c808f8 100644
--- a/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/BreakoutColumnList/BreakoutColumnListItem/BreakoutColumnListItem.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/BreakoutColumnList/BreakoutColumnListItem/BreakoutColumnListItem.styled.tsx
@@ -1,4 +1,4 @@
-import { css } from "@emotion/react";
+import { css, type Theme } from "@emotion/react";
 import styled from "@emotion/styled";
 
 import { BucketPickerPopover } from "metabase/common/components/QueryColumnPicker/BucketPickerPopover";
@@ -26,14 +26,14 @@ export const TitleContainer = styled.div`
 `;
 
 export const RemoveButton = styled(Button)`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   background-color: transparent;
 
   opacity: 0.6;
   transition: all 100ms;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: transparent;
     opacity: 1;
   }
@@ -48,7 +48,7 @@ RemoveButton.defaultProps = {
 export const AddButton = styled(Button)`
   width: 34px;
   margin-left: 0.5rem;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   transition: none;
 `;
 
@@ -69,20 +69,20 @@ export const Title = styled.div`
   font-weight: 700;
 `;
 
-const selectedStyle = css`
+const getSelectedStyle = (theme: Theme) => css`
   ${Content},
   ${ColumnTypeIcon} {
-    background-color: ${color("summarize")};
-    color: ${color("white")};
+    background-color: var(--mb-color-summarize);
+    color: var(--mb-color-text-white);
   }
 
   ${BucketPickerPopover.TriggerButton} {
     opacity: 1;
-    color: ${alpha("white", 0.65)};
+    color: ${alpha(theme.fn.themeColor("text-white"), 0.65)};
   }
 
   ${BucketPickerPopover.TriggerButton}:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     opacity: 1;
   }
 `;
@@ -101,7 +101,7 @@ const unselectedStyle = css`
     ${Content},
     ${ColumnTypeIcon},
     ${AddButton} {
-      color: ${color("summarize")};
+      color: var(--mb-color-summarize);
       background-color: var(--mb-color-bg-light);
     }
 
@@ -128,5 +128,6 @@ export const Root = styled.li<{ isSelected: boolean }>`
   min-height: 34px;
   position: relative;
 
-  ${props => (props.isSelected ? selectedStyle : unselectedStyle)}
+  ${props =>
+    props.isSelected ? getSelectedStyle(props.theme) : unselectedStyle}
 `;
diff --git a/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/SummarizeSidebar.styled.tsx b/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/SummarizeSidebar.styled.tsx
index eede6d51fe4..41863d29ea7 100644
--- a/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/SummarizeSidebar.styled.tsx
+++ b/frontend/src/metabase/query_builder/components/view/sidebars/SummarizeSidebar/SummarizeSidebar.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import { AggregationPicker as BaseAggregationPicker } from "metabase/common/components/AggregationPicker";
-import { color } from "metabase/lib/colors";
 import SidebarContent from "metabase/query_builder/components/SidebarContent";
 
 export const SidebarView = styled(SidebarContent)`
@@ -30,7 +29,7 @@ export const AggregationsContainer = styled(Section)`
 `;
 
 export const AggregationPicker = styled(BaseAggregationPicker)`
-  color: ${color("summarize")};
+  color: var(--mb-color-summarize);
 `;
 
 export const ColumnListContainer = styled(Section)`
diff --git a/frontend/src/metabase/querying/components/FilterPanel/FilterPanelButton/FilterPanelButton.styled.tsx b/frontend/src/metabase/querying/components/FilterPanel/FilterPanelButton/FilterPanelButton.styled.tsx
index 3f0caff9f32..73a97b47516 100644
--- a/frontend/src/metabase/querying/components/FilterPanel/FilterPanelButton/FilterPanelButton.styled.tsx
+++ b/frontend/src/metabase/querying/components/FilterPanel/FilterPanelButton/FilterPanelButton.styled.tsx
@@ -17,13 +17,14 @@ const shouldForwardProp = (propName: string) => {
 export const FilterButton = styled(Button, {
   shouldForwardProp,
 })<FilterButtonProps>`
-  color: ${({ isExpanded }) => (isExpanded ? color("white") : color("filter"))};
+  color: ${({ isExpanded }) =>
+    isExpanded ? color("text-white") : color("filter")};
   background-color: ${({ isExpanded }) =>
     isExpanded ? alpha("filter", 0.8) : alpha("filter", 0.2)};
   transition: border 300ms linear, background 300ms linear;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-filter);
   }
 
diff --git a/frontend/src/metabase/questions/components/QuestionMoveToast/QuestionMoveToast.styled.tsx b/frontend/src/metabase/questions/components/QuestionMoveToast/QuestionMoveToast.styled.tsx
index 3e31053f590..c9cf2468937 100644
--- a/frontend/src/metabase/questions/components/QuestionMoveToast/QuestionMoveToast.styled.tsx
+++ b/frontend/src/metabase/questions/components/QuestionMoveToast/QuestionMoveToast.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import Collections from "metabase/entities/collections";
-import { color } from "metabase/lib/colors";
 import { space } from "metabase/styled-components/theme";
 import { Icon } from "metabase/ui";
 
@@ -11,7 +10,7 @@ export const ToastRoot = styled.div`
 `;
 
 export const StyledIcon = styled(Icon)`
-  color: ${color("text-white")};
+  color: var(--mb-color-text-white);
   margin-right: ${space(1)};
 `;
 
diff --git a/frontend/src/metabase/search/components/InfoText/InfoTextEditedInfo.styled.tsx b/frontend/src/metabase/search/components/InfoText/InfoTextEditedInfo.styled.tsx
index e33f7f2934e..4c4d2d4e545 100644
--- a/frontend/src/metabase/search/components/InfoText/InfoTextEditedInfo.styled.tsx
+++ b/frontend/src/metabase/search/components/InfoText/InfoTextEditedInfo.styled.tsx
@@ -2,7 +2,6 @@ import { css } from "@emotion/react";
 import styled from "@emotion/styled";
 
 import LastEditInfoLabel from "metabase/components/LastEditInfoLabel";
-import { color } from "metabase/lib/colors";
 import { breakpointMaxSmall } from "metabase/styled-components/theme";
 
 export const LastEditedInfoText = styled(LastEditInfoLabel)`
@@ -29,5 +28,5 @@ export const LastEditedInfoText = styled(LastEditInfoLabel)`
 `;
 
 export const LastEditedInfoTooltip = styled(LastEditInfoLabel)`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
 `;
diff --git a/frontend/src/metabase/search/components/SearchResult/components/ItemIcon.styled.tsx b/frontend/src/metabase/search/components/SearchResult/components/ItemIcon.styled.tsx
index 80353845510..c814bfb6ab1 100644
--- a/frontend/src/metabase/search/components/SearchResult/components/ItemIcon.styled.tsx
+++ b/frontend/src/metabase/search/components/SearchResult/components/ItemIcon.styled.tsx
@@ -32,5 +32,5 @@ export const IconWrapper = styled.div<{
   color: ${({ active, archived, type }) =>
     getColorForIconWrapper(active, archived, type)};
   flex-shrink: 0;
-  background: ${color("white")};
+  background: var(--mb-color-bg-white);
 `;
diff --git a/frontend/src/metabase/setup/components/ActiveStep/ActiveStep.styled.tsx b/frontend/src/metabase/setup/components/ActiveStep/ActiveStep.styled.tsx
index 74878d66eeb..2efaba935ea 100644
--- a/frontend/src/metabase/setup/components/ActiveStep/ActiveStep.styled.tsx
+++ b/frontend/src/metabase/setup/components/ActiveStep/ActiveStep.styled.tsx
@@ -9,7 +9,7 @@ export const StepRoot = styled.section`
   margin-bottom: 1.75rem;
   border: 1px solid var(--mb-color-border);
   border-radius: 0.5rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
 
   ${breakpointMinSmall} {
     padding: 4rem;
@@ -35,7 +35,7 @@ export const StepLabel = styled.div`
   height: 2.625rem;
   border: 1px solid var(--mb-color-border);
   border-radius: 50%;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
 `;
 
 export const StepLabelText = styled.span`
diff --git a/frontend/src/metabase/setup/components/CompletedStep/CompletedStep.styled.tsx b/frontend/src/metabase/setup/components/CompletedStep/CompletedStep.styled.tsx
index 7161d96523d..e64e9f5c5f4 100644
--- a/frontend/src/metabase/setup/components/CompletedStep/CompletedStep.styled.tsx
+++ b/frontend/src/metabase/setup/components/CompletedStep/CompletedStep.styled.tsx
@@ -10,7 +10,7 @@ export const StepRoot = styled.section`
   margin-bottom: 1.75rem;
   border: 1px solid var(--mb-color-border);
   border-radius: 0.5rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
 `;
 
 export const StepTitle = styled.div`
diff --git a/frontend/src/metabase/setup/components/InactiveStep/InactiveStep.styled.tsx b/frontend/src/metabase/setup/components/InactiveStep/InactiveStep.styled.tsx
index 2961085f2a7..4ac14863899 100644
--- a/frontend/src/metabase/setup/components/InactiveStep/InactiveStep.styled.tsx
+++ b/frontend/src/metabase/setup/components/InactiveStep/InactiveStep.styled.tsx
@@ -14,12 +14,11 @@ export const StepRoot = styled.section<Props>`
   padding: 1rem 2rem;
   margin-bottom: 1.75rem;
   background-color: ${props =>
-    props.isCompleted ? color("white") : "var(--mb-color-bg-medium)"};
+    color(props.isCompleted ? "bg-white" : "bg-medium")};
 `;
 
 export const StepTitle = styled.div<Props>`
-  color: ${props =>
-    props.isCompleted ? color("success") : "var(--mb-color-brand)"};
+  color: ${props => (props.isCompleted ? color("success") : color("brand"))};
   font-size: 1rem;
   font-weight: 700;
   margin: 0.5rem 0;
@@ -36,11 +35,10 @@ export const StepLabel = styled.div<Props>`
   width: 2.625rem;
   height: 2.625rem;
   border: 1px solid
-    ${props =>
-      props.isCompleted ? color("success") : "var(--mb-color-border)"};
+    ${props => (props.isCompleted ? color("success") : color("border"))};
   border-radius: 50%;
   background-color: ${props =>
-    props.isCompleted ? color("success") : color("white")};
+    props.isCompleted ? color("success") : color("bg-white")};
 `;
 
 export const StepLabelText = styled.span`
@@ -52,5 +50,5 @@ export const StepLabelText = styled.span`
 export const StepLabelIcon = styled(Icon)`
   width: 1rem;
   height: 1rem;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
 `;
diff --git a/frontend/src/metabase/setup/components/LanguageStep/LanguageStep.styled.tsx b/frontend/src/metabase/setup/components/LanguageStep/LanguageStep.styled.tsx
index 76474802484..34bb55d5aab 100644
--- a/frontend/src/metabase/setup/components/LanguageStep/LanguageStep.styled.tsx
+++ b/frontend/src/metabase/setup/components/LanguageStep/LanguageStep.styled.tsx
@@ -34,14 +34,14 @@ export interface LocaleContainerProps {
 export const LocaleButton = styled.span<LocaleContainerProps>`
   display: block;
   padding: 0.5rem;
-  color: ${props => color(props.checked ? "white" : "text-dark")};
+  color: ${props => color(props.checked ? "text-white" : "text-dark")};
   border-radius: 0.25rem;
   background-color: ${props =>
-    props.checked ? "var(--mb-color-brand)" : color("white")};
+    props.checked ? color("brand") : color("bg-white")};
   font-weight: 700;
 
   &:hover {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 
diff --git a/frontend/src/metabase/setup/components/NewsletterForm/NewsletterForm.styled.tsx b/frontend/src/metabase/setup/components/NewsletterForm/NewsletterForm.styled.tsx
index ff6697c9451..df071c14de6 100644
--- a/frontend/src/metabase/setup/components/NewsletterForm/NewsletterForm.styled.tsx
+++ b/frontend/src/metabase/setup/components/NewsletterForm/NewsletterForm.styled.tsx
@@ -26,7 +26,7 @@ export const EmailFormLabelCard = styled.div`
   display: flex;
   padding: 0 1.5rem;
   color: ${color("text-medium")};
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
 `;
 
 export const EmailFormLabelIcon = styled(Icon)`
@@ -66,14 +66,14 @@ export const EmailFormSuccessContainer = styled.div`
 `;
 
 export const EmailFormSuccessIcon = styled(Icon)`
-  color: ${color("success")};
+  color: var(--mb-color-success);
   width: 1rem;
   height: 1rem;
   margin-right: 1rem;
 `;
 
 export const EmailFormSuccessText = styled.div`
-  color: ${color("success")};
+  color: var(--mb-color-success);
   font-size: 1rem;
   font-weight: bold;
 `;
diff --git a/frontend/src/metabase/sharing/components/NewPulseSidebar.styled.tsx b/frontend/src/metabase/sharing/components/NewPulseSidebar.styled.tsx
index bcaf0718202..928d378e08b 100644
--- a/frontend/src/metabase/sharing/components/NewPulseSidebar.styled.tsx
+++ b/frontend/src/metabase/sharing/components/NewPulseSidebar.styled.tsx
@@ -2,7 +2,6 @@ import { css } from "@emotion/react";
 import styled from "@emotion/styled";
 
 import Card from "metabase/components/Card";
-import { color } from "metabase/lib/colors";
 
 export interface SlackCardProps {
   isConfigured: boolean;
@@ -15,7 +14,7 @@ export const ChannelCard = styled(Card)<SlackCardProps>`
       cursor: pointer;
 
       &:hover {
-        color: ${color("white")};
+        color: var(--mb-color-text-white);
         background-color: var(--mb-color-brand);
       }
     `}
diff --git a/frontend/src/metabase/static-viz/components/ProgressBar/ProgressBar.tsx b/frontend/src/metabase/static-viz/components/ProgressBar/ProgressBar.tsx
index c803068a3a0..29fe056fff7 100644
--- a/frontend/src/metabase/static-viz/components/ProgressBar/ProgressBar.tsx
+++ b/frontend/src/metabase/static-viz/components/ProgressBar/ProgressBar.tsx
@@ -105,18 +105,18 @@ const ProgressBar = ({
           <>
             <CheckMarkIcon
               size={layout.iconSize}
-              color="white"
+              color="var(--mb-color-text-white)"
               x={10}
               y={(layout.barHeight - layout.iconSize) / 2}
             />
             <Text
               fontSize={layout.fontSize}
               textAnchor="start"
-              color="white"
+              color="var(--mb-color-text-white)"
               x={layout.iconSize + 16}
               y={layout.barHeight / 2}
               verticalAnchor="middle"
-              fill="white"
+              fill="var(--mb-color-text-white)"
             >
               {barText}
             </Text>
diff --git a/frontend/src/metabase/status/components/StatusLarge/StatusLarge.styled.tsx b/frontend/src/metabase/status/components/StatusLarge/StatusLarge.styled.tsx
index 4890f8fa06e..76b711cbb04 100644
--- a/frontend/src/metabase/status/components/StatusLarge/StatusLarge.styled.tsx
+++ b/frontend/src/metabase/status/components/StatusLarge/StatusLarge.styled.tsx
@@ -7,7 +7,7 @@ import { color } from "metabase/lib/colors";
 export const StatusRoot = styled.div`
   width: 16rem;
   border-radius: 6px;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
   box-shadow: 0 1px 12px var(--mb-color-shadow);
   overflow: hidden;
   margin-top: 1rem;
@@ -31,11 +31,11 @@ export const StatusTitle = styled.div`
 
 export const StatusToggle = styled(IconButtonWrapper)`
   flex: 0 0 auto;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
 `;
 
 export const StatusBody = styled.div`
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
 `;
 
 export const StatusCardRoot = styled.div<{ hasBody?: boolean }>`
@@ -97,6 +97,7 @@ export const StatusCardIconContainer = styled.div<StatusCardIconContainerProps>`
   width: 1.5rem;
   height: 1.5rem;
   border-radius: 1rem;
-  color: ${color("white")};
-  background-color: ${props => color(props.isError ? "error" : "success")};
+  color: var(--mb-color-text-white);
+  background-color: ${props =>
+    props.isError ? color("error") : color("success")};
 `;
diff --git a/frontend/src/metabase/status/components/StatusSmall/StatusSmall.styled.tsx b/frontend/src/metabase/status/components/StatusSmall/StatusSmall.styled.tsx
index 2bacc7a6081..aecec0b50ab 100644
--- a/frontend/src/metabase/status/components/StatusSmall/StatusSmall.styled.tsx
+++ b/frontend/src/metabase/status/components/StatusSmall/StatusSmall.styled.tsx
@@ -14,7 +14,7 @@ const getIconColor = ({ status }: Props): string => {
     case "incomplete":
       return color("brand");
     default:
-      return color("white");
+      return color("text-white");
   }
 };
 
diff --git a/frontend/src/metabase/styled-components/containers/GlobalStyles/GlobalStyles.tsx b/frontend/src/metabase/styled-components/containers/GlobalStyles/GlobalStyles.tsx
index 3f945e92606..52822b9e404 100644
--- a/frontend/src/metabase/styled-components/containers/GlobalStyles/GlobalStyles.tsx
+++ b/frontend/src/metabase/styled-components/containers/GlobalStyles/GlobalStyles.tsx
@@ -36,6 +36,10 @@ export const GlobalStyles = (): JSX.Element => {
       --mb-color-error: ${color("error")};
       --mb-color-filter: ${color("filter")};
       --mb-color-shadow: ${color("shadow")};
+      --mb-color-success: ${color("success")};
+      --mb-color-summarize: ${color("summarize")};
+      --mb-color-text-white: ${color("text-white")};
+      --mb-color-warning: ${color("warning")};
 
       /*
         Theming-specific CSS variables.
diff --git a/frontend/src/metabase/timelines/collections/components/TimelineEmptyState/TimelineEmptyState.styled.tsx b/frontend/src/metabase/timelines/collections/components/TimelineEmptyState/TimelineEmptyState.styled.tsx
index e9f66cd1164..d56a516d35d 100644
--- a/frontend/src/metabase/timelines/collections/components/TimelineEmptyState/TimelineEmptyState.styled.tsx
+++ b/frontend/src/metabase/timelines/collections/components/TimelineEmptyState/TimelineEmptyState.styled.tsx
@@ -34,7 +34,7 @@ export const EmptyStateTooltip = styled.div`
 
 export const EmptyStateTooltipIcon = styled(Icon)`
   flex: 0 0 auto;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   width: 1rem;
   height: 1rem;
 `;
@@ -45,14 +45,14 @@ export const EmptyStateTooltipBody = styled.div`
 `;
 
 export const EmptyStateTooltipTitle = styled.div`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   font-weight: bold;
   margin-bottom: 0.25rem;
 `;
 
 export const EmptyStateTooltipDate = styled(DateTime)`
   display: block;
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
 `;
 
 export const EmptyStateThread = styled.div`
@@ -69,7 +69,7 @@ export const EmptyStateThreadLine = styled.div`
 `;
 
 export const EmptyStateThreadIcon = styled(Icon)`
-  color: ${color("white")};
+  color: var(--mb-color-text-white);
   width: 1rem;
   height: 1rem;
 `;
diff --git a/frontend/src/metabase/timelines/common/components/TimelinePicker/TimelinePicker.styled.tsx b/frontend/src/metabase/timelines/common/components/TimelinePicker/TimelinePicker.styled.tsx
index c6b9d386348..8152b619807 100644
--- a/frontend/src/metabase/timelines/common/components/TimelinePicker/TimelinePicker.styled.tsx
+++ b/frontend/src/metabase/timelines/common/components/TimelinePicker/TimelinePicker.styled.tsx
@@ -59,7 +59,7 @@ const selectedStyles = css`
   background-color: var(--mb-color-brand);
 
   ${CardTitle}, ${CardDescription}, ${CardAside} {
-    color: ${color("white")};
+    color: var(--mb-color-text-white);
   }
 
   ${CardIcon} {
@@ -67,8 +67,8 @@ const selectedStyles = css`
   }
 
   ${CardIconContainer} {
-    border-color: ${color("white")};
-    background-color: ${color("white")};
+    border-color: var(--mb-color-bg-white);
+    background-color: var(--mb-color-bg-white);
   }
 `;
 
diff --git a/frontend/src/metabase/ui/components/navigation/NavLink/NavLink.styled.tsx b/frontend/src/metabase/ui/components/navigation/NavLink/NavLink.styled.tsx
index 84259e0f204..e8c193b4ab4 100644
--- a/frontend/src/metabase/ui/components/navigation/NavLink/NavLink.styled.tsx
+++ b/frontend/src/metabase/ui/components/navigation/NavLink/NavLink.styled.tsx
@@ -26,14 +26,14 @@ export const getNavLinkOverrides = (): MantineThemeOverride["components"] => ({
             },
 
             backgroundColor: theme.fn.themeColor("brand"),
-            color: "white",
+            color: theme.fn.themeColor("text-white"),
 
             "& .emotion-NavLink-label": {
-              color: "white",
+              color: theme.fn.themeColor("text-white"),
             },
 
             "& .emotion-NavLink-icon": {
-              color: "white",
+              color: theme.fn.themeColor("text-white"),
             },
           },
         },
diff --git a/frontend/src/metabase/ui/utils/colors.ts b/frontend/src/metabase/ui/utils/colors.ts
index 3785266f60a..8cf04f5896c 100644
--- a/frontend/src/metabase/ui/utils/colors.ts
+++ b/frontend/src/metabase/ui/utils/colors.ts
@@ -43,6 +43,7 @@ const CUSTOM_COLORS = [
   "text-light",
   "text-medium",
   "text-white",
+  "warning",
   "white",
 ];
 
diff --git a/frontend/src/metabase/visualizations/components/ChartTooltip/TimelineEventTooltip.styled.tsx b/frontend/src/metabase/visualizations/components/ChartTooltip/TimelineEventTooltip.styled.tsx
index 8cba5afe331..1e49ea01ff4 100644
--- a/frontend/src/metabase/visualizations/components/ChartTooltip/TimelineEventTooltip.styled.tsx
+++ b/frontend/src/metabase/visualizations/components/ChartTooltip/TimelineEventTooltip.styled.tsx
@@ -1,7 +1,6 @@
 import styled from "@emotion/styled";
 
 import DateTime from "metabase/components/DateTime";
-import { darken } from "metabase/lib/colors";
 
 export const TimelineEventList = styled.ul`
   max-width: 300px;
@@ -34,7 +33,7 @@ export const TimelineEventName = styled.span`
 `;
 
 export const TimelineEventDate = styled(DateTime)`
-  color: ${darken("white", 0.02)};
+  color: var(--mb-color-text-white);
   font-size: 0.75rem;
   margin-top: 0.0625rem;
 `;
diff --git a/frontend/src/metabase/visualizations/components/ClickActions/ClickActionControl.module.css b/frontend/src/metabase/visualizations/components/ClickActions/ClickActionControl.module.css
index 8f4c7aa30fb..cb53bc97dd7 100644
--- a/frontend/src/metabase/visualizations/components/ClickActions/ClickActionControl.module.css
+++ b/frontend/src/metabase/visualizations/components/ClickActions/ClickActionControl.module.css
@@ -13,11 +13,11 @@ button.horizontalButton {
   color: var(--mb-color-text-dark);
 
   &:hover {
-    color: var(--color-white);
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
 
     .nested {
-      color: var(--color-white);
+      color: var(--mb-color-text-white);
     }
   }
 
diff --git a/frontend/src/metabase/visualizations/components/ClickActions/ClickActionControl.styled.tsx b/frontend/src/metabase/visualizations/components/ClickActions/ClickActionControl.styled.tsx
index 9e0613f98b0..539d8925cc9 100644
--- a/frontend/src/metabase/visualizations/components/ClickActions/ClickActionControl.styled.tsx
+++ b/frontend/src/metabase/visualizations/components/ClickActions/ClickActionControl.styled.tsx
@@ -35,7 +35,7 @@ export const TokenFilterActionButton = styled(Button)`
   border-radius: 100px;
 
   &:hover {
-    color: ${({ theme }) => theme.fn.themeColor("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
     border-color: var(--mb-color-brand);
   }
@@ -50,7 +50,7 @@ export const TokenActionButton = styled(Button)`
   border-radius: 100px;
 
   &:hover {
-    color: ${({ theme }) => theme.fn.themeColor("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
     border-color: var(--mb-color-brand);
   }
@@ -67,7 +67,7 @@ export const SortControl = styled(Button)`
   border-radius: 100px;
 
   &:hover {
-    color: ${({ theme }) => theme.fn.themeColor("white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
     border-color: var(--mb-color-brand);
   }
diff --git a/frontend/src/metabase/visualizations/components/TableInteractive/TableInteractive.styled.tsx b/frontend/src/metabase/visualizations/components/TableInteractive/TableInteractive.styled.tsx
index c579877201f..1fd58f4f600 100644
--- a/frontend/src/metabase/visualizations/components/TableInteractive/TableInteractive.styled.tsx
+++ b/frontend/src/metabase/visualizations/components/TableInteractive/TableInteractive.styled.tsx
@@ -62,7 +62,7 @@ export const ExpandButton = styled(Button)`
   margin-left: auto;
 
   &:hover {
-    color: ${({ theme }) => theme.fn?.themeColor("text-white")};
+    color: var(--mb-color-text-white);
     background-color: var(--mb-color-brand);
   }
 `;
diff --git a/frontend/src/metabase/visualizations/components/settings/ChartSettingFieldPicker.styled.tsx b/frontend/src/metabase/visualizations/components/settings/ChartSettingFieldPicker.styled.tsx
index 22ceb0c0bd8..eca98882c38 100644
--- a/frontend/src/metabase/visualizations/components/settings/ChartSettingFieldPicker.styled.tsx
+++ b/frontend/src/metabase/visualizations/components/settings/ChartSettingFieldPicker.styled.tsx
@@ -19,7 +19,7 @@ export const ChartSettingFieldPickerRoot = styled.div<ChartSettingFieldPickerRoo
   border-radius: 0.5rem;
   padding-right: 1rem;
   padding-left: 0.5rem;
-  background: ${color("white")};
+  background: var(--mb-color-bg-white);
 
   ${Triggerable.Trigger} {
     flex: 1;
@@ -51,7 +51,7 @@ export const ChartSettingFieldPickerRoot = styled.div<ChartSettingFieldPickerRoo
   }
 
   ${SelectButton.Root}:disabled {
-    background-color: ${color("white")};
+    background-color: var(--mb-color-bg-white);
   }
 `;
 
diff --git a/frontend/src/metabase/visualizations/components/settings/ColumnItem/ColumnItem.styled.tsx b/frontend/src/metabase/visualizations/components/settings/ColumnItem/ColumnItem.styled.tsx
index 056ed2fb31d..251d752aeca 100644
--- a/frontend/src/metabase/visualizations/components/settings/ColumnItem/ColumnItem.styled.tsx
+++ b/frontend/src/metabase/visualizations/components/settings/ColumnItem/ColumnItem.styled.tsx
@@ -17,7 +17,7 @@ export const ColumnItemRoot = styled.div<ColumnItemRootProps>`
   align-items: center;
   border: 1px solid var(--mb-color-border);
   border-radius: 0.5rem;
-  background: ${color("white")};
+  background: var(--mb-color-bg-white);
 
   &.dragging {
     cursor: grabbing;
diff --git a/frontend/src/metabase/visualizations/components/skeletons/StaticSkeleton/StaticSkeleton.styled.tsx b/frontend/src/metabase/visualizations/components/skeletons/StaticSkeleton/StaticSkeleton.styled.tsx
index 967ade644b8..3503665a246 100644
--- a/frontend/src/metabase/visualizations/components/skeletons/StaticSkeleton/StaticSkeleton.styled.tsx
+++ b/frontend/src/metabase/visualizations/components/skeletons/StaticSkeleton/StaticSkeleton.styled.tsx
@@ -54,5 +54,5 @@ export const SkeletonTooltipIconContainer = styled.div`
   bottom: -0.5rem;
   padding: 0.125rem;
   border-radius: 0.5rem;
-  background-color: ${color("white")};
+  background-color: var(--mb-color-bg-white);
 `;
diff --git a/frontend/src/metabase/visualizations/echarts/cartesian/option/series.ts b/frontend/src/metabase/visualizations/echarts/cartesian/option/series.ts
index 44946699cf1..0161a493633 100644
--- a/frontend/src/metabase/visualizations/echarts/cartesian/option/series.ts
+++ b/frontend/src/metabase/visualizations/echarts/cartesian/option/series.ts
@@ -275,7 +275,7 @@ export const buildEChartsLabelOptions = (
     fontWeight: CHART_STYLE.seriesLabels.weight,
     fontSize,
     color: renderingContext.getColor("text-dark"),
-    textBorderColor: renderingContext.getColor("white"),
+    textBorderColor: renderingContext.getColor("bg-white"),
     textBorderWidth: 3,
     formatter:
       formatter &&
@@ -407,7 +407,7 @@ function getDataLabelSeriesOption(
       fontWeight: CHART_STYLE.seriesLabels.weight,
       fontSize: CHART_STYLE.seriesLabels.size,
       color: renderingContext.getColor("text-dark"),
-      textBorderColor: renderingContext.getColor("white"),
+      textBorderColor: renderingContext.getColor("bg-white"),
       textBorderWidth: 3,
     },
     labelLayout: {
diff --git a/frontend/src/metabase/visualizations/echarts/cartesian/scatter/option/series.ts b/frontend/src/metabase/visualizations/echarts/cartesian/scatter/option/series.ts
index 2cdb59cfb6e..a728beb6b04 100644
--- a/frontend/src/metabase/visualizations/echarts/cartesian/scatter/option/series.ts
+++ b/frontend/src/metabase/visualizations/echarts/cartesian/scatter/option/series.ts
@@ -69,7 +69,7 @@ export function buildEChartsScatterSeries(
     itemStyle: {
       color: seriesModel.color,
       opacity: CHART_STYLE.opacity.scatter,
-      borderColor: renderingContext.getColor("white"),
+      borderColor: renderingContext.getColor("bg-white"),
       borderWidth: 1,
     },
     emphasis: {
diff --git a/frontend/src/metabase/visualizations/visualizations/Gauge/Gauge.jsx b/frontend/src/metabase/visualizations/visualizations/Gauge/Gauge.jsx
index c211770839d..b6fed349667 100644
--- a/frontend/src/metabase/visualizations/visualizations/Gauge/Gauge.jsx
+++ b/frontend/src/metabase/visualizations/visualizations/Gauge/Gauge.jsx
@@ -38,7 +38,7 @@ const getBackgroundArcColor = () => color("bg-medium");
 const getSegmentLabelColor = () => color("text-dark");
 const getCenterLabelColor = () => color("text-dark");
 const getArrowFillColor = () => color("text-medium");
-const getArrowStrokeColor = () => "white";
+const getArrowStrokeColor = () => color("bg-white");
 
 // in ems, but within the scaled 100px SVG element
 const FONT_SIZE_SEGMENT_LABEL = 0.25;
diff --git a/frontend/src/metabase/visualizations/visualizations/PivotTable/PivotTable.styled.tsx b/frontend/src/metabase/visualizations/visualizations/PivotTable/PivotTable.styled.tsx
index 2135166f178..2f578ffa57c 100644
--- a/frontend/src/metabase/visualizations/visualizations/PivotTable/PivotTable.styled.tsx
+++ b/frontend/src/metabase/visualizations/visualizations/PivotTable/PivotTable.styled.tsx
@@ -73,7 +73,7 @@ const getCellBackgroundColor = ({
     return alpha("bg-black", 0.1);
   }
 
-  return color(backgroundColor ?? "white");
+  return color(backgroundColor ?? "bg-white");
 };
 
 const getCellHoverBackground = (
@@ -95,7 +95,7 @@ const getColor = ({
   isNightMode,
 }: PivotTableCellProps & { theme: MantineTheme }) => {
   if (isNightMode) {
-    return color("white");
+    return color("text-white");
   }
 
   return color(theme.other.table.cell.textColor);
-- 
GitLab