diff --git a/app/assets/javascripts/admin/abuse_report/components/labels_select.vue b/app/assets/javascripts/admin/abuse_report/components/labels_select.vue
index a1c8e207cbdfe577e66b377b312fbcbb094148f4..8cf757269994ea95e58cf872aac3c8a7e2b4a487 100644
--- a/app/assets/javascripts/admin/abuse_report/components/labels_select.vue
+++ b/app/assets/javascripts/admin/abuse_report/components/labels_select.vue
@@ -171,7 +171,7 @@ export default {
         {{ $options.i18n.edit }}
       </gl-button>
     </div>
-    <div class="gl-mb-2 gl-text-gray-500" data-testid="selected-labels">
+    <div class="gl-mb-2 gl-text-subtle" data-testid="selected-labels">
       <template v-if="isLabelsEmpty">{{ $options.i18n.noLabels }}</template>
       <dropdown-value
         v-else
diff --git a/app/assets/javascripts/analytics/shared/components/date_ranges_dropdown.vue b/app/assets/javascripts/analytics/shared/components/date_ranges_dropdown.vue
index fd707749497da9bbe0d14110a0caafb9506994ce..59f6617550ce1176a09eccf0fd0b9239130b782a 100644
--- a/app/assets/javascripts/analytics/shared/components/date_ranges_dropdown.vue
+++ b/app/assets/javascripts/analytics/shared/components/date_ranges_dropdown.vue
@@ -127,7 +127,7 @@ export default {
 <template>
   <div class="gl-flex gl-items-center gl-gap-3">
     <gl-collapsible-listbox v-model="selectedValue" :items="items" @select="onSelect" />
-    <div v-if="showDateRangeString || showTooltip" class="gl-text-gray-500">
+    <div v-if="showDateRangeString || showTooltip" class="gl-text-subtle">
       <span v-if="showDateRangeString" data-testid="predefined-date-range-string">{{
         dateRangeString
       }}</span>
diff --git a/app/assets/javascripts/analytics/shared/components/projects_dropdown_filter.vue b/app/assets/javascripts/analytics/shared/components/projects_dropdown_filter.vue
index 1ddc805434be53b88e26c48505c62e5250b4598a..78c0a3304da94a8a7135878ebd112fd51deb12b7 100644
--- a/app/assets/javascripts/analytics/shared/components/projects_dropdown_filter.vue
+++ b/app/assets/javascripts/analytics/shared/components/projects_dropdown_filter.vue
@@ -282,7 +282,7 @@ export default {
         />
         <div>
           <div data-testid="project-name">{{ item.name }}</div>
-          <div class="gl-text-gray-500" data-testid="project-full-path">
+          <div class="gl-text-subtle" data-testid="project-full-path">
             {{ item.fullPath }}
           </div>
         </div>
diff --git a/app/assets/javascripts/boards/components/board_card_inner.vue b/app/assets/javascripts/boards/components/board_card_inner.vue
index a50783b98b928ec689c00d34ca58c8657f56f0a3..2488688a27f88f347d866f4338cadce9e163322d 100644
--- a/app/assets/javascripts/boards/components/board_card_inner.vue
+++ b/app/assets/javascripts/boards/components/board_card_inner.vue
@@ -334,7 +334,7 @@ export default {
               v-if="item.milestone"
               data-testid="issue-milestone"
               :milestone="item.milestone"
-              class="gl-mr-3 gl-inline-flex gl-max-w-15 gl-cursor-help gl-items-center gl-align-bottom gl-text-sm gl-text-gray-500"
+              class="gl-mr-3 gl-inline-flex gl-max-w-15 gl-cursor-help gl-items-center gl-align-bottom gl-text-sm gl-text-subtle"
             />
             <issue-iteration
               v-if="item.iteration"
diff --git a/app/assets/javascripts/boards/components/board_list_header.vue b/app/assets/javascripts/boards/components/board_list_header.vue
index 765f9ac5bedd8afcfaf4cd3685873df522a5af06..f03ba78251354a545977a253fe24b8844757a506 100644
--- a/app/assets/javascripts/boards/components/board_list_header.vue
+++ b/app/assets/javascripts/boards/components/board_list_header.vue
@@ -393,7 +393,7 @@ export default {
           v-gl-tooltip.hover
           :class="{
             '!gl-ml-2': list.collapsed && !showAssigneeListDetails,
-            'gl-text-gray-500': list.collapsed,
+            'gl-text-subtle': list.collapsed,
             'gl-block': list.collapsed || listType === 'milestone',
           }"
           :title="listTitle"
diff --git a/app/assets/javascripts/boards/components/sidebar/board_editable_item.vue b/app/assets/javascripts/boards/components/sidebar/board_editable_item.vue
index 1f95b19bfe6307730beee32ff165e3d6c7869765..d94581b635f40c77ba50b2eaef76998811af9c93 100644
--- a/app/assets/javascripts/boards/components/sidebar/board_editable_item.vue
+++ b/app/assets/javascripts/boards/components/sidebar/board_editable_item.vue
@@ -103,7 +103,7 @@ export default {
         {{ __('Edit') }}
       </gl-button>
     </header>
-    <div v-show="!edit" class="value gl-text-gray-500" data-testid="collapsed-content">
+    <div v-show="!edit" class="value gl-text-subtle" data-testid="collapsed-content">
       <slot name="collapsed">{{ __('None') }}</slot>
     </div>
     <div v-show="edit" data-testid="expanded-content">
diff --git a/app/assets/javascripts/ci/catalog/components/list/ci_resources_list_item.vue b/app/assets/javascripts/ci/catalog/components/list/ci_resources_list_item.vue
index a02da36575ad5d1e0484ed1be48d67325dafc5f9..fdca9aa22e39497da0987ca4ced351e72a9c2fc7 100644
--- a/app/assets/javascripts/ci/catalog/components/list/ci_resources_list_item.vue
+++ b/app/assets/javascripts/ci/catalog/components/list/ci_resources_list_item.vue
@@ -150,7 +150,7 @@ export default {
 </script>
 <template>
   <li
-    class="gl-flex gl-items-center gl-border-b-1 gl-border-gray-100 gl-py-3 gl-text-gray-500 gl-border-b-solid"
+    class="gl-flex gl-items-center gl-border-b-1 gl-border-gray-100 gl-py-3 gl-text-subtle gl-border-b-solid"
     data-testid="catalog-resource-item"
   >
     <gl-avatar
diff --git a/app/assets/javascripts/ci/pipeline_mini_graph/downstream_pipelines.vue b/app/assets/javascripts/ci/pipeline_mini_graph/downstream_pipelines.vue
index 6d006471a9e8ea44f7b34f7ee497ebe3684ac5f3..319f32439c24657edb5ae04f4aa3a6c50e69ed41 100644
--- a/app/assets/javascripts/ci/pipeline_mini_graph/downstream_pipelines.vue
+++ b/app/assets/javascripts/ci/pipeline_mini_graph/downstream_pipelines.vue
@@ -76,7 +76,7 @@ export default {
       v-gl-tooltip="{ title: counterTooltipText }"
       :title="counterTooltipText"
       :href="pipelinePath"
-      class="gl-inline-flex gl-h-6 gl-w-7 gl-items-center gl-justify-center gl-rounded-pill gl-bg-gray-50 gl-text-sm gl-text-gray-500 gl-no-underline"
+      class="gl-inline-flex gl-h-6 gl-w-7 gl-items-center gl-justify-center gl-rounded-pill gl-bg-gray-50 gl-text-sm gl-text-subtle gl-no-underline"
       data-testid="downstream-pipeline-counter"
     >
       {{ counterLabel }}
diff --git a/app/assets/javascripts/ci/pipeline_new/components/pipeline_new_form.vue b/app/assets/javascripts/ci/pipeline_new/components/pipeline_new_form.vue
index ac46030b577cc230d532a9ed912835ef91cd249a..45a86e2574462e051560bff4c6bae2eaee98ce4e 100644
--- a/app/assets/javascripts/ci/pipeline_new/components/pipeline_new_form.vue
+++ b/app/assets/javascripts/ci/pipeline_new/components/pipeline_new_form.vue
@@ -527,7 +527,7 @@ export default {
             />
           </template>
         </div>
-        <div v-if="descriptions[variable.key]" class="gl-mb-3 gl-text-gray-500">
+        <div v-if="descriptions[variable.key]" class="gl-mb-3 gl-text-subtle">
           {{ descriptions[variable.key] }}
         </div>
       </div>
@@ -546,7 +546,7 @@ export default {
         }}</gl-link>
       </template>
     </gl-form-group>
-    <div class="gl-mb-4 gl-text-gray-500">
+    <div class="gl-mb-4 gl-text-subtle">
       <gl-sprintf :message="$options.i18n.overrideNoteText">
         <template #bold="{ content }">
           <strong>
diff --git a/app/assets/javascripts/ci/pipelines_page/components/pipeline_url.vue b/app/assets/javascripts/ci/pipelines_page/components/pipeline_url.vue
index 506ba7c442dcd845e0f4206c0eafcc768676e771..d832c5f34e0f1b12ac26f3802418ad1a2077ccfc 100644
--- a/app/assets/javascripts/ci/pipelines_page/components/pipeline_url.vue
+++ b/app/assets/javascripts/ci/pipelines_page/components/pipeline_url.vue
@@ -181,9 +181,7 @@ export default {
           >
         </tooltip-on-truncate>
       </span>
-      <span v-else class="gl-text-gray-500">{{
-        __("Can't find HEAD commit for this branch")
-      }}</span>
+      <span v-else class="gl-text-subtle">{{ __("Can't find HEAD commit for this branch") }}</span>
     </div>
 
     <div class="gl-mb-2">
diff --git a/app/assets/javascripts/clusters_list/constants.js b/app/assets/javascripts/clusters_list/constants.js
index 6db98aa8dc329e0454efe082c71ad41e31811212..28f4fb43ea35be20f1913ad1268c0053e4686c9f 100644
--- a/app/assets/javascripts/clusters_list/constants.js
+++ b/app/assets/javascripts/clusters_list/constants.js
@@ -183,7 +183,7 @@ export const AGENT_STATUSES = {
   unused: {
     name: s__('ClusterAgents|Never connected'),
     icon: 'status-neutral',
-    class: 'gl-text-gray-500',
+    class: 'gl-text-subtle',
     tooltip: {
       title: s__('ClusterAgents|Agent never connected to GitLab'),
       body: s__('ClusterAgents|Make sure you are using a valid token.'),
diff --git a/app/assets/javascripts/content_editor/components/suggestions_dropdown.vue b/app/assets/javascripts/content_editor/components/suggestions_dropdown.vue
index 3592a4868529bde4bdb5af6019d8ec646e574029..09332119d2d6296002568a50cced73652098ec1f 100644
--- a/app/assets/javascripts/content_editor/components/suggestions_dropdown.vue
+++ b/app/assets/javascripts/content_editor/components/suggestions_dropdown.vue
@@ -297,7 +297,7 @@ export default {
                     <span v-safe-html:[$options.safeHtmlConfig]="highlight(item.username)"></span>
                     <small
                       v-safe-html:[$options.safeHtmlConfig]="highlight(avatarSubLabel(item))"
-                      class="gl-text-gray-500"
+                      class="gl-text-subtle"
                     ></small>
                   </span>
                 </span>
@@ -309,21 +309,21 @@ export default {
                   />
                   <small
                     v-safe-html:[$options.safeHtmlConfig]="highlight(item.reference || item.iid)"
-                    class="gl-text-gray-500"
+                    class="gl-text-subtle"
                   ></small>
                   <span v-safe-html:[$options.safeHtmlConfig]="highlight(item.title)"></span>
                 </span>
                 <span v-if="isVulnerability || isSnippet">
                   <small
                     v-safe-html:[$options.safeHtmlConfig]="highlight(item.id)"
-                    class="gl-text-gray-500"
+                    class="gl-text-subtle"
                   ></small>
                   <span v-safe-html:[$options.safeHtmlConfig]="highlight(item.title)"></span>
                 </span>
                 <span v-if="isEpic">
                   <small
                     v-safe-html:[$options.safeHtmlConfig]="highlight(item.reference)"
-                    class="gl-text-gray-500"
+                    class="gl-text-subtle"
                   ></small>
                   <span v-safe-html:[$options.safeHtmlConfig]="highlight(item.title)"></span>
                 </span>
@@ -337,7 +337,7 @@ export default {
                   <small
                     v-if="item.title.toLowerCase() !== item.slug.toLowerCase()"
                     v-safe-html:[$options.safeHtmlConfig]="highlight(`(${item.slug})`)"
-                    class="gl-text-gray-500"
+                    class="gl-text-subtle"
                   ></small>
                 </span>
                 <span v-if="isLabel" class="gl-flex">
@@ -351,11 +351,11 @@ export default {
                 <div v-if="isCommand">
                   <div class="gl-mb-1">
                     /<span v-safe-html:[$options.safeHtmlConfig]="highlight(item.name)"></span>
-                    <span class="gl-text-sm gl-text-gray-500">{{ item.params[0] }}</span>
+                    <span class="gl-text-sm gl-text-subtle">{{ item.params[0] }}</span>
                   </div>
                   <em
                     v-safe-html:[$options.safeHtmlConfig]="highlight(item.description)"
-                    class="gl-text-sm gl-text-gray-500"
+                    class="gl-text-sm gl-text-subtle"
                   ></em>
                 </div>
                 <div v-if="isEmoji" class="gl-flex gl-items-center">
diff --git a/app/assets/javascripts/contribution_events/components/contribution_event/contribution_event_base.vue b/app/assets/javascripts/contribution_events/components/contribution_event/contribution_event_base.vue
index e984d1abbfa99b80e786d5309a8741d6a9fa4209..e965c758fa1014f21a05e12dc3a37f1399426021 100644
--- a/app/assets/javascripts/contribution_events/components/contribution_event/contribution_event_base.vue
+++ b/app/assets/javascripts/contribution_events/components/contribution_event/contribution_event_base.vue
@@ -55,7 +55,7 @@ export default {
       <time-ago-tooltip :time="event.created_at" class="gl-mt-2 gl-text-sm gl-text-secondary" />
     </div>
     <div class="gl-pl-7" data-testid="event-body">
-      <div class="gl-text-sm gl-text-gray-500">
+      <div class="gl-text-sm gl-text-subtle">
         <gl-icon :name="iconName" />
         <gl-sprintf v-if="message" :message="message">
           <template #targetLink>
diff --git a/app/assets/javascripts/design_management/components/design_notes/design_discussion.vue b/app/assets/javascripts/design_management/components/design_notes/design_discussion.vue
index f272c5375d50b58383e4a7b2ba83acea8defba15..3dacf6d05448e87b5a4ac99944d10d6fb1e3dc95 100644
--- a/app/assets/javascripts/design_management/components/design_notes/design_discussion.vue
+++ b/app/assets/javascripts/design_management/components/design_notes/design_discussion.vue
@@ -328,10 +328,10 @@ export default {
           />
         </template>
         <template v-if="discussion.resolved" #resolved-status>
-          <p class="gl-m-0 gl-mt-5 gl-text-sm gl-text-gray-500" data-testid="resolved-message">
+          <p class="gl-m-0 gl-mt-5 gl-text-sm gl-text-subtle" data-testid="resolved-message">
             {{ __('Resolved by') }}
             <gl-link
-              class="link-inherit-color gl-text-sm gl-text-gray-500 gl-no-underline"
+              class="link-inherit-color gl-text-sm gl-text-subtle gl-no-underline"
               :href="discussion.resolvedBy.webUrl"
               target="_blank"
               >{{ discussion.resolvedBy.name }}</gl-link
diff --git a/app/assets/javascripts/design_management/components/toolbar/index.vue b/app/assets/javascripts/design_management/components/toolbar/index.vue
index a5fecec5a9d3846c835421c029d0bfd4f18ec9bf..50e09a1ccae6222f79ee72053aa2657c5dd31ca9 100644
--- a/app/assets/javascripts/design_management/components/toolbar/index.vue
+++ b/app/assets/javascripts/design_management/components/toolbar/index.vue
@@ -153,7 +153,7 @@ export default {
             class="gl-ml-2"
           />
         </h2>
-        <small v-if="updatedAt" class="gl-text-gray-500">{{ updatedText }}</small>
+        <small v-if="updatedAt" class="gl-text-subtle">{{ updatedText }}</small>
       </div>
       <close-button class="gl-ml-auto md:gl-hidden" />
     </div>
diff --git a/app/assets/javascripts/diffs/components/diff_line_note_form.vue b/app/assets/javascripts/diffs/components/diff_line_note_form.vue
index 54a975e922c09083a3aa5bd1697dbbb2b570c574..ba017aa28aac3721fb07c8a9630d377ccf59140d 100644
--- a/app/assets/javascripts/diffs/components/diff_line_note_form.vue
+++ b/app/assets/javascripts/diffs/components/diff_line_note_form.vue
@@ -241,7 +241,7 @@ export default {
 
 <template>
   <div class="content discussion-form discussion-form-container discussion-notes">
-    <div class="gl-mb-3 gl-pb-3 gl-text-gray-500">
+    <div class="gl-mb-3 gl-pb-3 gl-text-subtle">
       <multiline-comment-form
         :line="line"
         :line-range="lines"
diff --git a/app/assets/javascripts/diffs/components/diff_stats.vue b/app/assets/javascripts/diffs/components/diff_stats.vue
index 368df987ed8d1a42ced71e49132a58fc4edfefaa..02cf173ca145eee07687b358250e704e281d0f21 100644
--- a/app/assets/javascripts/diffs/components/diff_stats.vue
+++ b/app/assets/javascripts/diffs/components/diff_stats.vue
@@ -63,7 +63,7 @@ export default {
     <div v-else class="diff-stats-contents">
       <div v-if="hasDiffFiles" class="diff-stats-group">
         <gl-icon name="doc-code" class="diff-stats-icon" variant="subtle" />
-        <span class="gl-font-bold gl-text-gray-500">{{ diffsCount }} {{ filesText }}</span>
+        <span class="gl-font-bold gl-text-subtle">{{ diffsCount }} {{ filesText }}</span>
       </div>
       <div
         class="diff-stats-group gl-flex gl-items-center gl-text-green-600"
diff --git a/app/assets/javascripts/environments/components/deployment.vue b/app/assets/javascripts/environments/components/deployment.vue
index a0efa55a7f832f7247f41a4fcd744a085e2fd079..8dfc6cd8c07aab62710f25d8b0ee7927ff6ec885 100644
--- a/app/assets/javascripts/environments/components/deployment.vue
+++ b/app/assets/javascripts/environments/components/deployment.vue
@@ -243,13 +243,13 @@ export default {
     <div class="gl-mt-3"><slot name="approval"></slot></div>
     <div class="gl-mt-5 gl-flex gl-flex-col gl-pr-4 md:gl-flex-row md:gl-items-center md:gl-pr-0">
       <div v-if="user" class="gl-flex gl-flex-col md:gl-max-w-3/20">
-        <span class="gl-text-gray-500">{{ $options.i18n.triggerer }}</span>
+        <span class="gl-text-subtle">{{ $options.i18n.triggerer }}</span>
         <gl-link :href="userPath" class="gl-mt-3 gl-font-monospace">
           <gl-truncate :text="username" with-tooltip />
         </gl-link>
       </div>
       <div class="gl-mt-4 gl-flex gl-flex-col md:gl-mt-0 md:gl-max-w-3/20 md:gl-pl-7">
-        <span class="gl-text-gray-500" :class="{ 'gl-ml-3': !deployable }">
+        <span class="gl-text-subtle" :class="{ 'gl-ml-3': !deployable }">
           {{ $options.i18n.job }}
         </span>
         <gl-link v-if="jobPath" :href="jobPath" class="gl-mt-3 gl-font-monospace">
@@ -266,7 +266,7 @@ export default {
         v-if="ref && !isTag"
         class="gl-mt-4 gl-flex gl-flex-col md:gl-mt-0 md:gl-max-w-3/20 md:gl-pl-7"
       >
-        <span class="gl-text-gray-500">{{ $options.i18n.branch }}</span>
+        <span class="gl-text-subtle">{{ $options.i18n.branch }}</span>
         <gl-link :href="refPath" class="gl-mt-3 gl-font-monospace">
           <gl-truncate :text="refName" with-tooltip />
         </gl-link>
@@ -275,7 +275,7 @@ export default {
         v-if="hasTags || $apollo.queries.tags.loading"
         class="gl-mt-4 gl-flex gl-flex-col md:gl-mt-0 md:gl-max-w-3/20 md:gl-pl-7"
       >
-        <span class="gl-text-gray-500">{{ $options.i18n.tags }}</span>
+        <span class="gl-text-subtle">{{ $options.i18n.tags }}</span>
         <gl-loading-icon
           v-if="$apollo.queries.tags.loading"
           class="gl-mt-3 gl-font-monospace"
diff --git a/app/assets/javascripts/environments/components/environment_actions.vue b/app/assets/javascripts/environments/components/environment_actions.vue
index 2309f598b2db2723c5b89250404e89555ba75a7a..ca12cd25be34db9efacacf50f977927d7b40801c 100644
--- a/app/assets/javascripts/environments/components/environment_actions.vue
+++ b/app/assets/javascripts/environments/components/environment_actions.vue
@@ -106,7 +106,7 @@ export default {
     >
       <template #list-item>
         <span class="gl-grow">{{ item.text }}</span>
-        <span v-if="item.scheduledAt" class="gl-float-right gl-text-gray-500">
+        <span v-if="item.scheduledAt" class="gl-float-right gl-text-subtle">
           <gl-icon name="clock" />
           {{ remainingTime(item) }}
         </span>
diff --git a/app/assets/javascripts/environments/constants.js b/app/assets/javascripts/environments/constants.js
index 01ccb512ec2f7660d696e8c8d8f576f4d023f407..b9512fdf8d5ad649a1ea984bfb57b0a065cc28f5 100644
--- a/app/assets/javascripts/environments/constants.js
+++ b/app/assets/javascripts/environments/constants.js
@@ -201,7 +201,7 @@ export const TREE_ITEM_KIND_ICONS = {
 
 const RUNNING_STATUS_ICON = { icon: 'status-running', class: 'gl-text-blue-500' };
 const SUCCESS_STATUS_ICON = { icon: 'status-success', class: 'gl-text-green-500' };
-const WAITING_STATUS_ICON = { icon: 'status-waiting', class: 'gl-text-gray-500' };
+const WAITING_STATUS_ICON = { icon: 'status-waiting', class: 'gl-text-subtle' };
 const FAILED_STATUS_ICON = { icon: 'status-failed', class: 'gl-text-red-500' };
 const PAUSED_STATUS_ICON = { icon: 'status-paused', class: 'gl-text-orange-500' };
 
diff --git a/app/assets/javascripts/groups/settings/components/access_dropdown.vue b/app/assets/javascripts/groups/settings/components/access_dropdown.vue
index e1d2a7fa84f83145d2632a6fc9c64e05f000c191..dbd8f2218a4dece33d51b87a4d745c07d8c54907 100644
--- a/app/assets/javascripts/groups/settings/components/access_dropdown.vue
+++ b/app/assets/javascripts/groups/settings/components/access_dropdown.vue
@@ -114,7 +114,7 @@ export default {
       return labelPieces.join(', ') || this.label;
     },
     toggleClass() {
-      return this.toggleLabel === this.label ? '!gl-text-gray-500' : '';
+      return this.toggleLabel === this.label ? '!gl-text-subtle' : '';
     },
     selection() {
       return [
diff --git a/app/assets/javascripts/issues/show/components/fields/description_template.vue b/app/assets/javascripts/issues/show/components/fields/description_template.vue
index 4b20dafb86d01feb5f96d28a6bd19c62e4e1f6d9..ef040948ab9a9d02d1f180a01fb6a82e6b6eb4a6 100644
--- a/app/assets/javascripts/issues/show/components/fields/description_template.vue
+++ b/app/assets/javascripts/issues/show/components/fields/description_template.vue
@@ -69,7 +69,7 @@ export default {
       <span class="dropdown-toggle-text">{{ __('Choose a template') }}</span>
       <gl-icon
         name="chevron-down"
-        class="dropdown-menu-toggle-icon gl-absolute gl-right-3 gl-top-3 gl-text-gray-500"
+        class="dropdown-menu-toggle-icon gl-absolute gl-right-3 gl-top-3 gl-text-subtle"
       />
     </button>
     <div class="dropdown-menu dropdown-select">
diff --git a/app/assets/javascripts/issues/show/components/incidents/timeline_events_form.vue b/app/assets/javascripts/issues/show/components/incidents/timeline_events_form.vue
index 25d4588f97cac1d14046444b2e43b451372429f2..c533d06c235bb452aff0174e5526783e06e41e70 100644
--- a/app/assets/javascripts/issues/show/components/incidents/timeline_events_form.vue
+++ b/app/assets/javascripts/issues/show/components/incidents/timeline_events_form.vue
@@ -251,7 +251,7 @@ export default {
             <div id="timeline-form-hint" class="gl-sr-only">{{ $options.i18n.hint }}</div>
             <div
               aria-hidden="true"
-              class="gl-absolute gl-bottom-2 gl-right-4 gl-text-sm gl-text-gray-500"
+              class="gl-absolute gl-bottom-2 gl-right-4 gl-text-sm gl-text-subtle"
             >
               {{ timelineTextRemainingCount }}
             </div>
diff --git a/app/assets/javascripts/kubernetes_dashboard/components/workload_details.vue b/app/assets/javascripts/kubernetes_dashboard/components/workload_details.vue
index a129032a472d100b14992890e5b95a5fce79e58d..d05da4dfdce53f095ce2de39efeb02ce2e73fc64 100644
--- a/app/assets/javascripts/kubernetes_dashboard/components/workload_details.vue
+++ b/app/assets/javascripts/kubernetes_dashboard/components/workload_details.vue
@@ -216,7 +216,7 @@ export default {
           <k8s-event-item v-for="(event, index) in k8sEvents" :key="index" :event="event" />
         </ul>
       </div>
-      <span v-else class="gl-text-gray-500">{{ $options.i18n.eventsEmptyText }}</span>
+      <span v-else class="gl-text-subtle">{{ $options.i18n.eventsEmptyText }}</span>
     </workload-details-item>
   </ul>
 </template>
diff --git a/app/assets/javascripts/kubernetes_dashboard/components/workload_details_item.vue b/app/assets/javascripts/kubernetes_dashboard/components/workload_details_item.vue
index a8a4a863100a8ca77f03afbfd3e161c495398071..e8873dac9dc4f8932c929f091d66aacc7c860f1a 100644
--- a/app/assets/javascripts/kubernetes_dashboard/components/workload_details_item.vue
+++ b/app/assets/javascripts/kubernetes_dashboard/components/workload_details_item.vue
@@ -71,7 +71,7 @@ export default {
       </div>
     </gl-collapse>
 
-    <div v-else class="gl-mb-0 gl-mt-2 gl-text-gray-500">
+    <div v-else class="gl-mb-0 gl-mt-2 gl-text-subtle">
       <slot></slot>
     </div>
   </li>
diff --git a/app/assets/javascripts/members/components/avatars/user_avatar.vue b/app/assets/javascripts/members/components/avatars/user_avatar.vue
index 087ebab126925c9de1065cae850523b37d33df17..84fa26da63b2126468580106d765e52e306e67cb 100644
--- a/app/assets/javascripts/members/components/avatars/user_avatar.vue
+++ b/app/assets/javascripts/members/components/avatars/user_avatar.vue
@@ -85,7 +85,7 @@ export default {
     >
       <template #meta>
         <div v-if="isUserBusy" class="gl-p-1">
-          <span class="gl-text-sm gl-font-normal gl-text-gray-500">({{ $options.i18n.busy }})</span>
+          <span class="gl-text-sm gl-font-normal gl-text-subtle">({{ $options.i18n.busy }})</span>
         </div>
         <div v-if="statusEmoji" class="gl-p-1">
           <span
diff --git a/app/assets/javascripts/members/components/table/member_activity.vue b/app/assets/javascripts/members/components/table/member_activity.vue
index 82e3ec5c5baf8e5b4ffe04979b7d73e5f734be02..50f67e1dd60fdcca8391bb464480b3ff95412a2d 100644
--- a/app/assets/javascripts/members/components/table/member_activity.vue
+++ b/app/assets/javascripts/members/components/table/member_activity.vue
@@ -33,7 +33,7 @@ export default {
       <gl-icon
         ref="userCreated"
         v-gl-tooltip.${userCreated}
-        class="-gl-mr-2 gl-ml-2 gl-text-gray-500"
+        class="-gl-mr-2 gl-ml-2 gl-text-subtle"
         name="assignee"
         :title="s__('Members|User created')"
       />
@@ -43,7 +43,7 @@ export default {
       <gl-icon
         ref="memberCreatedAt"
         v-gl-tooltip.${memberCreatedAt}
-        class="gl-text-gray-500"
+        class="gl-text-subtle"
         name="check"
         :title="s__('Members|Access granted')"
       />
@@ -53,7 +53,7 @@ export default {
       <gl-icon
         ref="lastActivity"
         v-gl-tooltip.${lastActivity}
-        class="gl-text-gray-500"
+        class="gl-text-subtle"
         name="hourglass"
         :title="s__('Members|Last activity')"
       />
diff --git a/app/assets/javascripts/merge_request_dashboard/components/assigned_users.vue b/app/assets/javascripts/merge_request_dashboard/components/assigned_users.vue
index 8dc3c591dfc59cc96238890419e772563f493fa0..f25fd41be57a51fc5b06a146a5dbbbf55ba361ba 100644
--- a/app/assets/javascripts/merge_request_dashboard/components/assigned_users.vue
+++ b/app/assets/javascripts/merge_request_dashboard/components/assigned_users.vue
@@ -21,7 +21,7 @@ const REVIEW_STATE_ICONS = {
   },
   REVIEW_STARTED: {
     name: 'comment-dots',
-    class: 'gl-bg-gray-100 gl-text-gray-500',
+    class: 'gl-bg-gray-100 gl-text-subtle',
   },
 };
 const USER_TOOLTIP_TITLES = {
diff --git a/app/assets/javascripts/ml/experiment_tracking/routes/experiments/show/ml_experiments_show.vue b/app/assets/javascripts/ml/experiment_tracking/routes/experiments/show/ml_experiments_show.vue
index f5b668e8a6e93bd4785d720e59f5c8a5b334ad16..02dc1ecbf6270fa161fc1e7d8107250d8cfa9c2e 100644
--- a/app/assets/javascripts/ml/experiment_tracking/routes/experiments/show/ml_experiments_show.vue
+++ b/app/assets/javascripts/ml/experiment_tracking/routes/experiments/show/ml_experiments_show.vue
@@ -214,7 +214,7 @@ export default {
             <gl-link v-if="data.value" :href="data.value" target="_blank">{{
               $options.i18n.ARTIFACTS_LABEL
             }}</gl-link>
-            <div v-else class="gl-italic gl-text-gray-500">
+            <div v-else class="gl-italic gl-text-subtle">
               {{ $options.i18n.NO_ARTIFACT }}
             </div>
           </template>
@@ -232,7 +232,7 @@ export default {
             <gl-link v-if="data.value" :href="data.value.path" target="_blank">{{
               data.value.name
             }}</gl-link>
-            <div v-else class="gl-italic gl-text-gray-500">
+            <div v-else class="gl-italic gl-text-subtle">
               {{ $options.i18n.NO_JOB }}
             </div>
           </template>
diff --git a/app/assets/javascripts/ml/model_registry/apps/show_ml_model.vue b/app/assets/javascripts/ml/model_registry/apps/show_ml_model.vue
index 83d9a5cf830ae74ec58ecc4e06c25f852b3e32df..652d6f4276e90a7b1efaa8574914ae3c445e0423 100644
--- a/app/assets/javascripts/ml/model_registry/apps/show_ml_model.vue
+++ b/app/assets/javascripts/ml/model_registry/apps/show_ml_model.vue
@@ -234,7 +234,7 @@ export default {
                 </template>
                 <template #author>
                   <gl-link
-                    class="js-user-link gl-font-bold !gl-text-gray-500"
+                    class="js-user-link gl-font-bold !gl-text-subtle"
                     :href="model.author.webUrl"
                     :data-user-id="authorId"
                   >
@@ -294,10 +294,10 @@ export default {
           <div class="gl-pt-6 md:gl-col-span-1">
             <div>
               <div class="gl-text-lg gl-font-bold">{{ $options.i18n.authorTitle }}</div>
-              <div v-if="showModelAuthor" class="gl-pt-2 gl-text-gray-500">
+              <div v-if="showModelAuthor" class="gl-pt-2 gl-text-subtle">
                 <gl-link
                   data-testid="sidebar-author-link"
-                  class="js-user-link gl-font-bold !gl-text-gray-500"
+                  class="js-user-link gl-font-bold !gl-text-subtle"
                   :href="model.author.webUrl"
                 >
                   <gl-avatar :label="model.author.name" :src="model.author.avatarUrl" :size="24" />
@@ -307,7 +307,7 @@ export default {
             </div>
             <div v-if="showModelLatestVersion" class="gl-mt-5" data-testid="latest-version-label">
               <div class="gl-text-lg gl-font-bold">{{ $options.i18n.latestVersionTitle }}</div>
-              <div class="gl-pt-2 gl-text-gray-500">
+              <div class="gl-pt-2 gl-text-subtle">
                 <gl-link
                   data-testid="sidebar-latest-version-link"
                   :href="model.latestVersion._links.showPath"
@@ -318,7 +318,7 @@ export default {
             </div>
             <div class="gl-mt-5">
               <div class="gl-text-lg gl-font-bold">{{ $options.i18n.versionCountTitle }}</div>
-              <div v-if="showCreatedDetail" class="gl-pt-2 gl-text-gray-500">
+              <div v-if="showCreatedDetail" class="gl-pt-2 gl-text-subtle">
                 <span data-testid="sidebar-version-count">
                   {{ versionCount }}
                 </span>
diff --git a/app/assets/javascripts/ml/model_registry/apps/show_ml_model_version.vue b/app/assets/javascripts/ml/model_registry/apps/show_ml_model_version.vue
index 8022b4e96b3262583f72e1c49c495580f51eb70c..932e77f0cceba7714d5ecf7e2989b99ac89e9168 100644
--- a/app/assets/javascripts/ml/model_registry/apps/show_ml_model_version.vue
+++ b/app/assets/javascripts/ml/model_registry/apps/show_ml_model_version.vue
@@ -264,7 +264,7 @@ export default {
                 </template>
                 <template #author>
                   <gl-link
-                    class="js-user-link gl-font-bold !gl-text-gray-500"
+                    class="js-user-link gl-font-bold !gl-text-subtle"
                     :href="author.webUrl"
                     :data-user-id="authorId"
                   >
@@ -321,10 +321,10 @@ export default {
 
       <div class="gl-pt-6 md:gl-col-span-1">
         <div class="gl-text-lg gl-font-bold">{{ $options.i18n.authorTitle }}</div>
-        <div v-if="showAuthor" class="gl-mt-3 gl-text-gray-500">
+        <div v-if="showAuthor" class="gl-mt-3 gl-text-subtle">
           <gl-link
             data-testid="sidebar-author-link"
-            class="js-user-link gl-font-bold !gl-text-gray-500"
+            class="js-user-link gl-font-bold !gl-text-subtle"
             :href="author.webUrl"
           >
             <gl-avatar :label="author.name" :src="author.avatarUrl" :size="24" />
diff --git a/app/assets/javascripts/ml/model_registry/components/model_versions_table.vue b/app/assets/javascripts/ml/model_registry/components/model_versions_table.vue
index 35a2bcda1aff688e64021cb238b0fa7c8e2bde9d..35c3a1ef0f4b101f9988b6919a858713ee84ae99 100644
--- a/app/assets/javascripts/ml/model_registry/components/model_versions_table.vue
+++ b/app/assets/javascripts/ml/model_registry/components/model_versions_table.vue
@@ -97,7 +97,7 @@ export default {
       <gl-avatar-link
         :href="author.webUrl"
         :title="author.name"
-        class="js-user-link !gl-text-gray-500"
+        class="js-user-link !gl-text-subtle"
       >
         <gl-avatar :src="author.avatarUrl" :size="16" :entity-name="author.name" class="mr-2" />
         {{ author.name }}
diff --git a/app/assets/javascripts/notifications/components/notifications_dropdown_item.vue b/app/assets/javascripts/notifications/components/notifications_dropdown_item.vue
index 5a11bcf713efa80e8153ca6b9d7758892955156d..8ed53a24e6e3cf139107be2e0eef77d268dcfe8b 100644
--- a/app/assets/javascripts/notifications/components/notifications_dropdown_item.vue
+++ b/app/assets/javascripts/notifications/components/notifications_dropdown_item.vue
@@ -41,7 +41,7 @@ export default {
   >
     <div class="gl-flex gl-flex-col">
       <span class="gl-font-bold">{{ title }}</span>
-      <span class="gl-text-gray-500">{{ description }}</span>
+      <span class="gl-text-subtle">{{ description }}</span>
     </div>
   </gl-dropdown-item>
 </template>
diff --git a/app/assets/javascripts/organizations/shared/components/new_edit_form.vue b/app/assets/javascripts/organizations/shared/components/new_edit_form.vue
index b6af292fa60770792b9f8cb6f13306c5a5d4389e..61258da56a27654dfe10cf1fe4554d265fcfc840 100644
--- a/app/assets/javascripts/organizations/shared/components/new_edit_form.vue
+++ b/app/assets/javascripts/organizations/shared/components/new_edit_form.vue
@@ -176,7 +176,7 @@ export default {
 
       if (remainingCharacters >= 0) {
         return {
-          class: 'gl-text-gray-500',
+          class: 'gl-text-subtle',
           text: this.$options.i18n.charactersRemaining(remainingCharacters),
         };
       }
diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/cleanup_status.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/cleanup_status.vue
index b54c521681a1aed6a9756c81346d21310626654a..88e3bde08930b387a31d6680aaae364c076ab91d 100644
--- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/cleanup_status.vue
+++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/cleanup_status.vue
@@ -89,7 +89,7 @@ export default {
       v-if="failedDelete && calculatedTimeTilNextRun"
       :id="iconId"
       :size="16"
-      class="gl-text-gray-500"
+      class="gl-text-subtle"
       data-testid="extra-info"
       name="information-o"
     />
diff --git a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/image_list_row.vue b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/image_list_row.vue
index 3990bda898edbfd127d6660b723f6c08f915c287..25f27b8f48aa21919809110c4ce6829614f09130 100644
--- a/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/image_list_row.vue
+++ b/app/assets/javascripts/packages_and_registries/container_registry/explorer/components/list_page/image_list_row.vue
@@ -150,7 +150,7 @@ export default {
         :aria-label="$options.i18n.IMAGE_FULL_PATH_LABEL"
         @click="hideButton"
       />
-      <span v-if="deleting" class="gl-text-gray-500">{{ imageName }}</span>
+      <span v-if="deleting" class="gl-text-subtle">{{ imageName }}</span>
       <router-link
         v-else
         ref="imageName"
diff --git a/app/assets/javascripts/packages_and_registries/dependency_proxy/components/manifest_row.vue b/app/assets/javascripts/packages_and_registries/dependency_proxy/components/manifest_row.vue
index 718dd87f27cd6cc466c532b390e11d8cbf56f3cd..1f93e5edb221d9bf8dce25d439717a3f6be36e1a 100644
--- a/app/assets/javascripts/packages_and_registries/dependency_proxy/components/manifest_row.vue
+++ b/app/assets/javascripts/packages_and_registries/dependency_proxy/components/manifest_row.vue
@@ -47,7 +47,7 @@ export default {
       return this.manifest?.status === MANIFEST_PENDING_DESTRUCTION_STATUS;
     },
     disabledRowStyle() {
-      return this.isErrorStatus ? 'gl-font-normal gl-text-gray-500' : '';
+      return this.isErrorStatus ? 'gl-font-normal gl-text-subtle' : '';
     },
     shortDigest() {
       // digest is in the format `sha256:995efde2e81b21d1ea7066aa77a59298a62a9e9fbb4b77f36c189774ec9b1089`
diff --git a/app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy_form.vue b/app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy_form.vue
index f7f1f2742529a12523d372dd4c0b0554cfac0af2..a868620d90940965bafbea362d932d475d3ea47a 100644
--- a/app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy_form.vue
+++ b/app/assets/javascripts/packages_and_registries/settings/project/components/container_expiration_policy_form.vue
@@ -295,7 +295,7 @@ export default {
       >
         {{ __('Cancel') }}
       </gl-button>
-      <span class="gl-italic gl-text-gray-500">{{
+      <span class="gl-italic gl-text-subtle">{{
         $options.i18n.EXPIRATION_POLICY_FOOTER_NOTE
       }}</span>
     </div>
diff --git a/app/assets/javascripts/packages_and_registries/settings/project/components/expiration_dropdown.vue b/app/assets/javascripts/packages_and_registries/settings/project/components/expiration_dropdown.vue
index 0bbb501011ab814634dbd9a63a5aadee5f49124d..058efdd8cfe6347a648e1d98901e8200ebd77fe9 100644
--- a/app/assets/javascripts/packages_and_registries/settings/project/components/expiration_dropdown.vue
+++ b/app/assets/javascripts/packages_and_registries/settings/project/components/expiration_dropdown.vue
@@ -64,7 +64,7 @@ export default {
       </gl-form-select>
     </div>
     <template v-if="description" #description>
-      <span data-testid="description" class="gl-text-gray-500">
+      <span data-testid="description" class="gl-text-subtle">
         {{ description }}
       </span>
     </template>
diff --git a/app/assets/javascripts/packages_and_registries/settings/project/components/expiration_input.vue b/app/assets/javascripts/packages_and_registries/settings/project/components/expiration_input.vue
index 2c19662a4afc1dc69239837a368e273252a7398e..53b0f548929b4e51e5e5c410e82d5e0c7a898d5a 100644
--- a/app/assets/javascripts/packages_and_registries/settings/project/components/expiration_input.vue
+++ b/app/assets/javascripts/packages_and_registries/settings/project/components/expiration_input.vue
@@ -125,7 +125,7 @@ export default {
       {{ s__('ContainerRegistry|Regular expression without the \\A and \\z anchors.') }}
     </p>
     <template #description>
-      <span data-testid="description" class="gl-text-gray-500">
+      <span data-testid="description" class="gl-text-subtle">
         <gl-sprintf :message="description">
           <template #link="{ content }">
             <gl-link :href="tagsRegexHelpPagePath">{{ content }}</gl-link>
diff --git a/app/assets/javascripts/packages_and_registries/shared/components/package_path.vue b/app/assets/javascripts/packages_and_registries/shared/components/package_path.vue
index 5bc4f3054f3ec836990478f6bc69ac9f14409bd9..5eccfdd01b1d74e6d121f60f2844431b995069c5 100644
--- a/app/assets/javascripts/packages_and_registries/shared/components/package_path.vue
+++ b/app/assets/javascripts/packages_and_registries/shared/components/package_path.vue
@@ -52,7 +52,7 @@ export default {
 
     <gl-link
       data-testid="root-link"
-      class="gl-min-w-0 gl-text-gray-500"
+      class="gl-min-w-0 gl-text-subtle"
       :href="`/${rootLink}`"
       :disabled="disabled"
     >
@@ -75,7 +75,7 @@ export default {
 
       <gl-link
         data-testid="leaf-link"
-        class="gl-min-w-0 gl-text-gray-500"
+        class="gl-min-w-0 gl-text-subtle"
         :href="`/${path}`"
         :disabled="disabled"
       >
diff --git a/app/assets/javascripts/pages/projects/forks/new/components/fork_form.vue b/app/assets/javascripts/pages/projects/forks/new/components/fork_form.vue
index 230fdab921b9a3ed05a91066bcbdc9863d165ee9..7d31ce7b59e51d20933dc843e35f99aef73e295d 100644
--- a/app/assets/javascripts/pages/projects/forks/new/components/fork_form.vue
+++ b/app/assets/javascripts/pages/projects/forks/new/components/fork_form.vue
@@ -352,7 +352,7 @@ export default {
       </div>
     </div>
 
-    <p class="-gl-mt-3 gl-text-gray-500">
+    <p class="-gl-mt-3 gl-text-subtle">
       {{ s__('ForkProject|Want to organize several dependent projects under the same namespace?') }}
       <gl-link :href="newGroupPath" target="_blank">
         {{ s__('ForkProject|Create a group') }}
diff --git a/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue b/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue
index 48b7d4366d544532a098b5e1875d2cb32c92342c..4ecf9922ab809185ee39a40a70aeae0d6ce50281 100644
--- a/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue
+++ b/app/assets/javascripts/pages/projects/shared/permissions/components/settings_panel.vue
@@ -660,16 +660,12 @@ export default {
             </option>
           </gl-form-select>
         </div>
-        <span
-          v-if="!visibilityAllowed(visibilityLevel)"
-          class="gl-mt-2 gl-block gl-text-gray-500"
-          >{{
-            s__(
-              'ProjectSettings|Visibility options for this fork are limited by the current visibility of the source project.',
-            )
-          }}</span
-        >
-        <span class="gl-mt-2 gl-block gl-text-gray-500">
+        <span v-if="!visibilityAllowed(visibilityLevel)" class="gl-mt-2 gl-block gl-text-subtle">{{
+          s__(
+            'ProjectSettings|Visibility options for this fork are limited by the current visibility of the source project.',
+          )
+        }}</span>
+        <span class="gl-mt-2 gl-block gl-text-subtle">
           <gl-sprintf :message="visibilityLevelDescription">
             <template #membersPageLink="{ content }">
               <gl-link class="gl-link" :href="membersPagePath">{{ content }}</gl-link>
@@ -701,7 +697,7 @@ export default {
             />
             <input v-model="enforceAuthChecksOnUploads" type="checkbox" />
             {{ s__('ProjectSettings|Require authentication to view media files') }}
-            <span class="-gl-mt-3 gl-ml-5 gl-block gl-text-gray-500">{{
+            <span class="-gl-mt-3 gl-ml-5 gl-block gl-text-subtle">{{
               s__('ProjectSettings|Prevents direct linking to potentially sensitive media files')
             }}</span>
           </label>
diff --git a/app/assets/javascripts/profile/components/snippets/snippet_row.vue b/app/assets/javascripts/profile/components/snippets/snippet_row.vue
index 34df123178e197a1fedcfe17d12030d492957ace..1cdeee5c029189fc9a26514014899abdb55a7093 100644
--- a/app/assets/javascripts/profile/components/snippets/snippet_row.vue
+++ b/app/assets/javascripts/profile/components/snippets/snippet_row.vue
@@ -68,7 +68,7 @@ export default {
         class="gl-mb-2 gl-font-bold gl-text-gray-900"
         >{{ snippet.title }}</gl-link
       >
-      <span class="gl-text-gray-500">
+      <span class="gl-text-subtle">
         <gl-sprintf :message="$options.i18n.snippetInfo">
           <template #id>
             <span data-testid="snippet-id">{{ formattedId }}</span>
@@ -107,7 +107,7 @@ export default {
         </gl-link>
         <gl-icon data-testid="snippet-visibility" :name="visibilityIcon" />
       </div>
-      <span class="gl-text-gray-500">
+      <span class="gl-text-subtle">
         <gl-sprintf :message="$options.i18n.updatedInfo">
           <template #updated>
             <time-ago data-testid="snippet-updated-at" :time="snippet.updatedAt" />
diff --git a/app/assets/javascripts/profile/edit/components/user_avatar.vue b/app/assets/javascripts/profile/edit/components/user_avatar.vue
index b853a54a31b2432c2cd5966f70868627b97cac11..6cfde4e6d48c5a4931c1f107983402f8c456a818 100644
--- a/app/assets/javascripts/profile/edit/components/user_avatar.vue
+++ b/app/assets/javascripts/profile/edit/components/user_avatar.vue
@@ -109,7 +109,7 @@ export default {
             name="user[avatar]"
           />
         </div>
-        <p class="gl-mb-0 gl-text-gray-500">
+        <p class="gl-mb-0 gl-text-subtle">
           {{ $options.i18n.imageDimensions }}
           {{ $options.i18n.maximumFileSize }}
         </p>
diff --git a/app/assets/javascripts/projects/components/new_edit_form.vue b/app/assets/javascripts/projects/components/new_edit_form.vue
index 1e2165189b851ed2e83d6b6c8cd2e00b4ae55a3d..510761efffd46c1dbc9cd0ad9fe8152f4abdf0c2 100644
--- a/app/assets/javascripts/projects/components/new_edit_form.vue
+++ b/app/assets/javascripts/projects/components/new_edit_form.vue
@@ -115,7 +115,7 @@ export default {
 
       if (remainingCharacters >= 0) {
         return {
-          class: 'gl-text-gray-500',
+          class: 'gl-text-subtle',
           text: this.$options.i18n.charactersRemaining(remainingCharacters),
         };
       }
diff --git a/app/assets/javascripts/projects/new/components/new_project_url_select.vue b/app/assets/javascripts/projects/new/components/new_project_url_select.vue
index ed9da03c1795e3f1ae517d2972a05f94bd70fa51..236d9288631e7803ac3b1a68e7c643ca9384b906 100644
--- a/app/assets/javascripts/projects/new/components/new_project_url_select.vue
+++ b/app/assets/javascripts/projects/new/components/new_project_url_select.vue
@@ -116,7 +116,7 @@ export default {
       return [];
     },
     dropdownPlaceholderClass() {
-      return this.selectedNamespace.id ? '' : '!gl-text-gray-500';
+      return this.selectedNamespace.id ? '' : '!gl-text-subtle';
     },
     dropdownText() {
       if (this.selectedNamespace && this.selectedNamespace?.fullPath) {
diff --git a/app/assets/javascripts/projects/settings/components/access_dropdown.vue b/app/assets/javascripts/projects/settings/components/access_dropdown.vue
index c2694261018160d9536c9a57b091b70d7f0a689f..51ffc8674177acfc42e2dec2c42eafd394b4a82f 100644
--- a/app/assets/javascripts/projects/settings/components/access_dropdown.vue
+++ b/app/assets/javascripts/projects/settings/components/access_dropdown.vue
@@ -182,7 +182,7 @@ export default {
     },
     dropdownToggleClass() {
       return {
-        '!gl-text-gray-500': this.toggleLabel === this.label,
+        '!gl-text-subtle': this.toggleLabel === this.label,
         [this.toggleClass]: true,
       };
     },
diff --git a/app/assets/javascripts/projects/settings/repository/branch_rules/components/branch_rule.vue b/app/assets/javascripts/projects/settings/repository/branch_rules/components/branch_rule.vue
index e473a0c5fa93171a0485bf3586e153cfa41d999f..87b521a03bda36762c8e2887433d1bbeffc28696 100644
--- a/app/assets/javascripts/projects/settings/repository/branch_rules/components/branch_rule.vue
+++ b/app/assets/javascripts/projects/settings/repository/branch_rules/components/branch_rule.vue
@@ -167,7 +167,7 @@ export default {
 
         <protected-badge v-if="isProtected" />
 
-        <ul v-if="hasApprovalDetails" class="gl-mb-0 gl-mt-2 gl-pl-6 gl-text-gray-500">
+        <ul v-if="hasApprovalDetails" class="gl-mb-0 gl-mt-2 gl-pl-6 gl-text-subtle">
           <li v-for="(detail, index) in approvalDetails" :key="index">{{ detail }}</li>
         </ul>
       </div>
diff --git a/app/assets/javascripts/related_issues/components/issue_token.vue b/app/assets/javascripts/related_issues/components/issue_token.vue
index b457a45c3b8df214922666a50e8eb5d962126e7a..8b419e9334d6300a8484930f6910eb994ccce5d6 100644
--- a/app/assets/javascripts/related_issues/components/issue_token.vue
+++ b/app/assets/javascripts/related_issues/components/issue_token.vue
@@ -59,7 +59,7 @@ export default {
       ref="link"
       v-gl-tooltip
       :class="{
-        'issue-token-link gl-inline-flex gl-min-w-0 gl-text-gray-500': isCondensed,
+        'issue-token-link gl-inline-flex gl-min-w-0 gl-text-subtle': isCondensed,
         'issuable-main-info': !isCondensed,
       }"
       :href="computedPath"
@@ -71,7 +71,7 @@ export default {
         v-if="hasTitle"
         ref="title"
         :class="{
-          'issue-token-title issue-token-end gl-flex gl-items-baseline gl-overflow-hidden gl-pl-3 gl-text-gray-500':
+          'issue-token-title issue-token-end gl-flex gl-items-baseline gl-overflow-hidden gl-pl-3 gl-text-subtle':
             isCondensed,
           'issue-title block-truncated': !isCondensed,
           'gl-rounded-br-small gl-rounded-tr-small gl-pr-3': !canRemove,
diff --git a/app/assets/javascripts/releases/components/tag_search.vue b/app/assets/javascripts/releases/components/tag_search.vue
index b0b229e106ff17494138885f041174807bda5664..ad0d30a54f7c64597bd37fd9de291045cea2e170 100644
--- a/app/assets/javascripts/releases/components/tag_search.vue
+++ b/app/assets/javascripts/releases/components/tag_search.vue
@@ -91,7 +91,7 @@ export default {
           {{ tag.name }}
         </gl-dropdown-item>
       </div>
-      <div v-else class="gl-my-5 gl-flex gl-justify-center gl-text-base gl-text-gray-500">
+      <div v-else class="gl-my-5 gl-flex gl-justify-center gl-text-base gl-text-subtle">
         {{ $options.i18n.noResults }}
       </div>
     </div>
diff --git a/app/assets/javascripts/search/sidebar/components/language_filter/checkbox_filter.vue b/app/assets/javascripts/search/sidebar/components/language_filter/checkbox_filter.vue
index 6e302cec59133976a40348cb6c280efe1fa9a241..fea48025c978f4d3b5eb3636ffdc04b25fd4ee4d 100644
--- a/app/assets/javascripts/search/sidebar/components/language_filter/checkbox_filter.vue
+++ b/app/assets/javascripts/search/sidebar/components/language_filter/checkbox_filter.vue
@@ -49,7 +49,7 @@ export default {
       },
     },
     labelCountClasses() {
-      return [...NAV_LINK_COUNT_DEFAULT_CLASSES, 'gl-text-gray-500'];
+      return [...NAV_LINK_COUNT_DEFAULT_CLASSES, 'gl-text-subtle'];
     },
   },
   methods: {
diff --git a/app/assets/javascripts/super_sidebar/components/nav_item.vue b/app/assets/javascripts/super_sidebar/components/nav_item.vue
index ded4eb86f3740495ca4fe7c0a4eda8146c3eb695..d787d5d8040606b0a26c1e633de26b9423d80f3c 100644
--- a/app/assets/javascripts/super_sidebar/components/nav_item.vue
+++ b/app/assets/javascripts/super_sidebar/components/nav_item.vue
@@ -273,7 +273,7 @@ export default {
       </div>
       <div class="gl-grow gl-text-gray-900" :class="{ 'gl-w-max': isFlyout }">
         {{ item.title }}
-        <div v-if="item.subtitle" class="gl-truncate-end gl-text-sm gl-text-gray-500">
+        <div v-if="item.subtitle" class="gl-truncate-end gl-text-sm gl-text-subtle">
           {{ item.subtitle }}
         </div>
       </div>
diff --git a/app/assets/javascripts/surveys/components/satisfaction_rate.vue b/app/assets/javascripts/surveys/components/satisfaction_rate.vue
index 6cc7a08a11d61833b5f9589cdb0cf0c4bb1466f9..62feb9d372ac999a5546cf8dfcb7a3aefbe8222d 100644
--- a/app/assets/javascripts/surveys/components/satisfaction_rate.vue
+++ b/app/assets/javascripts/surveys/components/satisfaction_rate.vue
@@ -61,7 +61,7 @@ export default {
         </gl-button>
       </li>
     </ul>
-    <div class="gl-flex gl-justify-between gl-pt-3 gl-text-sm gl-text-gray-500">
+    <div class="gl-flex gl-justify-between gl-pt-3 gl-text-sm gl-text-subtle">
       <div>{{ $options.i18n.unhappy }}</div>
       <div>{{ $options.i18n.delighted }}</div>
     </div>
diff --git a/app/assets/javascripts/surveys/merge_request_experience/app.vue b/app/assets/javascripts/surveys/merge_request_experience/app.vue
index 467ee5ef48522be033602a2e74679bef8e72cddd..6a289f82c06afc4e7fb02225a8c744490f6bde51 100644
--- a/app/assets/javascripts/surveys/merge_request_experience/app.vue
+++ b/app/assets/javascripts/surveys/merge_request_experience/app.vue
@@ -146,14 +146,14 @@ export default {
           />
           <div
             v-if="stepIndex === 0"
-            class="mr-experience-survey-legal gl-border-t gl-mt-5 gl-pt-3 gl-text-sm gl-text-gray-500"
+            class="mr-experience-survey-legal gl-border-t gl-mt-5 gl-pt-3 gl-text-sm gl-text-subtle"
             role="note"
           >
             <p class="gl-m-0">
               <gl-sprintf :message="$options.i18n.legal">
                 <template #link="{ content }">
                   <a
-                    class="gl-text-gray-500 gl-underline"
+                    class="gl-text-subtle gl-underline"
                     :href="$options.privacyLink"
                     target="_blank"
                     rel="noreferrer nofollow"
diff --git a/app/assets/javascripts/usage_quotas/components/sectioned_percentage_bar.vue b/app/assets/javascripts/usage_quotas/components/sectioned_percentage_bar.vue
index 168f3c331aecd11c655a0d056bafdd4ad3d6e1df..c61adb3cc23dbdecb30100f2cd3889c3dbbebc6d 100644
--- a/app/assets/javascripts/usage_quotas/components/sectioned_percentage_bar.vue
+++ b/app/assets/javascripts/usage_quotas/components/sectioned_percentage_bar.vue
@@ -76,7 +76,7 @@ export default {
             <span class="gl-mr-2 gl-font-bold">
               {{ label }}
             </span>
-            <span class="gl-text-gray-500">
+            <span class="gl-text-subtle">
               {{ formattedValue }}
             </span>
           </p>
diff --git a/app/assets/javascripts/user_lists/components/user_list.vue b/app/assets/javascripts/user_lists/components/user_list.vue
index 8c5a17dc3c81c9694869db3c235fb266cd4b47a3..f1263339eb55810f8bc7ca3e76ba7f36270ea5d0 100644
--- a/app/assets/javascripts/user_lists/components/user_list.vue
+++ b/app/assets/javascripts/user_lists/components/user_list.vue
@@ -97,7 +97,7 @@ export default {
       <div :class="$options.classes.headerClasses">
         <div>
           <h3>{{ name }}</h3>
-          <h4 class="gl-text-gray-500">{{ $options.translations.userIdLabel }}</h4>
+          <h4 class="gl-text-subtle">{{ $options.translations.userIdLabel }}</h4>
         </div>
         <div class="gl-mt-6">
           <gl-button v-if="editPath" :href="editPath" data-testid="edit-user-list" class="gl-mr-3">
diff --git a/app/assets/javascripts/user_lists/components/user_list_form.vue b/app/assets/javascripts/user_lists/components/user_list_form.vue
index 182e738ce21d4905167cdc0cef9ed07f062712e9..bb1787805b2b7e913a3d4af4f3437e0c4c3d9dd8 100644
--- a/app/assets/javascripts/user_lists/components/user_list_form.vue
+++ b/app/assets/javascripts/user_lists/components/user_list_form.vue
@@ -67,7 +67,7 @@ export default {
         <h4 class="gl-min-width-fit-content gl-whitespace-nowrap">
           {{ $options.translations.formLabel }}
         </h4>
-        <gl-sprintf :message="$options.translations.formSubtitle" class="gl-text-gray-500">
+        <gl-sprintf :message="$options.translations.formSubtitle" class="gl-text-subtle">
           <template #link="{ content }">
             <gl-link :href="userListsDocsPath" data-testid="user-list-docs-link">
               {{ content }}
diff --git a/app/assets/javascripts/vue_shared/alert_details/components/alert_sidebar.vue b/app/assets/javascripts/vue_shared/alert_details/components/alert_sidebar.vue
index 807f392754e3eb0c90bf0d54ced67046c55a738e..86c857ef6cfcab625efb1ffcd01c746a12328e8a 100644
--- a/app/assets/javascripts/vue_shared/alert_details/components/alert_sidebar.vue
+++ b/app/assets/javascripts/vue_shared/alert_details/components/alert_sidebar.vue
@@ -65,7 +65,7 @@ export default {
         :project-path="projectPath"
         :alert="alert"
         :sidebar-collapsed="sidebarStatus"
-        text-class="gl-text-gray-500"
+        text-class="gl-text-subtle"
         class="gl-w-7/10"
         @toggle-sidebar="$emit('toggle-sidebar')"
         @alert-error="$emit('alert-error', $event)"
diff --git a/app/assets/javascripts/vue_shared/components/number_to_human_size/number_to_human_size.stories.js b/app/assets/javascripts/vue_shared/components/number_to_human_size/number_to_human_size.stories.js
index c0702fc3db8a198ecbc68a10080e5f3c05a28859..1570c6161bbd0eb748671049d54328ede5a96590 100644
--- a/app/assets/javascripts/vue_shared/components/number_to_human_size/number_to_human_size.stories.js
+++ b/app/assets/javascripts/vue_shared/components/number_to_human_size/number_to_human_size.stories.js
@@ -37,5 +37,5 @@ PlainZero.args = {
 export const CustomStyles = Template.bind({});
 CustomStyles.args = {
   ...Default.args,
-  labelClass: 'gl-text-sm gl-text-gray-500',
+  labelClass: 'gl-text-sm gl-text-subtle',
 };
diff --git a/app/assets/javascripts/vue_shared/components/usage_quotas/usage_banner.vue b/app/assets/javascripts/vue_shared/components/usage_quotas/usage_banner.vue
index 4dc6e4d1ef7a6409aea861ed681fc1df5b6762a5..3baa2ed6a08029f2e9b5015adccda1a964f60736 100644
--- a/app/assets/javascripts/vue_shared/components/usage_quotas/usage_banner.vue
+++ b/app/assets/javascripts/vue_shared/components/usage_quotas/usage_banner.vue
@@ -38,13 +38,13 @@ export default {
                 'left-secondary-text'
               ]
             "
-            class="gl-flex gl-min-h-6 gl-w-7/10 gl-min-w-0 gl-grow gl-items-center gl-text-gray-500 md:gl-max-w-7/10"
+            class="gl-flex gl-min-h-6 gl-w-7/10 gl-min-w-0 gl-grow gl-items-center gl-text-subtle md:gl-max-w-7/10"
           >
             <slot name="left-secondary-text"></slot>
           </div>
         </div>
         <div
-          class="gl-flex gl-shrink-0 gl-flex-col gl-justify-between gl-text-gray-500 sm:gl-items-end"
+          class="gl-flex gl-shrink-0 gl-flex-col gl-justify-between gl-text-subtle sm:gl-items-end"
         >
           <div
             v-if="
diff --git a/app/assets/javascripts/vue_shared/components/users_table/user_avatar.vue b/app/assets/javascripts/vue_shared/components/users_table/user_avatar.vue
index 2f6989991fd25c519d4d962c917d9689449673f1..499c7e22faedc63a833673b128de80760795bf47 100644
--- a/app/assets/javascripts/vue_shared/components/users_table/user_avatar.vue
+++ b/app/assets/javascripts/vue_shared/components/users_table/user_avatar.vue
@@ -68,7 +68,7 @@ export default {
       :sub-label-link="subLabel.link"
     >
       <template #meta>
-        <div v-if="user.note" class="gl-p-1 gl-text-gray-500">
+        <div v-if="user.note" class="gl-p-1 gl-text-subtle">
           <gl-icon v-gl-tooltip="userNoteShort" name="document" />
         </div>
         <div
diff --git a/app/assets/javascripts/work_items/components/design_management/design_item.vue b/app/assets/javascripts/work_items/components/design_management/design_item.vue
index 754561f5c3626fa0a97985d733a2e4b72e3c8e1f..6caf4f6783f5c7db09a84eb671572e2494f6b869 100644
--- a/app/assets/javascripts/work_items/components/design_management/design_item.vue
+++ b/app/assets/javascripts/work_items/components/design_management/design_item.vue
@@ -190,7 +190,7 @@ export default {
           {{ __('Updated') }} <timeago :time="updatedAt" tooltip-placement="bottom" />
         </span>
       </div>
-      <div v-if="notesCount" class="gl-ml-auto gl-flex gl-items-center gl-text-gray-500">
+      <div v-if="notesCount" class="gl-ml-auto gl-flex gl-items-center gl-text-subtle">
         <gl-icon name="comments" class="gl-ml-2" />
         <span :aria-label="notesLabel" class="gl-ml-2 gl-text-sm">
           {{ notesCount }}
diff --git a/app/assets/javascripts/work_items/components/design_management/design_notes/design_discussion.vue b/app/assets/javascripts/work_items/components/design_management/design_notes/design_discussion.vue
index 10c742b9788f28715c3fb2f9feaaf0f8dafef6b4..a4d4357145b59060dcd069e7337daf8ca57e021e 100644
--- a/app/assets/javascripts/work_items/components/design_management/design_notes/design_discussion.vue
+++ b/app/assets/javascripts/work_items/components/design_management/design_notes/design_discussion.vue
@@ -125,10 +125,10 @@ export default {
           />
         </template>
         <template v-if="discussion.resolved" #resolved-status>
-          <p class="gl-m-0 gl-mt-5 gl-text-sm gl-text-gray-500" data-testid="resolved-message">
+          <p class="gl-m-0 gl-mt-5 gl-text-sm gl-text-subtle" data-testid="resolved-message">
             {{ __('Resolved by') }}
             <gl-link
-              class="link-inherit-color gl-text-sm gl-text-gray-500 gl-no-underline"
+              class="link-inherit-color gl-text-sm gl-text-subtle gl-no-underline"
               :href="discussion.resolvedBy.webUrl"
               target="_blank"
               >{{ discussion.resolvedBy.name }}</gl-link
diff --git a/app/assets/javascripts/work_items/components/work_item_development/work_item_development_ff_item.vue b/app/assets/javascripts/work_items/components/work_item_development/work_item_development_ff_item.vue
index ef6905250c6f219f7b68b56a6405c2fc5723c3a6..63b2aa54aa17a9958138445cc0e429a73b781b1a 100644
--- a/app/assets/javascripts/work_items/components/work_item_development/work_item_development_ff_item.vue
+++ b/app/assets/javascripts/work_items/components/work_item_development/work_item_development_ff_item.vue
@@ -19,7 +19,7 @@ export default {
       return active ? 'feature-flag' : 'feature-flag-disabled';
     },
     iconColor({ active }) {
-      return active ? 'gl-text-blue-500' : 'gl-text-gray-500';
+      return active ? 'gl-text-blue-500' : 'gl-text-subtle';
     },
     flagStatus(flag) {
       return flag.active ? __('Enabled') : __('Disabled');
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index aae79a6cc3b8fc93bb8308a246e2c884b251845a..ee79d552fe947ea605649981f155732cbdc68dd8 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -209,7 +209,7 @@ def time_ago_with_tooltip(time, placement: 'top', html_class: '', short_format:
   def edited_time_ago_with_tooltip(editable_object, placement: 'top', html_class: 'time_ago', exclude_author: false)
     return unless editable_object.edited?
 
-    content_tag :div, class: 'edited-text gl-mt-4 gl-text-gray-500 gl-text-sm' do
+    content_tag :div, class: 'edited-text gl-mt-4 gl-text-subtle gl-text-sm' do
       timeago = time_ago_with_tooltip(editable_object.last_edited_at, placement: placement, html_class: html_class)
 
       if !exclude_author && editable_object.last_edited_by
diff --git a/app/helpers/ci/runners_helper.rb b/app/helpers/ci/runners_helper.rb
index 72a1b3cab39dc94533848093ce56c11939c89360..5dca6eb1e65bb8cb524daefe9f8f14584ac6453a 100644
--- a/app/helpers/ci/runners_helper.rb
+++ b/app/helpers/ci/runners_helper.rb
@@ -29,7 +29,7 @@ def runner_status_icon(runner, size: 16, icon_class: '')
           end
 
         icon = 'status-waiting'
-        span_class = 'gl-text-gray-500'
+        span_class = 'gl-text-subtle'
       when :stale
         # runner may have contacted (or not) and be stale: consider both cases.
         title = contacted_at ? s_("Runners|Runner is stale; last contact was %{runner_contact} ago") % { runner_contact: time_ago_in_words(contacted_at) } : s_("Runners|Runner is stale; it has never contacted this instance")
diff --git a/app/helpers/milestones_helper.rb b/app/helpers/milestones_helper.rb
index 6f904ece638bc5ec133f8599ac19d1fb1c3ee84b..62f9024e6bbca4ff2dd582e4b3215aff73535fde 100644
--- a/app/helpers/milestones_helper.rb
+++ b/app/helpers/milestones_helper.rb
@@ -9,7 +9,7 @@ def milestone_header_class(primary, issuables)
   end
 
   def milestone_counter_class(primary)
-    primary ? 'gl-text-white' : 'gl-text-gray-500'
+    primary ? 'gl-text-white' : 'gl-text-subtle'
   end
 
   private
diff --git a/app/presenters/project_presenter.rb b/app/presenters/project_presenter.rb
index c574d24b15b20e2513915aa35b72063fb9f4c36c..16325945f687c84710bdbbbb8ac50c2185248910 100644
--- a/app/presenters/project_presenter.rb
+++ b/app/presenters/project_presenter.rb
@@ -23,7 +23,7 @@ class ProjectPresenter < Gitlab::View::Presenter::Delegated
   MAX_TOPICS_TO_SHOW = 3
 
   def statistic_default_class_list
-    'icon gl-mr-3 gl-text-gray-500'
+    'icon gl-mr-3 gl-text-subtle'
   end
 
   def statistic_icon(icon_name = 'plus', class_list = statistic_default_class_list)
diff --git a/app/views/admin/application_settings/_prometheus.html.haml b/app/views/admin/application_settings/_prometheus.html.haml
index 25e4bf11f328d601fa7a7de91c653a1d11706fe6..2bd733a93e5502ff05d18c448951298cd466d3a2 100644
--- a/app/views/admin/application_settings/_prometheus.html.haml
+++ b/app/views/admin/application_settings/_prometheus.html.haml
@@ -8,7 +8,7 @@
       = f.gitlab_ui_checkbox_component :prometheus_metrics_enabled,
         _('Enable GitLab Prometheus metrics endpoint'),
         help_text: s_('AdminSettings|Enable collection of application metrics. Restart required. %{link_start}Learn how to export metrics to Prometheus%{link_end}.').html_safe % { link_start: prometheus_help_link_start, link_end: '</a>'.html_safe }
-      .form-text.gl-text-gray-500.gl-pl-6
+      .form-text.gl-text-subtle.gl-pl-6
         - unless Gitlab::Metrics.metrics_folder_present?
           - icon_link = link_to sprite_icon('question-o'), help_page_path('administration/monitoring/prometheus/gitlab_metrics.md', anchor: 'metrics-shared-directory'), target: '_blank', rel: 'noopener noreferrer'
           = s_('AdminSettings|%{strongStart}WARNING:%{strongEnd} Environment variable %{environment_variable} does not exist or is not pointing to a valid directory. %{icon_link}').html_safe % { strongStart: '<strong class="gl-text-red-500">'.html_safe, strongEnd: '</strong>'.html_safe, environment_variable: '<code>prometheus_multiproc_dir</code>'.html_safe, icon_link: icon_link }
diff --git a/app/views/admin/application_settings/_usage.html.haml b/app/views/admin/application_settings/_usage.html.haml
index 1e63c1e74df4ed2e6d818fc83dacf77d6fb71bb4..810c6d2a0c34bc4ac19620e24a6a6b21a5c98d64 100644
--- a/app/views/admin/application_settings/_usage.html.haml
+++ b/app/views/admin/application_settings/_usage.html.haml
@@ -49,7 +49,7 @@
         help_text: tag.span(Gitlab.ee? ? optional_metrics_help_text : service_ping_help_text, id: 'service_ping_features_helper_text'),
         checkbox_options: { id: 'application_setting_usage_ping_features_enabled' },
         label_options: { id: 'service_ping_features_label' }
-      .form-text.gl-text-gray-500.gl-pl-6
+      .form-text.gl-text-subtle.gl-pl-6
         %p.gl-mb-3
           - registration_features_gitlab_path = help_page_path('administration/settings/usage_statistics.md', anchor: 'registration-features-program')
           - registration_features_gitlab_link = link_to('', registration_features_gitlab_path, target: '_blank', rel: 'noopener noreferrer')
diff --git a/app/views/admin/dashboard/_stats_users_table.html.haml b/app/views/admin/dashboard/_stats_users_table.html.haml
index 804dd0f92a38f26187faefdefd2b48e093e0c79d..218f91fd3a6bcd8059150f3c3684d29b567de944 100644
--- a/app/views/admin/dashboard/_stats_users_table.html.haml
+++ b/app/views/admin/dashboard/_stats_users_table.html.haml
@@ -1,4 +1,4 @@
-%table.table.gl-text-gray-500.gl-w-full
+%table.table.gl-text-subtle.gl-w-full
   %tr
     %td{ class: '!gl-p-5' }
       = s_('AdminArea|Users without a Group and Project')
diff --git a/app/views/admin/dashboard/stats.html.haml b/app/views/admin/dashboard/stats.html.haml
index 2b16a20a7589514ce10693f2cc1f9bedd80fbe60..4c419fcfb358b89991e09c47680417fd611c7844 100644
--- a/app/views/admin/dashboard/stats.html.haml
+++ b/app/views/admin/dashboard/stats.html.haml
@@ -8,7 +8,7 @@
 %p.gl-font-bold.gl-mt-8
   = s_('AdminArea|Totals')
 
-%table.gl-table.gl-text-gray-500.gl-w-full
+%table.gl-table.gl-text-subtle.gl-w-full
   = render_if_exists 'admin/dashboard/stats_active_users_row', users_statistics: @users_statistics
 
   %tr.gl-bg-gray-10.gl-text-gray-900
diff --git a/app/views/admin/groups/_group.html.haml b/app/views/admin/groups/_group.html.haml
index 5ed2defb785cbf3b2afee49c422624d9e72ffdf4..6f39326d139561452adddc7a627bb42e151f4621 100644
--- a/app/views/admin/groups/_group.html.haml
+++ b/app/views/admin/groups/_group.html.haml
@@ -13,7 +13,7 @@
       .description
         = markdown_field(group, :description)
 
-  .stats.gl-text-gray-500.gl-shrink-0.gl-hidden.sm:gl-flex
+  .stats.gl-text-subtle.gl-shrink-0.gl-hidden.sm:gl-flex
     = gl_badge_tag storage_counter(group.storage_size)
 
     = render_if_exists 'admin/namespace_plan_badge', namespace: group, css_class: 'gl-ml-5 gl-mr-0'
diff --git a/app/views/admin/projects/_projects.html.haml b/app/views/admin/projects/_projects.html.haml
index 66644d9691fce1e36e9defaf78a129fb7d9e8e0c..3eff7445ce929dcb932ebfd26f5d77019d888d73 100644
--- a/app/views/admin/projects/_projects.html.haml
+++ b/app/views/admin/projects/_projects.html.haml
@@ -19,7 +19,7 @@
               .description
                 = markdown_field(project, :description)
           = render_if_exists 'shared/projects/badges', project: project, css_class: 'gl-mr-3'
-          .stats.gl-text-gray-500.gl-shrink-0.gl-hidden.sm:gl-flex
+          .stats.gl-text-subtle.gl-shrink-0.gl-hidden.sm:gl-flex
             = gl_badge_tag storage_counter(project.statistics&.storage_size)
 
           .controls.gl-shrink-0.gl-ml-5
diff --git a/app/views/admin/topics/_topic.html.haml b/app/views/admin/topics/_topic.html.haml
index 89a334d73b72a054135e9753799560e05ae45192..8b98c11e49a6332030225f5fb9da55674b3677fb 100644
--- a/app/views/admin/topics/_topic.html.haml
+++ b/app/views/admin/topics/_topic.html.haml
@@ -10,7 +10,7 @@
     %div
       = topic.name
 
-  .stats.gl-text-gray-500.gl-shrink-0.gl-hidden.sm:gl-flex
+  .stats.gl-text-subtle.gl-shrink-0.gl-hidden.sm:gl-flex
     %span.gl-ml-5.has-tooltip{ title: n_('%d project', '%d projects', topic.total_projects_count) % topic.total_projects_count }
       = sprite_icon('bookmark', css_class: 'gl-align-text-bottom')
       = number_with_delimiter(topic.total_projects_count)
diff --git a/app/views/devise/sessions/restricted.html.haml b/app/views/devise/sessions/restricted.html.haml
index b81285e0a814e2dbdd275f393f39261b1b081772..ca4c812ded26f7b012855972ba52198ad982cf04 100644
--- a/app/views/devise/sessions/restricted.html.haml
+++ b/app/views/devise/sessions/restricted.html.haml
@@ -31,5 +31,5 @@
 
   .gl-flex.gl-justify-center.gl-items-center.gl-my-6
     = render Pajamas::SpinnerComponent.new(size: :sm)
-    .gl-text-gray-500.gl-ml-4
+    .gl-text-subtle.gl-ml-4
       You will be automatically redirected to JiHu after 30 seconds (此页面将在30秒后自动跳转)
diff --git a/app/views/devise/shared/_terms_of_service_notice.html.haml b/app/views/devise/shared/_terms_of_service_notice.html.haml
index dd23a299b029db5e02935a5af76b92c8b6b353bd..9aac5729009da0a05522ecfc5fb76c7eaad36b0c 100644
--- a/app/views/devise/shared/_terms_of_service_notice.html.haml
+++ b/app/views/devise/shared/_terms_of_service_notice.html.haml
@@ -2,5 +2,5 @@
 
 - css_class = local_assigns.fetch(:css_class, 'gl-mt-5')
 
-%p.gl-text-gray-500.gl-mb-0{ class: css_class }
+%p.gl-text-subtle.gl-mb-0{ class: css_class }
   = terms_service_notice_link(button_text)
diff --git a/app/views/doorkeeper/authorizations/new.html.haml b/app/views/doorkeeper/authorizations/new.html.haml
index dcff6cc17eddcadd59e94a4c0374609738c973ec..36ecf11834e173d97a0b3cc0bda13d4dc75d6503 100644
--- a/app/views/doorkeeper/authorizations/new.html.haml
+++ b/app/views/doorkeeper/authorizations/new.html.haml
@@ -9,7 +9,7 @@
       .gl-pl-1
         %strong= current_user.name
       &middot;
-      .gl-text-gray-500
+      .gl-text-subtle
         %span= current_user.to_reference
   - if current_user.admin?
     = render Pajamas::AlertComponent.new(variant: :warning, dismissible: false, alert_options: { class: 'gl-mb-5'}) do |c|
@@ -23,7 +23,7 @@
         - title = t(scope, scope: [:doorkeeper, :scopes])
         - description = t(scope, scope: [:doorkeeper, :scope_desc])
         = render Pajamas::AccordionItemComponent.new(title: title, state: :closed, button_options: { class: '!gl-text-default gl-font-bold' }) do
-          .gl-text-gray-500.gl-text-sm
+          .gl-text-subtle.gl-text-sm
             = description
   .info-well
     .well-segment
diff --git a/app/views/projects/merge_requests/creations/_new_submit.html.haml b/app/views/projects/merge_requests/creations/_new_submit.html.haml
index ce644ed672017b1fa7cd0b8f95dac4e95b82c6dc..d0e44258987590d0c8962058b9f9bdc3c32512fa 100644
--- a/app/views/projects/merge_requests/creations/_new_submit.html.haml
+++ b/app/views/projects/merge_requests/creations/_new_submit.html.haml
@@ -26,7 +26,7 @@
 
     #diff-notes-app.tab-content
       #new.commits.tab-pane.active
-        .gl-text-left.gl-my-5.gl-text-gray-500
+        .gl-text-left.gl-my-5.gl-text-subtle
           %p
             = _("There are no commits yet.")
   - else
diff --git a/app/views/shared/empty_states/_issues.html.haml b/app/views/shared/empty_states/_issues.html.haml
index 4a8b80638144376b2a1b3fb6ef59bfb6f377a32c..708658ebad081fffe45413827e994eeb6f9ef3bf 100644
--- a/app/views/shared/empty_states/_issues.html.haml
+++ b/app/views/shared/empty_states/_issues.html.haml
@@ -51,7 +51,7 @@
           - jira_docs_link_url = help_page_url('integration/jira/configure.md', anchor: 'view-jira-issues')
           - jira_docs_link_start = '<a href="%{url}" target="_blank" rel="noopener noreferrer">'.html_safe % { url: jira_docs_link_url }
           = html_escape(s_('JiraService|%{jira_docs_link_start}Enable the Jira integration%{jira_docs_link_end} to view your Jira issues in GitLab.')) % { jira_docs_link_start: jira_docs_link_start.html_safe, jira_docs_link_end: '</a>'.html_safe }
-        %p.gl-text-center.gl-mb-0.gl-text-gray-500
+        %p.gl-text-center.gl-mb-0.gl-text-subtle
           = s_('JiraService|This feature requires a Premium plan.')
 
       - else
diff --git a/app/views/shared/groups/_group.html.haml b/app/views/shared/groups/_group.html.haml
index af20c30bfa56613fc39c1073a272efaed4af735c..c4fe879c476c8d15e8e9889e70a4fe1b0338e180 100644
--- a/app/views/shared/groups/_group.html.haml
+++ b/app/views/shared/groups/_group.html.haml
@@ -15,7 +15,7 @@
       .description
         = markdown_field(group, :description)
 
-  .stats.gl-text-gray-500.gl-shrink-0
+  .stats.gl-text-subtle.gl-shrink-0
     %span.gl-ml-5.has-tooltip{ title: _('Projects') }
       = sprite_icon('project', css_class: 'gl-align-text-bottom')
       = number_with_delimiter(group.non_archived_projects.size)
diff --git a/app/views/shared/issuable/form/_metadata.html.haml b/app/views/shared/issuable/form/_metadata.html.haml
index 279c6bc53b6716ad908e698fdad12f3741dad66a..108470b129924d3e949fe596db63e301e46daaca 100644
--- a/app/views/shared/issuable/form/_metadata.html.haml
+++ b/app/views/shared/issuable/form/_metadata.html.haml
@@ -49,7 +49,7 @@
             merge_after: issuable.merge_schedule&.merge_after&.strftime('%Y-%m-%dT%H:%MZ'),
             param_key: issuable.class.model_name.param_key
           } }
-          %p.gl-text-gray-500.col-12= s_('MergeRequests|Requires that merge checks pass.')
+          %p.gl-text-subtle.col-12= s_('MergeRequests|Requires that merge checks pass.')
 
     - if has_due_date
       .col-lg-6
diff --git a/app/views/shared/namespaces/cascading_settings/_setting_label_fieldset.html.haml b/app/views/shared/namespaces/cascading_settings/_setting_label_fieldset.html.haml
index 66c760b466cb70364deaec2df4d6ff42272ca300..352460c6da3fed1a64acc89367bdfc0fdcac4d57 100644
--- a/app/views/shared/namespaces/cascading_settings/_setting_label_fieldset.html.haml
+++ b/app/views/shared/namespaces/cascading_settings/_setting_label_fieldset.html.haml
@@ -12,5 +12,5 @@
     - if setting_locked
       = render 'shared/namespaces/cascading_settings/lock_icon', local_assigns
 - if help_text
-  %p.gl-text-gray-500
+  %p.gl-text-subtle
     = help_text
diff --git a/app/views/shared/snippets/_snippet.html.haml b/app/views/shared/snippets/_snippet.html.haml
index fae83c9149001ccf0760d121bef658ebb10b6715..88f9acb6fff2549efa89cfba44a0918fa830ef91 100644
--- a/app/views/shared/snippets/_snippet.html.haml
+++ b/app/views/shared/snippets/_snippet.html.haml
@@ -14,7 +14,7 @@
         %span{ class: 'has-tooltip gl-bg-orange-50 gl-text-orange-600 gl-rounded-base gl-p-2', title: s_("Snippets|This snippet is hidden because its author has been banned") }
           = sprite_icon('spam', size: '16')
 
-      .snippet-info.gl-text-sm{ class: '!gl-text-gray-500' }
+      .snippet-info.gl-text-sm{ class: '!gl-text-subtle' }
         .gl-inline{ data: { testid: 'snippet-created-at'} }
           - created_at = time_ago_with_tooltip(snippet.created_at, placement: 'bottom')
           - author = link_to(snippet.author_name, user_snippets_path(snippet.author), data: { user_id: snippet.author.id }, class: 'gl-text-default')
diff --git a/app/views/users/show.html.haml b/app/views/users/show.html.haml
index bde6d79c051da5d3f42e92dc7b961fb10f36b66f..1b42c8dbd6e5f2f5033cdbf2df94dd0e9aee4135 100644
--- a/app/views/users/show.html.haml
+++ b/app/views/users/show.html.haml
@@ -35,7 +35,7 @@
       %div
         %h1.gl-heading-1.gl-leading-1.gl-mr-2{ class: '!gl-my-0', itemprop: 'name' }
           = user_display_name(@user)
-        .gl-text-size-h2.gl-text-gray-500.gl-font-normal.gl-my-0
+        .gl-text-size-h2.gl-text-subtle.gl-font-normal.gl-my-0
           = @user.to_reference
         - if !@user.blocked? && @user.confirmed? && @user.status&.customized?
           .gl-my-2.cover-status.gl-text-sm.gl-pt-2.gl-flex.gl-flex-col
diff --git a/ee/app/assets/javascripts/ai/components/user_feedback.vue b/ee/app/assets/javascripts/ai/components/user_feedback.vue
index b24adee232f2be48a5b2660ed7059dc6da5552aa..156f588e753902461e9c418131b7da06ec9d11b1 100644
--- a/ee/app/assets/javascripts/ai/components/user_feedback.vue
+++ b/ee/app/assets/javascripts/ai/components/user_feedback.vue
@@ -66,7 +66,7 @@ export default {
       <gl-button v-if="!feedbackReceived" variant="link" @click="$refs.feedbackModal.show()">{{
         feedbackLinkText
       }}</gl-button>
-      <span v-else class="gl-text-gray-500">
+      <span v-else class="gl-text-subtle">
         {{ $options.i18n.GENIE_CHAT_FEEDBACK_THANKS }}
       </span>
     </div>
diff --git a/ee/app/assets/javascripts/analytics/analytics_dashboards/components/list/dashboard_list_item.vue b/ee/app/assets/javascripts/analytics/analytics_dashboards/components/list/dashboard_list_item.vue
index 60b2eca55a3d6863e38a0b28213609f08db52e58..634c5ecc584bd9dccc2936dba01ac822c188cb3d 100644
--- a/ee/app/assets/javascripts/analytics/analytics_dashboards/components/list/dashboard_list_item.vue
+++ b/ee/app/assets/javascripts/analytics/analytics_dashboards/components/list/dashboard_list_item.vue
@@ -119,7 +119,7 @@ export default {
           </gl-badge>
         </div>
         <gl-truncate-text
-          class="gl-leading-normal gl-text-gray-500"
+          class="gl-leading-normal gl-text-subtle"
           :toggle-button-props="$options.truncateTextToggleButtonProps"
         >
           {{ dashboard.description }}
diff --git a/ee/app/assets/javascripts/analytics/cycle_analytics/components/create_value_stream_form/custom_stage_event_label_field.vue b/ee/app/assets/javascripts/analytics/cycle_analytics/components/create_value_stream_form/custom_stage_event_label_field.vue
index 23323d8a7f775017aa92a72a0fc1130e69e7f98b..6bc7bd9e4e7fccb26cacd6681bb9ecfa244666db 100644
--- a/ee/app/assets/javascripts/analytics/cycle_analytics/components/create_value_stream_form/custom_stage_event_label_field.vue
+++ b/ee/app/assets/javascripts/analytics/cycle_analytics/components/create_value_stream_form/custom_stage_event_label_field.vue
@@ -152,7 +152,7 @@ export default {
                 </span>
                 {{ selectedLabel.title }}
               </div>
-              <div v-else class="gl-text-gray-500">{{ $options.i18n.headerText }}</div>
+              <div v-else class="gl-text-subtle">{{ $options.i18n.headerText }}</div>
               <gl-icon name="chevron-down" />
             </gl-button>
           </template>
diff --git a/ee/app/assets/javascripts/analytics/cycle_analytics/components/no_data_available_state.vue b/ee/app/assets/javascripts/analytics/cycle_analytics/components/no_data_available_state.vue
index 8ee5877c55fb3185f8f2d8c8455218629f395859..3e3bdea847af8efd28cccd03cc40260becd4c224 100644
--- a/ee/app/assets/javascripts/analytics/cycle_analytics/components/no_data_available_state.vue
+++ b/ee/app/assets/javascripts/analytics/cycle_analytics/components/no_data_available_state.vue
@@ -27,7 +27,7 @@ export default {
       <div class="gl-font-bold" data-testid="vsa-no-data-title">{{ title }}</div>
     </template>
     <template #description>
-      <div class="gl-text-gray-500" data-testid="vsa-no-data-description">{{ description }}</div>
+      <div class="gl-text-subtle" data-testid="vsa-no-data-description">{{ description }}</div>
     </template>
   </gl-empty-state>
 </template>
diff --git a/ee/app/assets/javascripts/analytics/dashboards/ai_impact/components/metric_table.vue b/ee/app/assets/javascripts/analytics/dashboards/ai_impact/components/metric_table.vue
index 23cac76ee8bf94d7793db933a8b09435f28313a0..77a02e8a20442bbb76b0034bde533ef2542c8a0a 100644
--- a/ee/app/assets/javascripts/analytics/dashboards/ai_impact/components/metric_table.vue
+++ b/ee/app/assets/javascripts/analytics/dashboards/ai_impact/components/metric_table.vue
@@ -367,7 +367,7 @@ export default {
         v-else
         v-gl-tooltip="tooltip"
         :aria-label="tooltip"
-        class="gl-cursor-pointer gl-text-sm gl-text-gray-500 hover:gl-underline"
+        class="gl-cursor-pointer gl-text-sm gl-text-subtle hover:gl-underline"
         data-testid="metric-cell-no-change"
         tabindex="0"
       >
diff --git a/ee/app/assets/javascripts/analytics/devops_reports/devops_adoption/components/devops_adoption_overview_table.vue b/ee/app/assets/javascripts/analytics/devops_reports/devops_adoption/components/devops_adoption_overview_table.vue
index 6a40556a3aaafce135bd889d526e6da79bd1711a..b3dc5ed6b2e355f783738567d14a9fa200e87679 100644
--- a/ee/app/assets/javascripts/analytics/devops_reports/devops_adoption/components/devops_adoption_overview_table.vue
+++ b/ee/app/assets/javascripts/analytics/devops_reports/devops_adoption/components/devops_adoption_overview_table.vue
@@ -177,13 +177,13 @@ export default {
         <div data-testid="namespace">
           <template v-if="item.group.latestSnapshot">
             <template v-if="isCurrentGroup(item.group)">
-              <span class="gl-font-bold gl-text-gray-500">{{ item.group.namespace.fullName }}</span>
+              <span class="gl-font-bold gl-text-subtle">{{ item.group.namespace.fullName }}</span>
               <gl-badge class="gl-ml-1" variant="info">{{ __('This group') }}</gl-badge>
             </template>
             <gl-link
               v-else
               :href="getGroupAdoptionPath(item.group.namespace.fullPath)"
-              class="gl-font-bold gl-text-gray-500"
+              class="gl-font-bold gl-text-subtle"
             >
               {{ item.group.namespace.fullName }}
             </gl-link>
diff --git a/ee/app/assets/javascripts/analytics/devops_reports/devops_adoption/components/devops_adoption_table.vue b/ee/app/assets/javascripts/analytics/devops_reports/devops_adoption/components/devops_adoption_table.vue
index 53bf395bf62fe9e25a4f97646c9599e6ebc0df7f..560f647c068a02cbe9d685955bc3408d7eece84c 100644
--- a/ee/app/assets/javascripts/analytics/devops_reports/devops_adoption/components/devops_adoption_table.vue
+++ b/ee/app/assets/javascripts/analytics/devops_reports/devops_adoption/components/devops_adoption_table.vue
@@ -169,13 +169,13 @@ export default {
         <div data-testid="namespace">
           <template v-if="item.latestSnapshot">
             <template v-if="isCurrentGroup(item)">
-              <span class="gl-font-bold gl-text-gray-500">{{ item.namespace.fullName }}</span>
+              <span class="gl-font-bold gl-text-subtle">{{ item.namespace.fullName }}</span>
               <gl-badge class="gl-ml-1" variant="info">{{ __('This group') }}</gl-badge>
             </template>
             <gl-link
               v-else
               :href="getGroupAdoptionPath(item.namespace.fullPath)"
-              class="gl-font-bold gl-text-gray-500"
+              class="gl-font-bold gl-text-subtle"
             >
               {{ item.namespace.fullName }}
             </gl-link>
diff --git a/ee/app/assets/javascripts/analytics/group_ci_cd_analytics/components/release_stats_card.vue b/ee/app/assets/javascripts/analytics/group_ci_cd_analytics/components/release_stats_card.vue
index bd6652796f8f3693273676ca73c34501961e5a01..2257803831fd89177765f8462a3ae9741c442731 100644
--- a/ee/app/assets/javascripts/analytics/group_ci_cd_analytics/components/release_stats_card.vue
+++ b/ee/app/assets/javascripts/analytics/group_ci_cd_analytics/components/release_stats_card.vue
@@ -95,7 +95,7 @@ export default {
     <template #header>
       <header class="gl-flex gl-items-baseline">
         <h1 class="gl-m-0 gl-mr-5 gl-text-lg">{{ s__('CICDAnalytics|Releases') }}</h1>
-        <h2 class="gl-m-0 gl-text-base gl-font-normal gl-text-gray-500">
+        <h2 class="gl-m-0 gl-text-base gl-font-normal gl-text-subtle">
           {{ s__('CICDAnalytics|All time') }}
         </h2>
       </header>
diff --git a/ee/app/assets/javascripts/analytics/merge_request_analytics/components/throughput_chart.vue b/ee/app/assets/javascripts/analytics/merge_request_analytics/components/throughput_chart.vue
index 86090109efe5fb9ea8762e78a06cf74353151446..57139e9f6b15c262ec37c7c8b59162ab292a4451 100644
--- a/ee/app/assets/javascripts/analytics/merge_request_analytics/components/throughput_chart.vue
+++ b/ee/app/assets/javascripts/analytics/merge_request_analytics/components/throughput_chart.vue
@@ -121,7 +121,7 @@ export default {
   <div data-testid="throughput-chart">
     <throughput-stats :stats="singleStatsValues" :is-loading="isLoading" />
     <h4 data-testid="chartTitle">{{ $options.strings.chartTitle }}</h4>
-    <div class="gl-text-gray-500" data-testid="chartDescription">
+    <div class="gl-text-subtle" data-testid="chartDescription">
       {{ $options.strings.chartDescription }}
     </div>
     <chart-skeleton-loader v-if="isLoading" />
diff --git a/ee/app/assets/javascripts/approvals/components/security_configuration/unconfigured_security_rule.vue b/ee/app/assets/javascripts/approvals/components/security_configuration/unconfigured_security_rule.vue
index d0b4e258fcf4ef544e561a27f6cc9b2a5c737793..49d293777465724c72ffef4b82e2f5e9c4edbed3 100644
--- a/ee/app/assets/javascripts/approvals/components/security_configuration/unconfigured_security_rule.vue
+++ b/ee/app/assets/javascripts/approvals/components/security_configuration/unconfigured_security_rule.vue
@@ -25,7 +25,7 @@ export default {
       <div class="gl-w-full">
         <rule-name class="!gl-text-left" :name="rule.name" />
 
-        <div class="!gl-text-left gl-text-gray-500">
+        <div class="!gl-text-left gl-text-subtle">
           <gl-sprintf :message="rule.description">
             <template #link="{ content }">
               <gl-link :href="rule.docsPath" target="_blank">{{ content }}</gl-link>
diff --git a/ee/app/assets/javascripts/approvals/mr_edit/app.vue b/ee/app/assets/javascripts/approvals/mr_edit/app.vue
index 672d20e9db3fad2918b291f81d2c656074f76c24..55df32a38d09f4037cda7f7c00abb0998c459bcd 100644
--- a/ee/app/assets/javascripts/approvals/mr_edit/app.vue
+++ b/ee/app/assets/javascripts/approvals/mr_edit/app.vue
@@ -110,7 +110,7 @@ export default {
   <div class="gl-mt-2">
     <p
       v-safe-html="collapsedSummary"
-      class="gl-mb-0 gl-text-gray-500"
+      class="gl-mb-0 gl-text-subtle"
       data-testid="collapsedSummaryText"
     ></p>
 
diff --git a/ee/app/assets/javascripts/audit_events/components/stream/stream_destination_editor.vue b/ee/app/assets/javascripts/audit_events/components/stream/stream_destination_editor.vue
index 0822cfb24d31f17532b208fc0de93c7d6f4f9ecf..ea7400326de0aec25c58932714b39675caa50fba 100644
--- a/ee/app/assets/javascripts/audit_events/components/stream/stream_destination_editor.vue
+++ b/ee/app/assets/javascripts/audit_events/components/stream/stream_destination_editor.vue
@@ -893,12 +893,12 @@ export default {
             />
           </template>
         </gl-table-lite>
-        <p v-if="hasNoHeaders" class="gl-mb-5 gl-text-gray-500" data-testid="no-header-created">
+        <p v-if="hasNoHeaders" class="gl-mb-5 gl-text-subtle" data-testid="no-header-created">
           {{ $options.i18n.NO_HEADER_CREATED_TEXT }}
         </p>
         <p
           v-if="hasReachedMaxHeaders"
-          class="gl-mb-0 gl-mt-5 gl-text-gray-500"
+          class="gl-mb-0 gl-mt-5 gl-text-subtle"
           data-testid="maximum-headers"
         >
           <gl-sprintf :message="$options.i18n.MAXIMUM_HEADERS_TEXT">
diff --git a/ee/app/assets/javascripts/boards/components/assignee_select.vue b/ee/app/assets/javascripts/boards/components/assignee_select.vue
index 4451f98a5fd386c6ac2d702058f8992b07ed9b60..e8558ea8114cff4c6b4ec29d110c6e6537163f4d 100644
--- a/ee/app/assets/javascripts/boards/components/assignee_select.vue
+++ b/ee/app/assets/javascripts/boards/components/assignee_select.vue
@@ -151,7 +151,7 @@ export default {
           <div>@{{ selected.username }}</div>
         </div>
       </div>
-      <div v-else class="gl-text-gray-500">{{ $options.i18n.anyAssignee }}</div>
+      <div v-else class="gl-text-subtle">{{ $options.i18n.anyAssignee }}</div>
     </div>
 
     <dropdown-widget
diff --git a/ee/app/assets/javascripts/boards/components/board_scope_current_iteration.vue b/ee/app/assets/javascripts/boards/components/board_scope_current_iteration.vue
index 16e72dc45aaa69358c7056a4b36a43fbfee037a9..0a6c8daaa5dafd95de1ddacded9004010cbb93d0 100644
--- a/ee/app/assets/javascripts/boards/components/board_scope_current_iteration.vue
+++ b/ee/app/assets/javascripts/boards/components/board_scope_current_iteration.vue
@@ -45,7 +45,7 @@ export default {
     <gl-form-checkbox
       :disabled="!canAdminBoard"
       :checked="checked"
-      class="gl-text-gray-500"
+      class="gl-text-subtle"
       @change="handleToggle"
       >{{ $options.i18n.label }}
     </gl-form-checkbox>
diff --git a/ee/app/assets/javascripts/boards/components/epic_lane.vue b/ee/app/assets/javascripts/boards/components/epic_lane.vue
index dd10f0a2a3715fa182f22faa5e7d60cceccdcd32..feb0813fe0ddf810de340652bb83a909877eb547 100644
--- a/ee/app/assets/javascripts/boards/components/epic_lane.vue
+++ b/ee/app/assets/javascripts/boards/components/epic_lane.vue
@@ -230,7 +230,7 @@ export default {
             v-if="!isLoading"
             v-gl-tooltip.hover
             :title="issuesCountTooltipText"
-            class="gl-flex gl-items-center gl-text-gray-500"
+            class="gl-flex gl-items-center gl-text-subtle"
             tabindex="0"
             :aria-label="issuesCountTooltipText"
             data-testid="epic-lane-issue-count"
diff --git a/ee/app/assets/javascripts/boards/components/labels_select.vue b/ee/app/assets/javascripts/boards/components/labels_select.vue
index fc84ec83aee1dd848551e9690d1e94d7c0acfc63..e7af0a5f9374fde18bda61753753b27f18a6e9f3 100644
--- a/ee/app/assets/javascripts/boards/components/labels_select.vue
+++ b/ee/app/assets/javascripts/boards/components/labels_select.vue
@@ -186,7 +186,7 @@ export default {
         {{ $options.i18n.edit }}
       </gl-button>
     </div>
-    <div class="gl-mb-2 gl-text-gray-500" data-testid="selected-labels">
+    <div class="gl-mb-2 gl-text-subtle" data-testid="selected-labels">
       <div v-if="isLabelsEmpty">{{ $options.i18n.anyLabel }}</div>
       <dropdown-value
         v-else
diff --git a/ee/app/assets/javascripts/boards/components/milestone_select.vue b/ee/app/assets/javascripts/boards/components/milestone_select.vue
index 7328f18c336f7df97ec7bab2fe83956d0c2764c7..f4903f87f5630ec707b426b74e229a8524831e3a 100644
--- a/ee/app/assets/javascripts/boards/components/milestone_select.vue
+++ b/ee/app/assets/javascripts/boards/components/milestone_select.vue
@@ -69,7 +69,7 @@ export default {
       return this.selected.title;
     },
     milestoneTitleClass() {
-      return this.anyMilestone ? 'gl-text-gray-500' : 'gl-font-bold';
+      return this.anyMilestone ? 'gl-text-subtle' : 'gl-font-bold';
     },
     isLoading() {
       return this.$apollo.queries.milestones.loading;
diff --git a/ee/app/assets/javascripts/burndown_chart/components/timebox_summary_cards.vue b/ee/app/assets/javascripts/burndown_chart/components/timebox_summary_cards.vue
index 287d43da20dab1422835f27a3b87b3f1817764bd..5dcb24664ac6c6f44af0ee9bde16ccd751962089 100644
--- a/ee/app/assets/javascripts/burndown_chart/components/timebox_summary_cards.vue
+++ b/ee/app/assets/javascripts/burndown_chart/components/timebox_summary_cards.vue
@@ -45,7 +45,7 @@ export default {
           <span class="gl-mr-2 gl-border-1 gl-border-gray-100 gl-pr-3 gl-border-r-solid">
             {{ column.title }}
             <span class="gl-font-bold"
-              >{{ percent(column.value) }}<small class="gl-text-gray-500">%</small></span
+              >{{ percent(column.value) }}<small class="gl-text-subtle">%</small></span
             >
           </span>
           <gl-sprintf :message="__('%{count} of %{total}')">
diff --git a/ee/app/assets/javascripts/ci/runner/components/runner_active_list.vue b/ee/app/assets/javascripts/ci/runner/components/runner_active_list.vue
index 85963467ad6873ff53cb480187416a0f02624296..e9dfccdf2214b53820a3716884ada2b1ddbcb0d2 100644
--- a/ee/app/assets/javascripts/ci/runner/components/runner_active_list.vue
+++ b/ee/app/assets/javascripts/ci/runner/components/runner_active_list.vue
@@ -58,7 +58,7 @@ export default {
         <gl-skeleton-loader :lines="9" />
       </template>
       <template #cell(index)="{ index }">
-        <span class="gl-text-size-h2 gl-text-gray-500">{{ index + 1 }}</span>
+        <span class="gl-text-size-h2 gl-text-subtle">{{ index + 1 }}</span>
       </template>
       <template #cell(runner)="{ item = {} }">
         <runner-full-name :runner="item" />
diff --git a/ee/app/assets/javascripts/ci/runner/components/runner_dashboard_stat_status.vue b/ee/app/assets/javascripts/ci/runner/components/runner_dashboard_stat_status.vue
index 38dc9d4779380c732234383bac14f76857148cf5..ddb17bd715d6da40d898aa04f64d4515b944ba31 100644
--- a/ee/app/assets/javascripts/ci/runner/components/runner_dashboard_stat_status.vue
+++ b/ee/app/assets/javascripts/ci/runner/components/runner_dashboard_stat_status.vue
@@ -47,7 +47,7 @@ export default {
         case STATUS_ONLINE:
           return { class: 'gl-text-green-500', name: 'status-active' };
         case STATUS_OFFLINE:
-          return { class: 'gl-text-gray-500', name: 'status-waiting' };
+          return { class: 'gl-text-subtle', name: 'status-waiting' };
         default:
           return null;
       }
diff --git a/ee/app/assets/javascripts/ci/secrets/components/secret_details/secret_details_wrapper.vue b/ee/app/assets/javascripts/ci/secrets/components/secret_details/secret_details_wrapper.vue
index c77ac1b6fa7af21b0f9cfc22d6acd7c30e9c5d2b..002cd676f8d3b108d46f82d7cfdc0fc0d54a6084 100644
--- a/ee/app/assets/javascripts/ci/secrets/components/secret_details/secret_details_wrapper.vue
+++ b/ee/app/assets/javascripts/ci/secrets/components/secret_details/secret_details_wrapper.vue
@@ -132,7 +132,7 @@ export default {
         >
           {{ $options.SECRET_STATUS[secret.status].text }}
         </gl-badge>
-        <span class="gl-ml-3 gl-text-gray-500" data-testid="secret-created-at">
+        <span class="gl-ml-3 gl-text-subtle" data-testid="secret-created-at">
           {{ createdAtText }}
         </span>
       </div>
diff --git a/ee/app/assets/javascripts/compliance_dashboard/components/violations_report/drawer_sections/branch_path.vue b/ee/app/assets/javascripts/compliance_dashboard/components/violations_report/drawer_sections/branch_path.vue
index 669b1363590a95cc1a567b160d1bdcfd313fcae9..c704cbf1f035ab853a9e6d0b1e1c7c822b4e089c 100644
--- a/ee/app/assets/javascripts/compliance_dashboard/components/violations_report/drawer_sections/branch_path.vue
+++ b/ee/app/assets/javascripts/compliance_dashboard/components/violations_report/drawer_sections/branch_path.vue
@@ -53,7 +53,7 @@ export default {
   <div>
     <drawer-section-header>{{ $options.i18n.header }}</drawer-section-header>
     <branch-details
-      class="gl-justify-start gl-text-gray-500"
+      class="gl-justify-start gl-text-subtle"
       :source-branch="sourceBranchOpts"
       :target-branch="targeBranchOpts"
     />
diff --git a/ee/app/assets/javascripts/compliance_dashboard/components/violations_report/shared/drawer_section_sub_header.vue b/ee/app/assets/javascripts/compliance_dashboard/components/violations_report/shared/drawer_section_sub_header.vue
index fd32de322ee88b27039ca8fa8da171ec5f5c40a7..bdfe8914029f2c5571ad90aef52287bc77e45136 100644
--- a/ee/app/assets/javascripts/compliance_dashboard/components/violations_report/shared/drawer_section_sub_header.vue
+++ b/ee/app/assets/javascripts/compliance_dashboard/components/violations_report/shared/drawer_section_sub_header.vue
@@ -10,7 +10,7 @@ export default {
 };
 </script>
 <template>
-  <p class="gl-text-gray-500" :class="{ 'gl-mb-4': !isEmpty, 'gl-mb-0': isEmpty }">
+  <p class="gl-text-subtle" :class="{ 'gl-mb-4': !isEmpty, 'gl-mb-0': isEmpty }">
     <slot></slot>
   </p>
 </template>
diff --git a/ee/app/assets/javascripts/dependencies/components/dependency_location.vue b/ee/app/assets/javascripts/dependencies/components/dependency_location.vue
index d32a3b8cee0f23d2be22cf885716332600625391..4398209822f3d138e745d9c604f5487ee6e0552f 100644
--- a/ee/app/assets/javascripts/dependencies/components/dependency_location.vue
+++ b/ee/app/assets/javascripts/dependencies/components/dependency_location.vue
@@ -67,7 +67,7 @@ export default {
 </script>
 
 <template>
-  <gl-intersperse separator=" / " class="gl-text-gray-500">
+  <gl-intersperse separator=" / " class="gl-text-subtle">
     <!-- We need to put an extra span to avoid separator between path & top level label -->
     <span>
       <component
@@ -107,7 +107,7 @@ export default {
         <!-- footer -->
         <div class="gl-mt-4">
           <gl-icon class="!gl-align-middle" name="information" :size="12" variant="info" />
-          <span class="gl-align-middle gl-text-gray-500">
+          <span class="gl-align-middle gl-text-subtle">
             {{ s__('Dependencies|There may be multiple paths') }}
           </span>
         </div>
diff --git a/ee/app/assets/javascripts/dependencies/components/dependency_location_count.vue b/ee/app/assets/javascripts/dependencies/components/dependency_location_count.vue
index cc88630041fed9971af453e8f7466590115f64a5..2d57e34999c68ce8c31daac42ef249b7d90d374a 100644
--- a/ee/app/assets/javascripts/dependencies/components/dependency_location_count.vue
+++ b/ee/app/assets/javascripts/dependencies/components/dependency_location_count.vue
@@ -125,7 +125,7 @@ export default {
             <gl-icon name="doc-text" class="gl-absolute" />
             <gl-truncate position="start" :text="item.location.path" with-tooltip class="gl-pl-6" />
           </gl-link>
-          <div v-else class="gl-text-gray-500" data-testid="unknown-path">
+          <div v-else class="gl-text-subtle" data-testid="unknown-path">
             <gl-icon name="error" class="gl-absolute" />
             <gl-truncate
               position="start"
@@ -135,7 +135,7 @@ export default {
             />
           </div>
         </div>
-        <gl-truncate :text="item.project.name" class="gl-mt-2 gl-pl-6 gl-text-gray-500" />
+        <gl-truncate :text="item.project.name" class="gl-mt-2 gl-pl-6 gl-text-subtle" />
       </div>
     </template>
   </gl-collapsible-listbox>
diff --git a/ee/app/assets/javascripts/environments_dashboard/components/dashboard/project_header.vue b/ee/app/assets/javascripts/environments_dashboard/components/dashboard/project_header.vue
index 9bd625c84d3e56993f6a811c625f609701263407..8a1cd3fa3be4013a43ba3c9f3f40178e5685b7bb 100644
--- a/ee/app/assets/javascripts/environments_dashboard/components/dashboard/project_header.vue
+++ b/ee/app/assets/javascripts/environments_dashboard/components/dashboard/project_header.vue
@@ -38,7 +38,7 @@ export default {
 
 <template>
   <div
-    class="gl-mb-5 gl-flex gl-items-center gl-justify-between gl-border-1 gl-border-gray-100 gl-pb-3 gl-text-gray-500 gl-border-b-solid"
+    class="gl-mb-5 gl-flex gl-items-center gl-justify-between gl-border-1 gl-border-gray-100 gl-pb-3 gl-text-subtle gl-border-b-solid"
   >
     <div class="gl-flex gl-items-center">
       <project-avatar
@@ -49,7 +49,7 @@ export default {
         class="gl-mr-3"
       />
       <gl-link
-        class="gl-mr-3 gl-text-gray-500"
+        class="gl-mr-3 gl-text-subtle"
         :href="`/${project.namespace.full_path}`"
         data-testid="namespace-link"
       >
@@ -65,7 +65,7 @@ export default {
         :size="$options.avatarSize"
         class="gl-mr-3"
       />
-      <gl-link class="gl-mr-3 gl-text-gray-500" :href="project.web_url" data-testid="project-link">
+      <gl-link class="gl-mr-3 gl-text-subtle" :href="project.web_url" data-testid="project-link">
         {{ project.name }}
       </gl-link>
     </div>
@@ -76,7 +76,7 @@ export default {
         text-sr-only
         :title="$options.moreActionsText"
         icon="ellipsis_v"
-        class="gl-text-gray-500"
+        class="gl-text-subtle"
         toggle-class="gl-flex gl-items-center !gl-px-3 gl-bg-transparent !gl-shadow-none"
         no-caret
       >
diff --git a/ee/app/assets/javascripts/escalation_policies/components/add_edit_escalation_policy_form.vue b/ee/app/assets/javascripts/escalation_policies/components/add_edit_escalation_policy_form.vue
index 1d06f223464e13a165e36db33c04d2234f0663b8..720f726eca5a639731c6c4ba0d66db1cf0991bbe 100644
--- a/ee/app/assets/javascripts/escalation_policies/components/add_edit_escalation_policy_form.vue
+++ b/ee/app/assets/javascripts/escalation_policies/components/add_edit_escalation_policy_form.vue
@@ -186,7 +186,7 @@ export default {
     <gl-link v-if="!hasMaxRules" @click="addRule">
       <span>{{ $options.i18n.addRule }}</span>
     </gl-link>
-    <span v-else data-testid="max-rules-text" class="gl-text-gray-500">
+    <span v-else data-testid="max-rules-text" class="gl-text-subtle">
       {{ $options.i18n.maxRules }}
     </span>
   </gl-form>
diff --git a/ee/app/assets/javascripts/escalation_policies/components/escalation_policy.vue b/ee/app/assets/javascripts/escalation_policies/components/escalation_policy.vue
index b7abb70b4ec3874b89d4e01ae7fb88ee86c242ee..1b6632fa66af35323b1e76636ab73afdee6c7ab7 100644
--- a/ee/app/assets/javascripts/escalation_policies/components/escalation_policy.vue
+++ b/ee/app/assets/javascripts/escalation_policies/components/escalation_policy.vue
@@ -183,7 +183,7 @@ export default {
         @hidden="bodyClass = 'gl-p-0'"
         @show="bodyClass = 'gl-p-5'"
       >
-        <p v-if="policy.description" class="gl-mb-5 gl-text-gray-500">
+        <p v-if="policy.description" class="gl-mb-5 gl-text-subtle">
           {{ policy.description }}
         </p>
         <div class="gl-rounded-base gl-border-1 gl-border-solid gl-border-gray-100 gl-p-5">
diff --git a/ee/app/assets/javascripts/external_issues_show/components/note.vue b/ee/app/assets/javascripts/external_issues_show/components/note.vue
index 9d14553d7fdddd819e239947f3fe12e07a0f4967..6328c84f6f09527f91bbacad5a919059904c4c05 100644
--- a/ee/app/assets/javascripts/external_issues_show/components/note.vue
+++ b/ee/app/assets/javascripts/external_issues_show/components/note.vue
@@ -79,15 +79,15 @@ export default {
           <gl-link
             v-if="authorUsername"
             :href="authorWebUrl"
-            class="gl-mr-2 gl-whitespace-nowrap gl-text-gray-500"
+            class="gl-mr-2 gl-whitespace-nowrap gl-text-subtle"
             data-testid="author-username"
           >
             @{{ authorUsername }}
           </gl-link>
 
-          <span class="gl-mr-2 gl-text-gray-500">·</span>
+          <span class="gl-mr-2 gl-text-subtle">·</span>
 
-          <gl-link class="gl-text-gray-500" :href="noteAnchor" data-testid="time-ago-link">
+          <gl-link class="gl-text-subtle" :href="noteAnchor" data-testid="time-ago-link">
             <time-ago-tooltip :time="noteCreatedAt" tooltip-placement="bottom" />
           </gl-link>
         </div>
diff --git a/ee/app/assets/javascripts/geo_replicable/constants.js b/ee/app/assets/javascripts/geo_replicable/constants.js
index c15003dfb5283b340a3975f12a1c5f39a921a629..40bd7c8b33bd0fee178341395cc5304621feb870 100644
--- a/ee/app/assets/javascripts/geo_replicable/constants.js
+++ b/ee/app/assets/javascripts/geo_replicable/constants.js
@@ -41,7 +41,7 @@ export const STATUS_ICON_CLASS = {
   [FILTER_STATES.SYNCED.value]: 'gl-text-green-500',
   [FILTER_STATES.PENDING.value]: 'gl-text-orange-500',
   [FILTER_STATES.FAILED.value]: 'gl-text-red-500',
-  [DEFAULT_STATUS]: 'gl-text-gray-500',
+  [DEFAULT_STATUS]: 'gl-text-subtle',
 };
 
 export const DEFAULT_SEARCH_DELAY = 500;
diff --git a/ee/app/assets/javascripts/geo_site_form/components/geo_site_form_core.vue b/ee/app/assets/javascripts/geo_site_form/components/geo_site_form_core.vue
index 40f604677f48a17ff807b1f90c913019a6a80a64..fb21ca59650e84c6dfd19fc1229f1cd908b26b69 100644
--- a/ee/app/assets/javascripts/geo_site_form/components/geo_site_form_core.vue
+++ b/ee/app/assets/javascripts/geo_site_form/components/geo_site_form_core.vue
@@ -85,7 +85,7 @@ export default {
           @update="checkName"
         />
         <!-- eslint-enable vue/no-mutating-props -->
-        <span class="m-n5 gl-z-2 gl-text-gray-500">{{ 255 - siteData.name.length }}</span>
+        <span class="m-n5 gl-z-2 gl-text-subtle">{{ 255 - siteData.name.length }}</span>
       </div>
     </gl-form-group>
     <section class="form-row">
@@ -115,7 +115,7 @@ export default {
             @update="checkUrl"
           />
           <!-- eslint-enable vue/no-mutating-props -->
-          <span class="m-n5 gl-z-2 gl-text-gray-500">{{ 255 - siteData.url.length }}</span>
+          <span class="m-n5 gl-z-2 gl-text-subtle">{{ 255 - siteData.url.length }}</span>
         </div>
       </gl-form-group>
       <gl-form-group
@@ -133,7 +133,7 @@ export default {
             type="text"
           />
           <!-- eslint-enable vue/no-mutating-props -->
-          <span class="m-n5 gl-z-2 gl-text-gray-500">{{ 255 - siteData.internalUrl.length }}</span>
+          <span class="m-n5 gl-z-2 gl-text-subtle">{{ 255 - siteData.internalUrl.length }}</span>
         </div>
       </gl-form-group>
     </section>
diff --git a/ee/app/assets/javascripts/geo_sites/components/details/primary_site/geo_site_primary_other_info.vue b/ee/app/assets/javascripts/geo_sites/components/details/primary_site/geo_site_primary_other_info.vue
index 573492275896c904edf17f99a3eef0b9b3ac8b1c..c35c9c8d14b304fae8de2c92a07301ff16bd01ea 100644
--- a/ee/app/assets/javascripts/geo_sites/components/details/primary_site/geo_site_primary_other_info.vue
+++ b/ee/app/assets/javascripts/geo_sites/components/details/primary_site/geo_site_primary_other_info.vue
@@ -86,7 +86,7 @@ export default {
           <time-ago
             v-if="lastEventTimestampInMillis"
             :time="lastEventTimestampInMillis"
-            class="gl-text-sm gl-font-normal gl-text-gray-500"
+            class="gl-text-sm gl-font-normal gl-text-subtle"
           />
         </template>
         <span v-else>{{ $options.i18n.unknown }}</span>
diff --git a/ee/app/assets/javascripts/geo_sites/components/details/secondary_site/geo_site_secondary_other_info.vue b/ee/app/assets/javascripts/geo_sites/components/details/secondary_site/geo_site_secondary_other_info.vue
index 6491cbc3e0edf398f35b7f4f58fb53407cdc2491..09b0e72e56497758c4bfb654443f0c2b73b47564 100644
--- a/ee/app/assets/javascripts/geo_sites/components/details/secondary_site/geo_site_secondary_other_info.vue
+++ b/ee/app/assets/javascripts/geo_sites/components/details/secondary_site/geo_site_secondary_other_info.vue
@@ -17,7 +17,7 @@ export default {
     ok: __('OK'),
     nA: __('Not applicable.'),
   },
-  classTimestamp: 'gl-text-gray-500 gl-text-sm gl-font-normal',
+  classTimestamp: 'gl-text-subtle gl-text-sm gl-font-normal',
   components: {
     GlCard,
     TimeAgo,
diff --git a/ee/app/assets/javascripts/geo_sites/components/details/secondary_site/geo_site_sync_settings.vue b/ee/app/assets/javascripts/geo_sites/components/details/secondary_site/geo_site_sync_settings.vue
index 32f0d7fec18a0fad98c343246d57663a85732ffb..9569af595f8fc10889b167b3db48fc67504d5935 100644
--- a/ee/app/assets/javascripts/geo_sites/components/details/secondary_site/geo_site_sync_settings.vue
+++ b/ee/app/assets/javascripts/geo_sites/components/details/secondary_site/geo_site_sync_settings.vue
@@ -55,7 +55,7 @@ export default {
     <span class="gl-font-bold" data-testid="sync-type">{{ syncType }}</span>
     <span
       v-if="!eventTimestampEmpty"
-      class="gl-ml-3 gl-text-sm gl-text-gray-500"
+      class="gl-ml-3 gl-text-sm gl-text-subtle"
       data-testid="sync-status-event-info"
     >
       {{ syncStatusEventInfo }}
diff --git a/ee/app/assets/javascripts/geo_sites/components/header/geo_site_last_updated.vue b/ee/app/assets/javascripts/geo_sites/components/header/geo_site_last_updated.vue
index 0a5e0f8a22a7b406451a3ab9ef3b599fb3eb9b51..e9e3fc9ef1eaa28bb4b9b9f059badd60f5d89714 100644
--- a/ee/app/assets/javascripts/geo_sites/components/header/geo_site_last_updated.vue
+++ b/ee/app/assets/javascripts/geo_sites/components/header/geo_site_last_updated.vue
@@ -58,7 +58,7 @@ export default {
 
 <template>
   <div class="gl-flex gl-items-center">
-    <span class="gl-text-gray-500" data-testid="last-updated-main-text">
+    <span class="gl-text-subtle" data-testid="last-updated-main-text">
       <gl-sprintf :message="$options.i18n.timeAgoMainText">
         <template #timeAgo>
           <time-ago :time="statusCheckTimestamp" />
diff --git a/ee/app/assets/javascripts/issues/components/issue_weight.vue b/ee/app/assets/javascripts/issues/components/issue_weight.vue
index 50831668809384e88ee6e97299aa6cee7c99905d..32143cb97f71138a0764d701e9f1347d9001b3e6 100644
--- a/ee/app/assets/javascripts/issues/components/issue_weight.vue
+++ b/ee/app/assets/javascripts/issues/components/issue_weight.vue
@@ -19,7 +19,7 @@ export default {
   <work-item-attribute
     wrapper-component="div"
     anchor-id="board-card-weight"
-    wrapper-component-class="board-card-info board-card-weight gl-mr-3 gl-inline-flex gl-cursor-help gl-items-center gl-align-bottom gl-text-sm gl-text-gray-500"
+    wrapper-component-class="board-card-info board-card-weight gl-mr-3 gl-inline-flex gl-cursor-help gl-items-center gl-align-bottom gl-text-sm gl-text-subtle"
     :title="`${weight}`"
     title-component-class="board-card-info-text"
     icon-name="weight"
diff --git a/ee/app/assets/javascripts/issues_analytics/components/issues_analytics_chart.vue b/ee/app/assets/javascripts/issues_analytics/components/issues_analytics_chart.vue
index 0d5692a38f20979d0eef8955799501ff060e2bbf..e84c5775830f08bd7fd5ffa224661b3c0c93f428 100644
--- a/ee/app/assets/javascripts/issues_analytics/components/issues_analytics_chart.vue
+++ b/ee/app/assets/javascripts/issues_analytics/components/issues_analytics_chart.vue
@@ -164,7 +164,7 @@ export default {
       />
       <div v-if="chart" class="gl-flex gl-items-center">
         <gl-chart-legend :chart="chart" :series-info="legendSeriesInfo" />
-        <div class="gl-text-sm gl-text-gray-500">
+        <div class="gl-text-sm gl-text-subtle">
           {{ $options.i18n.seriesTotal }} {{ seriesTotal }}
           &#8226;
           {{ $options.i18n.seriesAvg }} {{ seriesAverage }}
diff --git a/ee/app/assets/javascripts/maintenance_mode_settings/components/app.vue b/ee/app/assets/javascripts/maintenance_mode_settings/components/app.vue
index 7f5066cbc57b9265bc6136b4767756f6dd12d703..d345cf1a1dfb6e49cee4bb0364d8336c81070e03 100644
--- a/ee/app/assets/javascripts/maintenance_mode_settings/components/app.vue
+++ b/ee/app/assets/javascripts/maintenance_mode_settings/components/app.vue
@@ -48,7 +48,7 @@ export default {
         />
         <div class="gl-ml-3">
           <p class="gl-mb-0">{{ $options.i18n.toggleLabel }}</p>
-          <p class="gl-mb-0 gl-text-gray-500">
+          <p class="gl-mb-0 gl-text-subtle">
             {{ $options.i18n.toggleHelpText }}
           </p>
         </div>
diff --git a/ee/app/assets/javascripts/metrics/details/related_traces.vue b/ee/app/assets/javascripts/metrics/details/related_traces.vue
index 48191214400d1478edf84d42950503b3e41e09d4..1fcda79f5c04c6979bd93bc24473aa5c1efad7cd 100644
--- a/ee/app/assets/javascripts/metrics/details/related_traces.vue
+++ b/ee/app/assets/javascripts/metrics/details/related_traces.vue
@@ -95,7 +95,7 @@ export default {
       </li>
     </ul>
 
-    <p v-else class="gl-text-gray-500">
+    <p v-else class="gl-text-subtle">
       {{
         s__(
           'ObservabilityMetrics|No related traces for the selected time. Select another data point and try again.',
diff --git a/ee/app/assets/javascripts/oncall_schedules/components/oncall_schedule.vue b/ee/app/assets/javascripts/oncall_schedules/components/oncall_schedule.vue
index bd7600f6cd50b4ed3ec0aa172747677b4a1cf189..b390e18cc6fae24a4fd5bf65ec26e6785b906f3a 100644
--- a/ee/app/assets/javascripts/oncall_schedules/components/oncall_schedule.vue
+++ b/ee/app/assets/javascripts/oncall_schedules/components/oncall_schedule.vue
@@ -275,7 +275,7 @@ export default {
         <div class="gl-flex gl-items-start" data-testid="schedule-header">
           <div class="gl-grow">
             <h2 class="gl-m-0 gl-font-bold">{{ schedule.name }}</h2>
-            <p class="gl-m-0 gl-text-gray-500">
+            <p class="gl-m-0 gl-text-subtle">
               {{ scheduleInfo }}
             </p>
           </div>
diff --git a/ee/app/assets/javascripts/oncall_schedules/components/schedule/components/preset_weeks/weeks_header_item.vue b/ee/app/assets/javascripts/oncall_schedules/components/schedule/components/preset_weeks/weeks_header_item.vue
index bdccd692a003c5e6137fcf7f5078d8cfc068d788..31c9632cf37851710e3e529561b49d71a391eafe 100644
--- a/ee/app/assets/javascripts/oncall_schedules/components/schedule/components/preset_weeks/weeks_header_item.vue
+++ b/ee/app/assets/javascripts/oncall_schedules/components/schedule/components/preset_weeks/weeks_header_item.vue
@@ -44,7 +44,7 @@ export default {
 
 <template>
   <span class="timeline-header-item gl-float-left" :style="timelineHeaderStyles">
-    <div class="gl-pl-6 gl-font-bold gl-text-gray-500" data-testid="timeline-header-label">
+    <div class="gl-pl-6 gl-font-bold gl-text-subtle" data-testid="timeline-header-label">
       {{ timelineHeaderLabel }}
     </div>
     <weeks-header-sub-item :timeframe-item="timeframeItem" />
diff --git a/ee/app/assets/javascripts/pages/projects/learn_gitlab/components/included_in_trial_indicator.vue b/ee/app/assets/javascripts/pages/projects/learn_gitlab/components/included_in_trial_indicator.vue
index 40973f76bf5e84234bc879687971a38cd03e4885..7d077a8463aba082920cd515a6f71622dce36594 100644
--- a/ee/app/assets/javascripts/pages/projects/learn_gitlab/components/included_in_trial_indicator.vue
+++ b/ee/app/assets/javascripts/pages/projects/learn_gitlab/components/included_in_trial_indicator.vue
@@ -9,7 +9,7 @@ export default {
 };
 </script>
 <template>
-  <span class="gl-italic gl-text-gray-500" data-testid="trial-only">
+  <span class="gl-italic gl-text-subtle" data-testid="trial-only">
     {{ $options.i18n.trialOnly }}
   </span>
 </template>
diff --git a/ee/app/assets/javascripts/project_quality_summary/app.vue b/ee/app/assets/javascripts/project_quality_summary/app.vue
index 3a6d5f8ca2d7ab5dbf2ddec47842bc145c5ddc2a..b2cd75edafcf1c1eb96b59df476d57a4d0bb6e34 100644
--- a/ee/app/assets/javascripts/project_quality_summary/app.vue
+++ b/ee/app/assets/javascripts/project_quality_summary/app.vue
@@ -131,7 +131,7 @@ export default {
               {{ $options.i18n.testRuns.learnMoreLink }}
             </gl-link>
           </gl-popover>
-          <strong class="gl-mx-2 gl-text-gray-500">{{ $options.i18n.subHeader }}</strong>
+          <strong class="gl-mx-2 gl-text-subtle">{{ $options.i18n.subHeader }}</strong>
           <gl-link
             :href="pipelineTestReportPath"
             class="gl-mx-2 gl-grow gl-text-right"
@@ -200,7 +200,7 @@ export default {
               {{ $options.i18n.codeQuality.learnMoreLink }}
             </gl-link>
           </gl-popover>
-          <strong class="gl-mx-2 gl-text-gray-500">{{ $options.i18n.subHeader }}</strong>
+          <strong class="gl-mx-2 gl-text-subtle">{{ $options.i18n.subHeader }}</strong>
           <gl-link
             :href="pipelineCodeQualityReportPath"
             class="gl-mx-2 gl-grow gl-text-right"
@@ -262,7 +262,7 @@ export default {
               {{ $options.i18n.coverage.learnMoreLink }}
             </gl-link>
           </gl-popover>
-          <strong class="gl-mx-2 gl-text-gray-500">{{ $options.i18n.subHeader }}</strong>
+          <strong class="gl-mx-2 gl-text-subtle">{{ $options.i18n.subHeader }}</strong>
           <gl-link
             :href="coverageChartPath"
             class="gl-mx-2 gl-grow gl-text-right"
diff --git a/ee/app/assets/javascripts/projects/components/project_delayed_delete_button.vue b/ee/app/assets/javascripts/projects/components/project_delayed_delete_button.vue
index 8000a8500ff2b7b8940e15f9b183a57b36891d8d..2db06a1c385795356732d2789933040744299135 100644
--- a/ee/app/assets/javascripts/projects/components/project_delayed_delete_button.vue
+++ b/ee/app/assets/javascripts/projects/components/project_delayed_delete_button.vue
@@ -66,7 +66,7 @@ export default {
     :stars-count="starsCount"
   >
     <template #modal-footer>
-      <p class="gl-mb-0 gl-mt-3 gl-flex gl-items-center gl-text-gray-500">
+      <p class="gl-mb-0 gl-mt-3 gl-flex gl-items-center gl-text-subtle">
         <gl-sprintf :message="$options.strings.restoreMessage">
           <template #date>{{ delayedDeletionDate }}</template>
         </gl-sprintf>
diff --git a/ee/app/assets/javascripts/related_items_tree/components/tree_item_body.vue b/ee/app/assets/javascripts/related_items_tree/components/tree_item_body.vue
index 18052cc4beb3a73382591a3c6e3c6c756f799e27..11899035493b08756c9686e0c080263dd8e5a305 100644
--- a/ee/app/assets/javascripts/related_items_tree/components/tree_item_body.vue
+++ b/ee/app/assets/javascripts/related_items_tree/components/tree_item_body.vue
@@ -286,7 +286,7 @@ export default {
             <div
               v-if="isEpic"
               ref="countBadge"
-              class="p-lg-0 gl-inline-flex gl-py-0 gl-text-gray-500"
+              class="p-lg-0 gl-inline-flex gl-py-0 gl-text-subtle"
             >
               <span v-if="allowSubEpics" class="gl-mb-1 gl-mr-4 gl-inline-flex gl-items-center">
                 <gl-icon name="epic" class="gl-mr-2" />
diff --git a/ee/app/assets/javascripts/requirements/components/requirement_form.vue b/ee/app/assets/javascripts/requirements/components/requirement_form.vue
index cb1f66fdfe54b37413d362b861a88e32a285c2f4..b41e160e03f99d0a828dab029f44974c8f46e2f7 100644
--- a/ee/app/assets/javascripts/requirements/components/requirement_form.vue
+++ b/ee/app/assets/javascripts/requirements/components/requirement_form.vue
@@ -245,7 +245,7 @@ export default {
         {{ __('New requirement') }}
       </h4>
       <div v-else class="gl-flex gl-items-center">
-        <strong class="gl-text-gray-500">{{ reference }}</strong>
+        <strong class="gl-text-subtle">{{ reference }}</strong>
         <requirement-status-badge
           v-if="testReport"
           :test-report="testReport"
diff --git a/ee/app/assets/javascripts/requirements/components/requirement_item.vue b/ee/app/assets/javascripts/requirements/components/requirement_item.vue
index 19693846ac11e1484db8c24092b13575447e5086..24d126014d45e99a494ad1d2def71eae09e482d2 100644
--- a/ee/app/assets/javascripts/requirements/components/requirement_item.vue
+++ b/ee/app/assets/javascripts/requirements/components/requirement_item.vue
@@ -177,7 +177,7 @@ export default {
         </div>
         <div class="gl-w-full gl-p-2">
           <h5 class="gl-m-0">{{ author.name }}</h5>
-          <div class="gl-mb-3 gl-text-gray-500">@{{ author.username }}</div>
+          <div class="gl-mb-3 gl-text-subtle">@{{ author.username }}</div>
         </div>
       </div>
     </gl-popover>
diff --git a/ee/app/assets/javascripts/roadmap/components/epic_item_timeline.vue b/ee/app/assets/javascripts/roadmap/components/epic_item_timeline.vue
index b51c0a9a1ed7c806817b6300cec8d1ff4f03bbe5..51a378ef2511c40130d09ca932759e6ddc59de2c 100644
--- a/ee/app/assets/javascripts/roadmap/components/epic_item_timeline.vue
+++ b/ee/app/assets/javascripts/roadmap/components/epic_item_timeline.vue
@@ -161,7 +161,7 @@ export default {
       </div>
     </a>
     <gl-popover :target="generateKey(epic)" :title="epic.title" placement="left">
-      <p class="gl-m-0 gl-text-gray-500">{{ timeframeString(epic) }}</p>
+      <p class="gl-m-0 gl-text-subtle">{{ timeframeString(epic) }}</p>
       <p class="gl-m-0">{{ popoverText }}</p>
     </gl-popover>
   </div>
diff --git a/ee/app/assets/javascripts/security_configuration/components/configuration_snippet_modal.vue b/ee/app/assets/javascripts/security_configuration/components/configuration_snippet_modal.vue
index 3336e1621e11b5e46d26350f23d362bac0c255c8..70c5c339fab2299fed26c31a2b128acc74bd983e 100644
--- a/ee/app/assets/javascripts/security_configuration/components/configuration_snippet_modal.vue
+++ b/ee/app/assets/javascripts/security_configuration/components/configuration_snippet_modal.vue
@@ -116,7 +116,7 @@ export default {
     @primary="copySnippet"
     @secondary="copySnippet(false)"
   >
-    <p class="gl-text-gray-500" data-testid="configuration-modal-help-text">
+    <p class="gl-text-subtle" data-testid="configuration-modal-help-text">
       <gl-sprintf :message="$options.i18n.helpText">
         <template #link="{ content }">
           <gl-link :href="ciYamlEditUrl" target="_blank">
diff --git a/ee/app/assets/javascripts/security_configuration/corpus_management/components/columns/name.vue b/ee/app/assets/javascripts/security_configuration/corpus_management/components/columns/name.vue
index fa9be1e83ce3efc038b71f2676cfd9f0f34c78f1..1dd9c94ec66524ee55f18f3a6acd10e52f148667 100644
--- a/ee/app/assets/javascripts/security_configuration/corpus_management/components/columns/name.vue
+++ b/ee/app/assets/javascripts/security_configuration/corpus_management/components/columns/name.vue
@@ -42,7 +42,7 @@ export default {
   <div>
     <div class="gl-text-gray-900" data-testid="corpus-name">
       {{ name }}
-      <span class="gl-text-gray-500" data-testid="file-size">({{ fileSize }})</span>
+      <span class="gl-text-subtle" data-testid="file-size">({{ fileSize }})</span>
     </div>
     <div class="gl-truncate">
       {{ $options.i18n.latestJob }}
diff --git a/ee/app/assets/javascripts/security_configuration/corpus_management/components/corpus_upload_form.vue b/ee/app/assets/javascripts/security_configuration/corpus_management/components/corpus_upload_form.vue
index e7ee6a50c76b5e409ee3174c941fae6f8e5fe85d..52c4d3be72be97a9d6dd0c4e431556713c47f33f 100644
--- a/ee/app/assets/javascripts/security_configuration/corpus_management/components/corpus_upload_form.vue
+++ b/ee/app/assets/javascripts/security_configuration/corpus_management/components/corpus_upload_form.vue
@@ -187,9 +187,7 @@ export default {
       />
     </gl-form-group>
 
-    <span v-if="isShowingUploadText" class="gl-text-gray-500">{{
-      $options.i18n.uploadMessage
-    }}</span>
+    <span v-if="isShowingUploadText" class="gl-text-subtle">{{ $options.i18n.uploadMessage }}</span>
 
     <gl-form-group>
       <gl-button
diff --git a/ee/app/assets/javascripts/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_sidebar.vue b/ee/app/assets/javascripts/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_sidebar.vue
index c63dd058c6d15edd2a87ddd6290d5e4d69cc5918..4f2e3754818302e96e30cf49fd25beff95e8f6e8 100644
--- a/ee/app/assets/javascripts/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_sidebar.vue
+++ b/ee/app/assets/javascripts/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_sidebar.vue
@@ -71,7 +71,7 @@ export default {
         @dismiss="$emit('dismiss-alert')"
       />
 
-      <p class="gl-mb-0 gl-border-0 gl-leading-20 gl-text-gray-500">
+      <p class="gl-mb-0 gl-border-0 gl-leading-20 gl-text-subtle">
         {{ $options.i18n.preScanVerificationSidebarInfo }}
       </p>
 
diff --git a/ee/app/assets/javascripts/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_status.vue b/ee/app/assets/javascripts/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_status.vue
index f807f714f6700cefad9974bbf755634329e39623..1905eb5f65d8aeb8419d9e92b1a64e84bffb8cc7 100644
--- a/ee/app/assets/javascripts/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_status.vue
+++ b/ee/app/assets/javascripts/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_status.vue
@@ -65,17 +65,17 @@ export default {
     <div class="gl-grow">
       <h3 class="gl-m-0 gl-mb-1 gl-text-lg">
         {{ $options.i18n.preScanVerificationHeader }}
-        <span class="gl-ml-1 gl-text-base gl-font-normal gl-text-gray-500">
+        <span class="gl-ml-1 gl-text-base gl-font-normal gl-text-subtle">
           {{ $options.i18n.preScanVerificationLabel }}
         </span>
       </h3>
       <div data-testid="status-message">
-        <span v-if="isDefaultStatus" class="gl-text-gray-500">{{
+        <span v-if="isDefaultStatus" class="gl-text-subtle">{{
           $options.i18n.preScanVerificationDefaultText
         }}</span>
         <pipeline-details
           v-else
-          class="gl-text-gray-500"
+          class="gl-text-subtle"
           :status="status"
           :pipeline-id="pipelineId"
           :pipeline-path="pipelinePath"
diff --git a/ee/app/assets/javascripts/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_step.vue b/ee/app/assets/javascripts/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_step.vue
index 0ef1a0a639fef645a6bf9edaf10edf7c84684b26..0b0a3eb85865350a0113e05390a7ebe2f9ee4430 100644
--- a/ee/app/assets/javascripts/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_step.vue
+++ b/ee/app/assets/javascripts/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_step.vue
@@ -46,7 +46,7 @@ export default {
       ].includes(this.status);
     },
     descriptionTextCssClass() {
-      return this.isFailedStatus ? 'gl-text-red-500' : 'gl-text-gray-500';
+      return this.isFailedStatus ? 'gl-text-red-500' : 'gl-text-subtle';
     },
   },
 };
@@ -65,7 +65,7 @@ export default {
     </div>
     <div class="gl-flex gl-items-start gl-gap-3 gl-pr-4">
       <div data-testid="pre-scan-step-content">
-        <p class="gl-m-0 gl-mb-2 gl-font-bold gl-text-gray-500">{{ step.header }}</p>
+        <p class="gl-m-0 gl-mb-2 gl-font-bold gl-text-subtle">{{ step.header }}</p>
         <p
           data-testid="pre-scan-step-text"
           class="gl-m-0 gl-leading-normal"
diff --git a/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_profile_selector/empty_state.vue b/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_profile_selector/empty_state.vue
index 3c7bab3ab84ac3e1d87b3117cc7d691e042d5992..c382612970a088eb5dcf40b7d6f6557cccbb831b 100644
--- a/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_profile_selector/empty_state.vue
+++ b/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_profile_selector/empty_state.vue
@@ -9,10 +9,10 @@ export default {
     <div
       class="gl-mb-5 gl-flex gl-flex-col gl-items-center gl-rounded-small gl-bg-gray-10 gl-p-6 gl-text-center"
     >
-      <h5 class="gl-h5 gl-mb-2 gl-mt-0 gl-text-gray-500">
+      <h5 class="gl-h5 gl-mb-2 gl-mt-0 gl-text-subtle">
         <slot name="header"></slot>
       </h5>
-      <span class="gl-text-gray-500">
+      <span class="gl-text-subtle">
         <slot name="content"></slot>
       </span>
     </div>
diff --git a/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_profiles_drawer/dast_profiles_drawer_empty_state.vue b/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_profiles_drawer/dast_profiles_drawer_empty_state.vue
index 4b724d802e013abe974aa42c725cc6624e3b5678..8b6f539922112f163f6ca33e278f330dc1cd0d06 100644
--- a/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_profiles_drawer/dast_profiles_drawer_empty_state.vue
+++ b/ee/app/assets/javascripts/security_configuration/dast_profiles/dast_profiles_drawer/dast_profiles_drawer_empty_state.vue
@@ -38,7 +38,7 @@ export default {
     <h5 class="gl-mb-2 gl-mt-0 gl-text-secondary" data-testid="empty-state-header">
       {{ emptyStateHeader }}
     </h5>
-    <span class="gl-text-center gl-text-gray-500">
+    <span class="gl-text-center gl-text-subtle">
       {{ $options.i18n.emptyStateContent }}
     </span>
     <gl-button
diff --git a/ee/app/assets/javascripts/security_dashboard/components/instance/project_list.vue b/ee/app/assets/javascripts/security_dashboard/components/instance/project_list.vue
index 78679b32a0dd0a1b3981f4d9073ed35307e73785..017b681a17e9b7d737342e08e0b1c29cb56646ac 100644
--- a/ee/app/assets/javascripts/security_dashboard/components/instance/project_list.vue
+++ b/ee/app/assets/javascripts/security_dashboard/components/instance/project_list.vue
@@ -64,7 +64,7 @@ export default {
 <template>
   <section>
     <h5
-      class="gl-mb-5 gl-border-b-1 gl-border-b-gray-100 gl-pb-3 gl-font-bold gl-text-gray-500 gl-border-b-solid"
+      class="gl-mb-5 gl-border-b-1 gl-border-b-gray-100 gl-pb-3 gl-font-bold gl-text-subtle gl-border-b-solid"
     >
       {{ $options.i18n.projectsAdded }}
       <gl-badge class="gl-font-bold">{{ projects.length }}</gl-badge>
@@ -93,7 +93,7 @@ export default {
         />
       </li>
     </ul>
-    <p v-else class="js-projects-list-empty-message gl-text-gray-500" data-testid="empty-message">
+    <p v-else class="js-projects-list-empty-message gl-text-subtle" data-testid="empty-message">
       {{ $options.i18n.emptyMessage }}
     </p>
   </section>
diff --git a/ee/app/assets/javascripts/security_dashboard/components/shared/project_security_status_chart.vue b/ee/app/assets/javascripts/security_dashboard/components/shared/project_security_status_chart.vue
index 69506b831af4e2d0efd3f006a386b4152b632dc5..fc0dbca77933d2208105f019a5747c00b221f2be 100644
--- a/ee/app/assets/javascripts/security_dashboard/components/shared/project_security_status_chart.vue
+++ b/ee/app/assets/javascripts/security_dashboard/components/shared/project_security_status_chart.vue
@@ -208,13 +208,13 @@ export default {
               >
                 {{ severityGroup.type }}
               </span>
-              <span :class="{ 'gl-font-bold': isExpanded, 'gl-text-gray-500': isDisabled }">
+              <span :class="{ 'gl-font-bold': isExpanded, 'gl-text-subtle': isDisabled }">
                 {{ getProjectCountString(severityGroup) }}
               </span>
             </h5>
           </template>
           <template #sub-title>
-            <p class="gl-m-0 gl-ml-7 gl-pb-2 gl-text-gray-500">{{ severityGroup.warning }}</p>
+            <p class="gl-m-0 gl-ml-7 gl-pb-2 gl-text-subtle">{{ severityGroup.warning }}</p>
           </template>
           <div class="gl-ml-7 gl-pb-3">
             <ul class="list-unstyled gl-py-2">
diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_drawer/drawer_layout.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_drawer/drawer_layout.vue
index 45e7ee9fefe4cabf41513ef9c52b7d7e45db5ad9..e4320329393db1e3e41d6b976a2765e044ea9dd9 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/policy_drawer/drawer_layout.vue
+++ b/ee/app/assets/javascripts/security_orchestration/components/policy_drawer/drawer_layout.vue
@@ -104,7 +104,7 @@ export default {
       <div v-if="description" data-testid="custom-description-text">
         {{ description }}
       </div>
-      <div v-else class="gl-text-gray-500" data-testid="default-description-text">
+      <div v-else class="gl-text-subtle" data-testid="default-description-text">
         {{ $options.i18n.defaultDescription }}
       </div>
     </info-row>
@@ -136,7 +136,7 @@ export default {
       <div v-if="policy.enabled" class="gl-text-green-500" data-testid="enabled-status-text">
         <gl-icon name="check-circle-filled" class="gl-mr-3" />{{ statusLabel }}
       </div>
-      <div v-else class="gl-text-gray-500" data-testid="not-enabled-status-text">
+      <div v-else class="gl-text-subtle" data-testid="not-enabled-status-text">
         {{ statusLabel }}
       </div>
     </info-row>
diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_execution/action/scan_action.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_execution/action/scan_action.vue
index 31ea8ee7290641902a4cd7b8d1659d0d18c80999..47731bde31302e26aa58ae99bfcc7baf1cd23330 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_execution/action/scan_action.vue
+++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_execution/action/scan_action.vue
@@ -189,7 +189,7 @@ export default {
   <div>
     <div
       v-if="!isFirstAction"
-      class="gl-mb-4 gl-ml-5 gl-text-gray-500"
+      class="gl-mb-4 gl-ml-5 gl-text-subtle"
       data-testid="action-and-label"
     >
       {{ $options.ACTION_AND_LABEL }}
diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_execution/rule/rule_section.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_execution/rule/rule_section.vue
index 8e8404afbc96db6ddb085058505419cafce4a0a4..f5d1e1ddbee9cbd0741d7c145e2b07d21b574593 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_execution/rule/rule_section.vue
+++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_execution/rule/rule_section.vue
@@ -55,7 +55,7 @@ export default {
 
 <template>
   <div>
-    <div v-if="!isFirstRule" class="gl-mb-4 gl-ml-5 gl-text-gray-500" data-testid="rule-separator">
+    <div v-if="!isFirstRule" class="gl-mb-4 gl-ml-5 gl-text-subtle" data-testid="rule-separator">
       {{ $options.RULE_OR_LABEL }}
     </div>
     <base-rule-component
diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_filter_selector.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_filter_selector.vue
index 8fef28285098c8a796e3a817fa33115c65c6da29..7a8b22998f4d889ae40a2559e258ca67817fb6ba 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_filter_selector.vue
+++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_filter_selector.vue
@@ -96,7 +96,7 @@ export default {
             <span
               :id="item.value"
               class="gl-pr-3"
-              :class="{ 'gl-text-gray-500': filterDisabled(item.value) }"
+              :class="{ 'gl-text-subtle': filterDisabled(item.value) }"
             >
               {{ item.text }}
             </span>
diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/action/action_section.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/action/action_section.vue
index bc92d3317067636001a93b3e9e707a4699852a19..2e902cf00e2ddf5ae7d756e3b7466135724ec199 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/action/action_section.vue
+++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/action/action_section.vue
@@ -46,7 +46,7 @@ export default {
   <div>
     <div
       v-if="!isFirstAction"
-      class="gl-mb-4 gl-ml-5 gl-text-gray-500"
+      class="gl-mb-4 gl-ml-5 gl-text-subtle"
       data-testid="action-and-label"
     >
       {{ $options.ACTION_AND_LABEL }}
diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/action/approver_selection_wrapper.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/action/approver_selection_wrapper.vue
index 89ac73c8207b75173a4d5447e8e42128489c3e8b..45df82bc3260d73882e2941d3aacd7f4edf6dee4 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/action/approver_selection_wrapper.vue
+++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/action/approver_selection_wrapper.vue
@@ -208,7 +208,7 @@ export default {
                 :id="item.value"
                 data-testid="list-item-text"
                 class="gl-pr-3"
-                :class="{ 'gl-text-gray-500': item.disabled }"
+                :class="{ 'gl-text-subtle': item.disabled }"
               >
                 {{ item.text }}
               </span>
diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/rule/rule_section.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/rule/rule_section.vue
index c098747eeeade5facca8b20e23aad7e100620cfe..dd9a53aec9991bca95e8efd8afa64530ce2a7ba3 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/rule/rule_section.vue
+++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/scan_result/rule/rule_section.vue
@@ -105,7 +105,7 @@ export default {
       </gl-sprintf>
     </gl-alert>
 
-    <div v-if="!isFirstRule" class="gl-mb-4 gl-ml-5 gl-text-gray-500" data-testid="rule-separator">
+    <div v-if="!isFirstRule" class="gl-mb-4 gl-ml-5 gl-text-subtle" data-testid="rule-separator">
       {{ $options.RULE_OR_LABEL }}
     </div>
 
diff --git a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/vulnerability_management/rule/rule_section.vue b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/vulnerability_management/rule/rule_section.vue
index 9a06b2826775daa5b07001160c6469db0d2b7a66..69b060882faf30976bfd8dec2a4e46957f698680 100644
--- a/ee/app/assets/javascripts/security_orchestration/components/policy_editor/vulnerability_management/rule/rule_section.vue
+++ b/ee/app/assets/javascripts/security_orchestration/components/policy_editor/vulnerability_management/rule/rule_section.vue
@@ -57,7 +57,7 @@ export default {
 
 <template>
   <div>
-    <div v-if="!isFirstRule" class="gl-mb-4 gl-ml-5 gl-text-gray-500" data-testid="rule-separator">
+    <div v-if="!isFirstRule" class="gl-mb-4 gl-ml-5 gl-text-subtle" data-testid="rule-separator">
       {{ $options.RULE_OR_LABEL }}
     </div>
     <div class="security-policies-bg-subtle gl-mb-4 gl-rounded-base">
diff --git a/ee/app/assets/javascripts/subscriptions/buy_addons_shared/components/order_summary/summary_details.vue b/ee/app/assets/javascripts/subscriptions/buy_addons_shared/components/order_summary/summary_details.vue
index 75fa9cca4c0e815a596d4807b209b41a7e8c88d5..1991d7899b3e3aed209d0c003bf9d4b7eb61132f 100644
--- a/ee/app/assets/javascripts/subscriptions/buy_addons_shared/components/order_summary/summary_details.vue
+++ b/ee/app/assets/javascripts/subscriptions/buy_addons_shared/components/order_summary/summary_details.vue
@@ -118,10 +118,10 @@ export default {
       </div>
     </div>
     <div class="gl-mb-5 gl-border-b-1 gl-border-b-gray-100 gl-pb-5 gl-border-b-solid">
-      <div class="gl-text-gray-500" data-testid="price-per-unit">
+      <div class="gl-text-subtle" data-testid="price-per-unit">
         <slot name="price-per-unit" :price="formattedPrice"></slot>
       </div>
-      <div v-if="hasExpiration" class="gl-text-gray-500" data-testid="subscription-period">
+      <div v-if="hasExpiration" class="gl-text-subtle" data-testid="subscription-period">
         {{
           sprintf($options.i18n.dates, {
             startDate: formatDate(startDate),
@@ -139,18 +139,18 @@ export default {
       </div>
     </div>
     <div class="gl-mb-5 gl-border-b-1 gl-border-b-gray-100 gl-pb-5 gl-border-b-solid">
-      <div class="gl-mb-2 gl-flex gl-justify-between gl-text-gray-500">
+      <div class="gl-mb-2 gl-flex gl-justify-between gl-text-subtle">
         <div>{{ $options.i18n.subtotal }}</div>
         <div data-testid="total-ex-vat">
           {{ renderedAmount }}
         </div>
       </div>
-      <div class="gl-flex gl-justify-between gl-text-gray-500">
+      <div class="gl-flex gl-justify-between gl-text-subtle">
         <div data-testid="vat-info-line">
           <gl-sprintf :message="taxLine">
             <template #link="{ content }">
               <promo-page-link
-                class="gl-text-gray-500 gl-underline"
+                class="gl-text-subtle gl-underline"
                 :path="$options.vatHelpPath"
                 target="_blank"
                 data-testid="vat-help-link"
diff --git a/ee/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals_users_list.vue b/ee/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals_users_list.vue
index f78193b4dd3e546ae20110e1add46e11b97719cf..662f2b84887ddce476fab5990092a48cfd73b11f 100644
--- a/ee/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals_users_list.vue
+++ b/ee/app/assets/javascripts/vue_merge_request_widget/components/approvals/approvals_users_list.vue
@@ -20,7 +20,7 @@ export default {
 
 <template>
   <div>
-    <span class="gl-text-sm gl-text-gray-500">{{ label }}</span>
+    <span class="gl-text-sm gl-text-subtle">{{ label }}</span>
     <user-avatar-list class="gl-ml-2" :items="users" :img-size="16" />
   </div>
 </template>
diff --git a/ee/app/assets/javascripts/vue_shared/components/groups_list/group_list_item_delayed_deletion_modal_footer.vue b/ee/app/assets/javascripts/vue_shared/components/groups_list/group_list_item_delayed_deletion_modal_footer.vue
index 80543972daa95804208aba7c499c1dc8549c4e54..d0d779abb7f0bfa8d9c59766f8221bcd307e7855 100644
--- a/ee/app/assets/javascripts/vue_shared/components/groups_list/group_list_item_delayed_deletion_modal_footer.vue
+++ b/ee/app/assets/javascripts/vue_shared/components/groups_list/group_list_item_delayed_deletion_modal_footer.vue
@@ -35,7 +35,7 @@ export default {
 <template>
   <p
     v-if="canBeMarkedForDeletion"
-    class="gl-mb-0 gl-mt-3 gl-text-gray-500"
+    class="gl-mb-0 gl-mt-3 gl-text-subtle"
     data-testid="delayed-delete-modal-footer"
   >
     <gl-sprintf :message="$options.i18n.groupRestoreMessage">
diff --git a/ee/app/assets/javascripts/vue_shared/components/projects_list/project_list_item_delayed_deletion_modal_footer.vue b/ee/app/assets/javascripts/vue_shared/components/projects_list/project_list_item_delayed_deletion_modal_footer.vue
index 5af6dcbbe26bd3775d76dc24926ca32cb8e38b22..03d5f11fb0da854175ec357cb1219c7d4f89b511 100644
--- a/ee/app/assets/javascripts/vue_shared/components/projects_list/project_list_item_delayed_deletion_modal_footer.vue
+++ b/ee/app/assets/javascripts/vue_shared/components/projects_list/project_list_item_delayed_deletion_modal_footer.vue
@@ -34,7 +34,7 @@ export default {
 <template>
   <p
     v-if="showRestoreMessage"
-    class="gl-mb-0 gl-mt-3 gl-text-gray-500"
+    class="gl-mb-0 gl-mt-3 gl-text-subtle"
     data-testid="delayed-delete-modal-footer"
   >
     <gl-sprintf :message="$options.i18n.projectRestoreMessage">
diff --git a/ee/app/assets/javascripts/vue_shared/security_reports/components/solution_card_graphql.vue b/ee/app/assets/javascripts/vue_shared/security_reports/components/solution_card_graphql.vue
index f5f8aa0311af40c4035750e494ed72928d0e709a..1cc367d635ba6dd470055264f9972fe777982176 100644
--- a/ee/app/assets/javascripts/vue_shared/security_reports/components/solution_card_graphql.vue
+++ b/ee/app/assets/javascripts/vue_shared/security_reports/components/solution_card_graphql.vue
@@ -66,7 +66,7 @@ export default {
       </div>
     </template>
     <template v-if="showCreateMergeRequestMessage" #footer>
-      <em class="gl-text-gray-500" data-testid="merge-request-solution">
+      <em class="gl-text-subtle" data-testid="merge-request-solution">
         {{
           s__(
             'ciReport|Create a merge request to implement this solution, or download and apply the patch manually.',
diff --git a/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_details.vue b/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_details.vue
index 2a55412986918500395d251974ff118cbc06ed60..4f301beb2103d7a427474758d8abf4ce3748403c 100644
--- a/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_details.vue
+++ b/ee/app/assets/javascripts/vulnerabilities/components/new_vulnerability/section_details.vue
@@ -209,7 +209,7 @@ export default {
           <gl-form-radio v-model="statusId" :value="status.state">
             {{ status.buttonText }}
             <template #help>
-              <span class="gl-text-gray-500">{{ status.description }}</span>
+              <span class="gl-text-subtle">{{ status.description }}</span>
             </template>
           </gl-form-radio>
         </label>
diff --git a/ee/app/assets/javascripts/vulnerabilities/components/related_jira_issues.vue b/ee/app/assets/javascripts/vulnerabilities/components/related_jira_issues.vue
index 5b62433b66ee79da044c8426dc64637361ccf895..c96ee9baffbea5034d822ce4c8ec2c4ae5068404 100644
--- a/ee/app/assets/javascripts/vulnerabilities/components/related_jira_issues.vue
+++ b/ee/app/assets/javascripts/vulnerabilities/components/related_jira_issues.vue
@@ -136,7 +136,7 @@ export default {
           :aria-label="$options.i18n.helpPageLinkLabel"
           :href="relatedJiraIssuesHelpPath"
           target="_blank"
-          class="gl-ml-2 gl-flex gl-items-center gl-text-gray-500"
+          class="gl-ml-2 gl-flex gl-items-center gl-text-subtle"
         >
           <gl-icon name="question-o" :size="12" />
         </gl-link>
@@ -193,7 +193,7 @@ export default {
               >
                 {{ issue.title }}
               </gl-link>
-              <span class="gl-ml-3 gl-text-gray-500">&num;{{ issue.references.relative }}</span>
+              <span class="gl-ml-3 gl-text-subtle">&num;{{ issue.references.relative }}</span>
             </li>
           </ul>
         </gl-card>
diff --git a/ee/app/assets/javascripts/work_items/components/work_item_iteration.vue b/ee/app/assets/javascripts/work_items/components/work_item_iteration.vue
index 80e22e5fdaf9b5f9d756459ef0c4ab262ede8879..c71276d115a09e176a9649522a555e88ebcb6e70 100644
--- a/ee/app/assets/javascripts/work_items/components/work_item_iteration.vue
+++ b/ee/app/assets/javascripts/work_items/components/work_item_iteration.vue
@@ -239,7 +239,7 @@ export default {
       <div v-if="item.title">{{ item.title }}</div>
     </template>
     <template #readonly>
-      <div class="gl-mr-2 gl-text-gray-500">
+      <div class="gl-mr-2 gl-text-subtle">
         {{ selectedIterationCadenceName }}
       </div>
       <gl-link class="!gl-text-gray-900" :href="localIteration.webUrl">
diff --git a/ee/app/assets/javascripts/work_items/components/work_item_links/work_item_rolled_up_health_status.vue b/ee/app/assets/javascripts/work_items/components/work_item_links/work_item_rolled_up_health_status.vue
index 54a34381fc7f2c32f98048e127b58103fed5f5c7..87d7891c3466dcbf0a8911e516e02086a3eb5bb1 100644
--- a/ee/app/assets/javascripts/work_items/components/work_item_links/work_item_rolled_up_health_status.vue
+++ b/ee/app/assets/javascripts/work_items/components/work_item_links/work_item_rolled_up_health_status.vue
@@ -87,7 +87,7 @@ export default {
     <span
       ref="healthStatusRollUp"
       tabindex="0"
-      class="gl-flex gl-gap-3 gl-text-sm gl-font-normal gl-text-gray-500"
+      class="gl-flex gl-gap-3 gl-text-sm gl-font-normal gl-text-subtle"
     >
       <span class="gl-inline-flex gl-gap-1" data-testid="on-track-count">
         <gl-icon
diff --git a/ee/app/assets/javascripts/workspaces/common/components/workspaces_list/workspaces_table.vue b/ee/app/assets/javascripts/workspaces/common/components/workspaces_list/workspaces_table.vue
index f373be423abd770b0e43c876bffcbc2a280e256f..397e00851f00d4d4a749ef4d477f9821b9f783b9 100644
--- a/ee/app/assets/javascripts/workspaces/common/components/workspaces_list/workspaces_table.vue
+++ b/ee/app/assets/javascripts/workspaces/common/components/workspaces_list/workspaces_table.vue
@@ -77,7 +77,7 @@ export default {
                   <span>{{ item.name }} </span>
                 </span>
               </div>
-              <div class="gl-pb-1 gl-text-sm gl-text-gray-500">
+              <div class="gl-pb-1 gl-text-sm gl-text-subtle">
                 <span data-testid="workspaces-project-name">
                   {{ item.projectName }}
                 </span>
diff --git a/ee/app/views/admin/application_settings/_elasticsearch_form.html.haml b/ee/app/views/admin/application_settings/_elasticsearch_form.html.haml
index d510043e2c2878a3b325d44af1d99ee3fdeaf94d..da0c29b7d791aab3236384bc8552a73ddfe083d3 100644
--- a/ee/app/views/admin/application_settings/_elasticsearch_form.html.haml
+++ b/ee/app/views/admin/application_settings/_elasticsearch_form.html.haml
@@ -324,7 +324,7 @@
                           - if project.description.present?
                             .description
                               = markdown_field(project, :description)
-                        .stats.gl-text-gray-500.gl-shrink-0.gl-hidden.sm:gl-flex
+                        .stats.gl-text-subtle.gl-shrink-0.gl-hidden.sm:gl-flex
                           = gl_badge_tag _('Created %{date} ago') % { date: time_ago_in_words(project.created_at) }
                   - if @projects_not_indexed_count > projects_not_indexed_max_shown
                     %li.project-row.gl-items-center{ class: '!gl-flex', data: { testid: 'projects_not_indexed_max_shown'} }
diff --git a/ee/app/views/admin/dashboard/_stats_users_table.html.haml b/ee/app/views/admin/dashboard/_stats_users_table.html.haml
index 5fd5e05da1ed7d4b1340664ce9f0be90e46c3a65..ed398b2e67460f4733938221915263a2ac423b4c 100644
--- a/ee/app/views/admin/dashboard/_stats_users_table.html.haml
+++ b/ee/app/views/admin/dashboard/_stats_users_table.html.haml
@@ -3,7 +3,7 @@
 %p.gl-font-bold.gl-mt-7
   = s_('AdminArea|Breakdown of Billable users')
 
-%table.gl-table.gl-text-gray-500.gl-w-full
+%table.gl-table.gl-text-subtle.gl-w-full
   = render_if_exists 'admin/dashboard/without_group_or_project_row', users_statistics: @users_statistics unless exclude_guests_from_active_count
   = render_if_exists 'admin/dashboard/minimal_access_stats_row', users_statistics: @users_statistics
   = render_if_exists 'admin/dashboard/elevated_role_stats_row', users_statistics: @users_statistics
@@ -39,7 +39,7 @@
 
 %p.gl-font-bold.gl-mt-8
   = s_('AdminArea|Breakdown of Non-Billable users')
-%table.gl-table.gl-text-gray-500.gl-w-full
+%table.gl-table.gl-text-subtle.gl-w-full
   = render_if_exists 'admin/dashboard/without_group_or_project_row', users_statistics: @users_statistics if exclude_guests_from_active_count
   %tr
     %td{ class: '!gl-p-5' }
diff --git a/ee/app/views/devise/registrations/_opt_in_to_email.html.haml b/ee/app/views/devise/registrations/_opt_in_to_email.html.haml
index 54d195726449d4bc76ca00c88e851a640a34d8f6..cec682a80005f40be92360b3a3a1c9303e2d468b 100644
--- a/ee/app/views/devise/registrations/_opt_in_to_email.html.haml
+++ b/ee/app/views/devise/registrations/_opt_in_to_email.html.haml
@@ -2,5 +2,5 @@
 
 = f.gitlab_ui_checkbox_component :onboarding_status_email_opt_in,
   _('I agree that GitLab can contact me by email or telephone about its product, services, or events.'),
-  content_wrapper_options: { class: 'gl-text-gray-500' },
+  content_wrapper_options: { class: 'gl-text-subtle' },
   checkbox_options: { checked: onboarding_status_presenter.email_opt_in? }
diff --git a/ee/app/views/shared/issuable/form/_merge_request_blocks.html.haml b/ee/app/views/shared/issuable/form/_merge_request_blocks.html.haml
index 2bea72894f8849171e440f1008b286e82fe61ce8..1985c52039d21823b398648144e63815bc8e7682 100644
--- a/ee/app/views/shared/issuable/form/_merge_request_blocks.html.haml
+++ b/ee/app/views/shared/issuable/form/_merge_request_blocks.html.haml
@@ -20,5 +20,5 @@
                      data: { hidden_blocking_mrs_count: merge_request.hidden_blocking_merge_requests_count(current_user),
                              visible_blocking_mr_refs: merge_request.visible_blocking_merge_request_refs(current_user) }
   .col-12
-    .gl-text-gray-500
+    .gl-text-subtle
       %p.gl-mb-0= _("References should be in the form of path/to/project!merge_request_id")
diff --git a/ee/spec/frontend/ci/runner/components/runner_dashboard_stat_status_spec.js b/ee/spec/frontend/ci/runner/components/runner_dashboard_stat_status_spec.js
index 480c9579fe2edcc3de4fa0f573f0e80f56c75a7f..d5a9d87f8cd0795f54e54189f2f20206ea244aaf 100644
--- a/ee/spec/frontend/ci/runner/components/runner_dashboard_stat_status_spec.js
+++ b/ee/spec/frontend/ci/runner/components/runner_dashboard_stat_status_spec.js
@@ -30,9 +30,9 @@ describe('RunnerDashboardStatStatus', () => {
   describe.each`
     scope            | status            | title        | icon                | iconClass
     ${INSTANCE_TYPE} | ${STATUS_ONLINE}  | ${'Online'}  | ${'status-active'}  | ${'gl-text-green-500'}
-    ${INSTANCE_TYPE} | ${STATUS_OFFLINE} | ${'Offline'} | ${'status-waiting'} | ${'gl-text-gray-500'}
+    ${INSTANCE_TYPE} | ${STATUS_OFFLINE} | ${'Offline'} | ${'status-waiting'} | ${'gl-text-subtle'}
     ${GROUP_TYPE}    | ${STATUS_ONLINE}  | ${'Online'}  | ${'status-active'}  | ${'gl-text-green-500'}
-    ${GROUP_TYPE}    | ${STATUS_OFFLINE} | ${'Offline'} | ${'status-waiting'} | ${'gl-text-gray-500'}
+    ${GROUP_TYPE}    | ${STATUS_OFFLINE} | ${'Offline'} | ${'status-waiting'} | ${'gl-text-subtle'}
   `(
     'for runner of scope $scope and runner status $status',
     ({ scope, status, title, icon, iconClass }) => {
diff --git a/ee/spec/frontend/environments_dashboard/components/__snapshots__/project_header_spec.js.snap b/ee/spec/frontend/environments_dashboard/components/__snapshots__/project_header_spec.js.snap
index cd8b5ddb916b891fc6f9acda220eda8819e5e232..944a14a56f0a23f73211e449bc37c3900615cd95 100644
--- a/ee/spec/frontend/environments_dashboard/components/__snapshots__/project_header_spec.js.snap
+++ b/ee/spec/frontend/environments_dashboard/components/__snapshots__/project_header_spec.js.snap
@@ -2,7 +2,7 @@
 
 exports[`Project Header matches the snapshot 1`] = `
 <div
-  class="gl-border-1 gl-border-b-solid gl-border-gray-100 gl-flex gl-items-center gl-justify-between gl-mb-5 gl-pb-3 gl-text-gray-500"
+  class="gl-border-1 gl-border-b-solid gl-border-gray-100 gl-flex gl-items-center gl-justify-between gl-mb-5 gl-pb-3 gl-text-subtle"
 >
   <div
     class="gl-flex gl-items-center"
@@ -15,7 +15,7 @@ exports[`Project Header matches the snapshot 1`] = `
       size="24"
     />
     <gl-link-stub
-      class="gl-mr-3 gl-text-gray-500"
+      class="gl-mr-3 gl-text-subtle"
       data-testid="namespace-link"
       href="/hello"
     >
@@ -34,7 +34,7 @@ exports[`Project Header matches the snapshot 1`] = `
       size="24"
     />
     <gl-link-stub
-      class="gl-mr-3 gl-text-gray-500"
+      class="gl-mr-3 gl-text-subtle"
       data-testid="project-link"
     >
       world
@@ -46,7 +46,7 @@ exports[`Project Header matches the snapshot 1`] = `
     <gl-disclosure-dropdown-stub
       autoclose="true"
       category="primary"
-      class="gl-text-gray-500"
+      class="gl-text-subtle"
       icon="ellipsis_v"
       items=""
       nocaret="true"
diff --git a/ee/spec/frontend/escalation_policies/__snapshots__/escalation_policy_spec.js.snap b/ee/spec/frontend/escalation_policies/__snapshots__/escalation_policy_spec.js.snap
index 5e863ee965e028b92c2075dd719aa253669148e1..1bae158b99252d247d7e173b696f8ee427f18a98 100644
--- a/ee/spec/frontend/escalation_policies/__snapshots__/escalation_policy_spec.js.snap
+++ b/ee/spec/frontend/escalation_policies/__snapshots__/escalation_policy_spec.js.snap
@@ -12,7 +12,7 @@ exports[`EscalationPolicy renders a policy with rules 1`] = `
       visible="true"
     >
       <p
-        class="gl-mb-5 gl-text-gray-500"
+        class="gl-mb-5 gl-text-subtle"
       >
         Description 1 lives here
       </p>
diff --git a/ee/spec/frontend/external_issues_show/components/__snapshots__/note_spec.js.snap b/ee/spec/frontend/external_issues_show/components/__snapshots__/note_spec.js.snap
index f66daefe371b3aa9a386cc9c9ae6fcbbadf57547..131f6a856b04afc3bc78629743e0e2b2cb1cf4d6 100644
--- a/ee/spec/frontend/external_issues_show/components/__snapshots__/note_spec.js.snap
+++ b/ee/spec/frontend/external_issues_show/components/__snapshots__/note_spec.js.snap
@@ -35,12 +35,12 @@ exports[`JiraIssuesNote template renders note 1`] = `
           Justin Ho
         </gl-link-stub>
         <span
-          class="gl-mr-2 gl-text-gray-500"
+          class="gl-mr-2 gl-text-subtle"
         >
           ·
         </span>
         <gl-link-stub
-          class="gl-text-gray-500"
+          class="gl-text-subtle"
           data-testid="time-ago-link"
           href="#"
         >
diff --git a/ee/spec/frontend/pages/projects/learn_gitlab/components/__snapshots__/learn_gitlab_spec.js.snap b/ee/spec/frontend/pages/projects/learn_gitlab/components/__snapshots__/learn_gitlab_spec.js.snap
index 306ef0497ebbe45fe8b5d090e34f8910a6e06ce5..06b7564bfb236f791e4567b98a050230d550519f 100644
--- a/ee/spec/frontend/pages/projects/learn_gitlab/components/__snapshots__/learn_gitlab_spec.js.snap
+++ b/ee/spec/frontend/pages/projects/learn_gitlab/components/__snapshots__/learn_gitlab_spec.js.snap
@@ -258,7 +258,7 @@ exports[`Learn GitLab Initial rendering concerns renders correctly 1`] = `
                   Add code owners
                 </a>
                 <span
-                  class="gl-italic gl-text-gray-500"
+                  class="gl-italic gl-text-subtle"
                   data-testid="trial-only"
                 >
                   - Included in trial
@@ -285,7 +285,7 @@ exports[`Learn GitLab Initial rendering concerns renders correctly 1`] = `
                   Enable require merge approvals
                 </a>
                 <span
-                  class="gl-italic gl-text-gray-500"
+                  class="gl-italic gl-text-subtle"
                   data-testid="trial-only"
                 >
                   - Included in trial
@@ -341,7 +341,7 @@ exports[`Learn GitLab Initial rendering concerns renders correctly 1`] = `
                   Scan dependencies for licenses
                 </a>
                 <span
-                  class="gl-italic gl-text-gray-500"
+                  class="gl-italic gl-text-subtle"
                   data-testid="trial-only"
                 >
                   - Included in trial
@@ -368,7 +368,7 @@ exports[`Learn GitLab Initial rendering concerns renders correctly 1`] = `
                   Scan dependencies for vulnerabilities
                 </a>
                 <span
-                  class="gl-italic gl-text-gray-500"
+                  class="gl-italic gl-text-subtle"
                   data-testid="trial-only"
                 >
                   - Included in trial
@@ -395,7 +395,7 @@ exports[`Learn GitLab Initial rendering concerns renders correctly 1`] = `
                   Analyze your application for vulnerabilities with DAST
                 </a>
                 <span
-                  class="gl-italic gl-text-gray-500"
+                  class="gl-italic gl-text-subtle"
                   data-testid="trial-only"
                 >
                   - Included in trial
diff --git a/ee/spec/frontend/security_configuration/corpus_management/components/columns/__snapshots__/name_spec.js.snap b/ee/spec/frontend/security_configuration/corpus_management/components/columns/__snapshots__/name_spec.js.snap
index 653cdc06841bcb3851a4a94695606a0677d27f17..d73b93aa765e8e3532c0a841cd31a4927f0781b9 100644
--- a/ee/spec/frontend/security_configuration/corpus_management/components/columns/__snapshots__/name_spec.js.snap
+++ b/ee/spec/frontend/security_configuration/corpus_management/components/columns/__snapshots__/name_spec.js.snap
@@ -7,7 +7,7 @@ exports[`Name component renders name with correct file size 1`] = `
 >
   Corpus-sample-1-13830-23932
   <span
-    class="gl-text-gray-500"
+    class="gl-text-subtle"
     data-testid="file-size"
   >
     (400 MB)
@@ -22,7 +22,7 @@ exports[`Name component renders the latest job 1`] = `
 >
   Corpus-sample-1-13830-23932
   <span
-    class="gl-text-gray-500"
+    class="gl-text-subtle"
     data-testid="file-size"
   >
     (400 MB)
@@ -37,7 +37,7 @@ exports[`Name component without job path renders a - string instead of a link 1`
 >
   Corpus-sample-3-1431-4425
   <span
-    class="gl-text-gray-500"
+    class="gl-text-subtle"
     data-testid="file-size"
   >
     (321 MB)
diff --git a/ee/spec/frontend/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_step_spec.js b/ee/spec/frontend/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_step_spec.js
index 18b926c86280767800a837741060c9e762dac96e..dc7ae4e3e21271ea9ba99eee0a0066213f855e06 100644
--- a/ee/spec/frontend/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_step_spec.js
+++ b/ee/spec/frontend/security_configuration/dast_pre_scan_verification/components/pre_scan_verification_step_spec.js
@@ -69,6 +69,6 @@ describe('PreScanVerificationStep', () => {
     createComponent({ status });
 
     expect(findPreScanVerificationStepText().classes('gl-text-red-500')).toEqual(expectedResult);
-    expect(findPreScanVerificationStepText().classes('gl-text-gray-500')).toEqual(!expectedResult);
+    expect(findPreScanVerificationStepText().classes('gl-text-subtle')).toEqual(!expectedResult);
   });
 });
diff --git a/ee/spec/frontend/security_configuration/dast_profiles/dast_profile_selector/__snapshots__/empty_state_spec.js.snap b/ee/spec/frontend/security_configuration/dast_profiles/dast_profile_selector/__snapshots__/empty_state_spec.js.snap
index 5ae8a3aac53ff6b1f70c911d0d55297fe09720e4..8faaad6566ade14e1e4fa3c83311a59d59a0662c 100644
--- a/ee/spec/frontend/security_configuration/dast_profiles/dast_profile_selector/__snapshots__/empty_state_spec.js.snap
+++ b/ee/spec/frontend/security_configuration/dast_profiles/dast_profile_selector/__snapshots__/empty_state_spec.js.snap
@@ -6,12 +6,12 @@ exports[`DastProfileSelectorEmptyState renders properly 1`] = `
     class="gl-bg-gray-10 gl-flex gl-flex-col gl-items-center gl-mb-5 gl-p-6 gl-rounded-small gl-text-center"
   >
     <h5
-      class="gl-h5 gl-mb-2 gl-mt-0 gl-text-gray-500"
+      class="gl-h5 gl-mb-2 gl-mt-0 gl-text-subtle"
     >
       heading
     </h5>
     <span
-      class="gl-text-gray-500"
+      class="gl-text-subtle"
     >
       content
     </span>
diff --git a/ee/spec/frontend/security_orchestration/components/policy_drawer/__snapshots__/drawer_layout_spec.js.snap b/ee/spec/frontend/security_orchestration/components/policy_drawer/__snapshots__/drawer_layout_spec.js.snap
index c4b951ab8c9084b6fedb77308a5fd55ca57f2dba..8c147b45944e76ce102431a5e35e8beebbe80ba2 100644
--- a/ee/spec/frontend/security_orchestration/components/policy_drawer/__snapshots__/drawer_layout_spec.js.snap
+++ b/ee/spec/frontend/security_orchestration/components/policy_drawer/__snapshots__/drawer_layout_spec.js.snap
@@ -72,7 +72,7 @@ exports[`DrawerLayout component not enabled policy matches the snapshots 1`] = `
     label="Description"
   >
     <div
-      class="gl-text-gray-500"
+      class="gl-text-subtle"
       data-testid="default-description-text"
     >
       No description
@@ -96,7 +96,7 @@ exports[`DrawerLayout component not enabled policy matches the snapshots 1`] = `
     label="Status"
   >
     <div
-      class="gl-text-gray-500"
+      class="gl-text-subtle"
       data-testid="not-enabled-status-text"
     >
       Not enabled
diff --git a/ee/spec/frontend/security_orchestration/components/policy_editor/scan_result/action/approver_selection_wrapper_spec.js b/ee/spec/frontend/security_orchestration/components/policy_editor/scan_result/action/approver_selection_wrapper_spec.js
index 715b7551a92d96c248bb3c0f2b3595d81980688b..0357bb86d71d4c416d7ceb8f7a5ed74f9b835296 100644
--- a/ee/spec/frontend/security_orchestration/components/policy_editor/scan_result/action/approver_selection_wrapper_spec.js
+++ b/ee/spec/frontend/security_orchestration/components/policy_editor/scan_result/action/approver_selection_wrapper_spec.js
@@ -268,7 +268,7 @@ describe('ApproverSelectionWrapper', () => {
       });
 
       expect(findApproverTypeDropdownContent().classes()).not.toContain('!gl-cursor-default');
-      expect(findApproverTypeDropdownText().classes()).not.toContain('gl-text-gray-500');
+      expect(findApproverTypeDropdownText().classes()).not.toContain('gl-text-subtle');
     });
 
     it('renders disable state when items are not selected', () => {
@@ -280,7 +280,7 @@ describe('ApproverSelectionWrapper', () => {
       });
 
       expect(findApproverTypeDropdownContent().classes()).toContain('!gl-cursor-default');
-      expect(findApproverTypeDropdownText().classes()).toContain('gl-text-gray-500');
+      expect(findApproverTypeDropdownText().classes()).toContain('gl-text-subtle');
     });
   });
 });
diff --git a/ee/spec/frontend/subscriptions/buy_addons_shared/__snapshots__/app_spec.js.snap b/ee/spec/frontend/subscriptions/buy_addons_shared/__snapshots__/app_spec.js.snap
index b6765e19c87866723cc9241ea8c2764804069fad..d7332706210b43664834db22e4e45864825d3c33 100644
--- a/ee/spec/frontend/subscriptions/buy_addons_shared/__snapshots__/app_spec.js.snap
+++ b/ee/spec/frontend/subscriptions/buy_addons_shared/__snapshots__/app_spec.js.snap
@@ -129,7 +129,7 @@ exports[`Buy Addons Shared App Compute minutes labels does not show labels if in
             class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
           >
             <div
-              class="gl-text-gray-500"
+              class="gl-text-subtle"
               data-testid="price-per-unit"
             >
               $10 per pack of 1,000 compute minutes
@@ -139,7 +139,7 @@ exports[`Buy Addons Shared App Compute minutes labels does not show labels if in
             class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
           >
             <div
-              class="gl-flex gl-justify-between gl-mb-2 gl-text-gray-500"
+              class="gl-flex gl-justify-between gl-mb-2 gl-text-subtle"
             >
               <div>
                 Subtotal
@@ -151,7 +151,7 @@ exports[`Buy Addons Shared App Compute minutes labels does not show labels if in
               </div>
             </div>
             <div
-              class="gl-flex gl-justify-between gl-text-gray-500"
+              class="gl-flex gl-justify-between gl-text-subtle"
             >
               <div
                 data-testid="vat-info-line"
@@ -209,7 +209,7 @@ exports[`Buy Addons Shared App Compute minutes labels does not show labels if in
           class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
         >
           <div
-            class="gl-text-gray-500"
+            class="gl-text-subtle"
             data-testid="price-per-unit"
           >
             $10 per pack of 1,000 compute minutes
@@ -219,7 +219,7 @@ exports[`Buy Addons Shared App Compute minutes labels does not show labels if in
           class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
         >
           <div
-            class="gl-flex gl-justify-between gl-mb-2 gl-text-gray-500"
+            class="gl-flex gl-justify-between gl-mb-2 gl-text-subtle"
           >
             <div>
               Subtotal
@@ -231,7 +231,7 @@ exports[`Buy Addons Shared App Compute minutes labels does not show labels if in
             </div>
           </div>
           <div
-            class="gl-flex gl-justify-between gl-text-gray-500"
+            class="gl-flex gl-justify-between gl-text-subtle"
           >
             <div
               data-testid="vat-info-line"
@@ -404,7 +404,7 @@ exports[`Buy Addons Shared App Compute minutes labels shows labels correctly for
             class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
           >
             <div
-              class="gl-text-gray-500"
+              class="gl-text-subtle"
               data-testid="price-per-unit"
             >
               $10 per pack of 1,000 compute minutes
@@ -414,7 +414,7 @@ exports[`Buy Addons Shared App Compute minutes labels shows labels correctly for
             class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
           >
             <div
-              class="gl-flex gl-justify-between gl-mb-2 gl-text-gray-500"
+              class="gl-flex gl-justify-between gl-mb-2 gl-text-subtle"
             >
               <div>
                 Subtotal
@@ -426,7 +426,7 @@ exports[`Buy Addons Shared App Compute minutes labels shows labels correctly for
               </div>
             </div>
             <div
-              class="gl-flex gl-justify-between gl-text-gray-500"
+              class="gl-flex gl-justify-between gl-text-subtle"
             >
               <div
                 data-testid="vat-info-line"
@@ -490,7 +490,7 @@ exports[`Buy Addons Shared App Compute minutes labels shows labels correctly for
           class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
         >
           <div
-            class="gl-text-gray-500"
+            class="gl-text-subtle"
             data-testid="price-per-unit"
           >
             $10 per pack of 1,000 compute minutes
@@ -500,7 +500,7 @@ exports[`Buy Addons Shared App Compute minutes labels shows labels correctly for
           class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
         >
           <div
-            class="gl-flex gl-justify-between gl-mb-2 gl-text-gray-500"
+            class="gl-flex gl-justify-between gl-mb-2 gl-text-subtle"
           >
             <div>
               Subtotal
@@ -512,7 +512,7 @@ exports[`Buy Addons Shared App Compute minutes labels shows labels correctly for
             </div>
           </div>
           <div
-            class="gl-flex gl-justify-between gl-text-gray-500"
+            class="gl-flex gl-justify-between gl-text-subtle"
           >
             <div
               data-testid="vat-info-line"
@@ -685,7 +685,7 @@ exports[`Buy Addons Shared App Compute minutes labels shows labels correctly for
             class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
           >
             <div
-              class="gl-text-gray-500"
+              class="gl-text-subtle"
               data-testid="price-per-unit"
             >
               $10 per pack of 1,000 compute minutes
@@ -695,7 +695,7 @@ exports[`Buy Addons Shared App Compute minutes labels shows labels correctly for
             class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
           >
             <div
-              class="gl-flex gl-justify-between gl-mb-2 gl-text-gray-500"
+              class="gl-flex gl-justify-between gl-mb-2 gl-text-subtle"
             >
               <div>
                 Subtotal
@@ -707,7 +707,7 @@ exports[`Buy Addons Shared App Compute minutes labels shows labels correctly for
               </div>
             </div>
             <div
-              class="gl-flex gl-justify-between gl-text-gray-500"
+              class="gl-flex gl-justify-between gl-text-subtle"
             >
               <div
                 data-testid="vat-info-line"
@@ -771,7 +771,7 @@ exports[`Buy Addons Shared App Compute minutes labels shows labels correctly for
           class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
         >
           <div
-            class="gl-text-gray-500"
+            class="gl-text-subtle"
             data-testid="price-per-unit"
           >
             $10 per pack of 1,000 compute minutes
@@ -781,7 +781,7 @@ exports[`Buy Addons Shared App Compute minutes labels shows labels correctly for
           class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
         >
           <div
-            class="gl-flex gl-justify-between gl-mb-2 gl-text-gray-500"
+            class="gl-flex gl-justify-between gl-mb-2 gl-text-subtle"
           >
             <div>
               Subtotal
@@ -793,7 +793,7 @@ exports[`Buy Addons Shared App Compute minutes labels shows labels correctly for
             </div>
           </div>
           <div
-            class="gl-flex gl-justify-between gl-text-gray-500"
+            class="gl-flex gl-justify-between gl-text-subtle"
           >
             <div
               data-testid="vat-info-line"
@@ -943,13 +943,13 @@ exports[`Buy Addons Shared App Storage labels does not show labels if input is i
             class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
           >
             <div
-              class="gl-text-gray-500"
+              class="gl-text-subtle"
               data-testid="price-per-unit"
             >
               $60 per 10 GB storage pack per year
             </div>
             <div
-              class="gl-text-gray-500"
+              class="gl-text-subtle"
               data-testid="subscription-period"
             >
               Jul 6, 2020 - Dec 15, 2022
@@ -967,7 +967,7 @@ exports[`Buy Addons Shared App Storage labels does not show labels if input is i
             class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
           >
             <div
-              class="gl-flex gl-justify-between gl-mb-2 gl-text-gray-500"
+              class="gl-flex gl-justify-between gl-mb-2 gl-text-subtle"
             >
               <div>
                 Subtotal
@@ -979,7 +979,7 @@ exports[`Buy Addons Shared App Storage labels does not show labels if input is i
               </div>
             </div>
             <div
-              class="gl-flex gl-justify-between gl-text-gray-500"
+              class="gl-flex gl-justify-between gl-text-subtle"
             >
               <div
                 data-testid="vat-info-line"
@@ -1037,13 +1037,13 @@ exports[`Buy Addons Shared App Storage labels does not show labels if input is i
           class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
         >
           <div
-            class="gl-text-gray-500"
+            class="gl-text-subtle"
             data-testid="price-per-unit"
           >
             $60 per 10 GB storage pack per year
           </div>
           <div
-            class="gl-text-gray-500"
+            class="gl-text-subtle"
             data-testid="subscription-period"
           >
             Jul 6, 2020 - Dec 15, 2022
@@ -1061,7 +1061,7 @@ exports[`Buy Addons Shared App Storage labels does not show labels if input is i
           class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
         >
           <div
-            class="gl-flex gl-justify-between gl-mb-2 gl-text-gray-500"
+            class="gl-flex gl-justify-between gl-mb-2 gl-text-subtle"
           >
             <div>
               Subtotal
@@ -1073,7 +1073,7 @@ exports[`Buy Addons Shared App Storage labels does not show labels if input is i
             </div>
           </div>
           <div
-            class="gl-flex gl-justify-between gl-text-gray-500"
+            class="gl-flex gl-justify-between gl-text-subtle"
           >
             <div
               data-testid="vat-info-line"
@@ -1233,13 +1233,13 @@ exports[`Buy Addons Shared App Storage labels shows labels correctly for 1 pack
             class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
           >
             <div
-              class="gl-text-gray-500"
+              class="gl-text-subtle"
               data-testid="price-per-unit"
             >
               $60 per 10 GB storage pack per year
             </div>
             <div
-              class="gl-text-gray-500"
+              class="gl-text-subtle"
               data-testid="subscription-period"
             >
               Jul 6, 2020 - Dec 15, 2022
@@ -1257,7 +1257,7 @@ exports[`Buy Addons Shared App Storage labels shows labels correctly for 1 pack
             class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
           >
             <div
-              class="gl-flex gl-justify-between gl-mb-2 gl-text-gray-500"
+              class="gl-flex gl-justify-between gl-mb-2 gl-text-subtle"
             >
               <div>
                 Subtotal
@@ -1269,7 +1269,7 @@ exports[`Buy Addons Shared App Storage labels shows labels correctly for 1 pack
               </div>
             </div>
             <div
-              class="gl-flex gl-justify-between gl-text-gray-500"
+              class="gl-flex gl-justify-between gl-text-subtle"
             >
               <div
                 data-testid="vat-info-line"
@@ -1333,13 +1333,13 @@ exports[`Buy Addons Shared App Storage labels shows labels correctly for 1 pack
           class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
         >
           <div
-            class="gl-text-gray-500"
+            class="gl-text-subtle"
             data-testid="price-per-unit"
           >
             $60 per 10 GB storage pack per year
           </div>
           <div
-            class="gl-text-gray-500"
+            class="gl-text-subtle"
             data-testid="subscription-period"
           >
             Jul 6, 2020 - Dec 15, 2022
@@ -1357,7 +1357,7 @@ exports[`Buy Addons Shared App Storage labels shows labels correctly for 1 pack
           class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
         >
           <div
-            class="gl-flex gl-justify-between gl-mb-2 gl-text-gray-500"
+            class="gl-flex gl-justify-between gl-mb-2 gl-text-subtle"
           >
             <div>
               Subtotal
@@ -1369,7 +1369,7 @@ exports[`Buy Addons Shared App Storage labels shows labels correctly for 1 pack
             </div>
           </div>
           <div
-            class="gl-flex gl-justify-between gl-text-gray-500"
+            class="gl-flex gl-justify-between gl-text-subtle"
           >
             <div
               data-testid="vat-info-line"
@@ -1529,13 +1529,13 @@ exports[`Buy Addons Shared App Storage labels shows labels correctly for 2 packs
             class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
           >
             <div
-              class="gl-text-gray-500"
+              class="gl-text-subtle"
               data-testid="price-per-unit"
             >
               $60 per 10 GB storage pack per year
             </div>
             <div
-              class="gl-text-gray-500"
+              class="gl-text-subtle"
               data-testid="subscription-period"
             >
               Jul 6, 2020 - Dec 15, 2022
@@ -1553,7 +1553,7 @@ exports[`Buy Addons Shared App Storage labels shows labels correctly for 2 packs
             class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
           >
             <div
-              class="gl-flex gl-justify-between gl-mb-2 gl-text-gray-500"
+              class="gl-flex gl-justify-between gl-mb-2 gl-text-subtle"
             >
               <div>
                 Subtotal
@@ -1565,7 +1565,7 @@ exports[`Buy Addons Shared App Storage labels shows labels correctly for 2 packs
               </div>
             </div>
             <div
-              class="gl-flex gl-justify-between gl-text-gray-500"
+              class="gl-flex gl-justify-between gl-text-subtle"
             >
               <div
                 data-testid="vat-info-line"
@@ -1629,13 +1629,13 @@ exports[`Buy Addons Shared App Storage labels shows labels correctly for 2 packs
           class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
         >
           <div
-            class="gl-text-gray-500"
+            class="gl-text-subtle"
             data-testid="price-per-unit"
           >
             $60 per 10 GB storage pack per year
           </div>
           <div
-            class="gl-text-gray-500"
+            class="gl-text-subtle"
             data-testid="subscription-period"
           >
             Jul 6, 2020 - Dec 15, 2022
@@ -1653,7 +1653,7 @@ exports[`Buy Addons Shared App Storage labels shows labels correctly for 2 packs
           class="gl-border-b-1 gl-border-b-gray-100 gl-border-b-solid gl-mb-5 gl-pb-5"
         >
           <div
-            class="gl-flex gl-justify-between gl-mb-2 gl-text-gray-500"
+            class="gl-flex gl-justify-between gl-mb-2 gl-text-subtle"
           >
             <div>
               Subtotal
@@ -1665,7 +1665,7 @@ exports[`Buy Addons Shared App Storage labels shows labels correctly for 2 packs
             </div>
           </div>
           <div
-            class="gl-flex gl-justify-between gl-text-gray-500"
+            class="gl-flex gl-justify-between gl-text-subtle"
           >
             <div
               data-testid="vat-info-line"
diff --git a/spec/frontend/content_editor/components/suggestions_dropdown_spec.js b/spec/frontend/content_editor/components/suggestions_dropdown_spec.js
index bffd119f86c749693e8fd00ec76a7101752f2631..8773aee37a6a4c0e571e9797975501431cc99155 100644
--- a/spec/frontend/content_editor/components/suggestions_dropdown_spec.js
+++ b/spec/frontend/content_editor/components/suggestions_dropdown_spec.js
@@ -190,8 +190,8 @@ describe('~/content_editor/components/suggestions_dropdown', () => {
 
   it.each`
     query      | expectedHTML
-    ${''}      | ${'<small class="gl-text-gray-500">Administrator &lt;script&gt;alert("hello")&lt;/script&gt;</small></span></span>'}
-    ${'Admin'} | ${'<small class="gl-text-gray-500"><strong class="!gl-text-default">Admin</strong>istrator &lt;script&gt;alert("hello")&lt;/script&gt;</small></span></span>'}
+    ${''}      | ${'<small class="gl-text-subtle">Administrator &lt;script&gt;alert("hello")&lt;/script&gt;</small></span></span>'}
+    ${'Admin'} | ${'<small class="gl-text-subtle"><strong class="!gl-text-default">Admin</strong>istrator &lt;script&gt;alert("hello")&lt;/script&gt;</small></span></span>'}
   `('escapes stray html before appending to DOM', ({ query, expectedHTML }) => {
     buildWrapper({
       propsData: {
diff --git a/spec/frontend/design_management/components/toolbar/__snapshots__/index_spec.js.snap b/spec/frontend/design_management/components/toolbar/__snapshots__/index_spec.js.snap
index 5dca75a248d0542e0b21aa67c9c57373937e22d0..3bc9fab5d40da76253a9cea4e6bd73a12b79bbcc 100644
--- a/spec/frontend/design_management/components/toolbar/__snapshots__/index_spec.js.snap
+++ b/spec/frontend/design_management/components/toolbar/__snapshots__/index_spec.js.snap
@@ -35,7 +35,7 @@ exports[`Design management toolbar component renders design and updated data 1`]
         />
       </h2>
       <small
-        class="gl-text-gray-500"
+        class="gl-text-subtle"
       >
         Updated 1 hour ago by Test Name
       </small>
diff --git a/spec/frontend/fixtures/static/textarea.html b/spec/frontend/fixtures/static/textarea.html
index 2d57e997c76995f1f5ab8f609ccfb92c2629ed9b..1e961820c5b03163bda355b581fe774255e8d7e5 100644
--- a/spec/frontend/fixtures/static/textarea.html
+++ b/spec/frontend/fixtures/static/textarea.html
@@ -1,27 +1,36 @@
 <body>
-<meta charset="utf-8">
-<title>Document with Textarea</title>
-<form class="milestone-form common-note-form js-quick-submit" id="new_milestone"
-      action="http://test.host/frontend-fixtures/milestones-project/-/milestones"
-      accept-charset="UTF-8" method="post">
+  <meta charset="utf-8" />
+  <title>Document with Textarea</title>
+  <form
+    class="milestone-form common-note-form js-quick-submit"
+    id="new_milestone"
+    action="http://test.host/frontend-fixtures/milestones-project/-/milestones"
+    accept-charset="UTF-8"
+    method="post"
+  >
     <div class="form-group">
-        <div class="md-write-holder">
-            <div class="zen-backdrop">
-                <textarea class="note-textarea js-gfm-input js-autosize markdown-area"
-                          placeholder="Write milestone description..." dir="auto"
-                          data-supports-quick-actions="false" data-supports-autocomplete="true"
-                          data-testid="milestone-description-field" data-autofocus="false"
-                          name="milestone[description]"
-                          id="milestone_description"></textarea>
-                <a class="zen-control zen-control-leave js-zen-leave gl-text-gray-500"
-                   href="#">
-                    <svg class="s16" data-testid="minimize-icon">
-                        <use href="http://test.host/assets/icons-b8c5a9711f73b1de3c81754da0aca72f43b0e6844aa06dd03092b601a493f45b.svg#minimize"></use>
-                    </svg>
-                </a>
-            </div>
+      <div class="md-write-holder">
+        <div class="zen-backdrop">
+          <textarea
+            class="note-textarea js-gfm-input js-autosize markdown-area"
+            placeholder="Write milestone description..."
+            dir="auto"
+            data-supports-quick-actions="false"
+            data-supports-autocomplete="true"
+            data-testid="milestone-description-field"
+            data-autofocus="false"
+            name="milestone[description]"
+            id="milestone_description"
+          ></textarea>
+          <a class="zen-control zen-control-leave js-zen-leave gl-text-subtle" href="#">
+            <svg class="s16" data-testid="minimize-icon">
+              <use
+                href="http://test.host/assets/icons-b8c5a9711f73b1de3c81754da0aca72f43b0e6844aa06dd03092b601a493f45b.svg#minimize"
+              ></use>
+            </svg>
+          </a>
         </div>
+      </div>
     </div>
-</form>
-
+  </form>
 </body>
diff --git a/spec/frontend/members/components/table/__snapshots__/member_activity_spec.js.snap b/spec/frontend/members/components/table/__snapshots__/member_activity_spec.js.snap
index 9ece3dda10df78f2c1d0ec6c351454c314e8c942..270af326179dc6d036b19e9298e427e4f28160b1 100644
--- a/spec/frontend/members/components/table/__snapshots__/member_activity_spec.js.snap
+++ b/spec/frontend/members/components/table/__snapshots__/member_activity_spec.js.snap
@@ -9,7 +9,7 @@ exports[`MemberActivity with a member that does not have all of the fields rende
   >
     <svg
       aria-hidden="true"
-      class="gl-fill-current gl-icon gl-text-gray-500 s16"
+      class="gl-fill-current gl-icon gl-text-subtle s16"
       data-testid="check-icon"
       role="img"
       title="Access granted"
@@ -34,7 +34,7 @@ exports[`MemberActivity with a member that has all fields and "requestAcceptedAt
   >
     <svg
       aria-hidden="true"
-      class="-gl-mr-2 gl-fill-current gl-icon gl-ml-2 gl-text-gray-500 s16"
+      class="-gl-mr-2 gl-fill-current gl-icon gl-ml-2 gl-text-subtle s16"
       data-testid="assignee-icon"
       role="img"
       title="User created"
@@ -52,7 +52,7 @@ exports[`MemberActivity with a member that has all fields and "requestAcceptedAt
   >
     <svg
       aria-hidden="true"
-      class="gl-fill-current gl-icon gl-text-gray-500 s16"
+      class="gl-fill-current gl-icon gl-text-subtle s16"
       data-testid="check-icon"
       role="img"
       title="Access granted"
@@ -70,7 +70,7 @@ exports[`MemberActivity with a member that has all fields and "requestAcceptedAt
   >
     <svg
       aria-hidden="true"
-      class="gl-fill-current gl-icon gl-text-gray-500 s16"
+      class="gl-fill-current gl-icon gl-text-subtle s16"
       data-testid="hourglass-icon"
       role="img"
       title="Last activity"
@@ -95,7 +95,7 @@ exports[`MemberActivity with a member that has all fields renders \`User created
   >
     <svg
       aria-hidden="true"
-      class="-gl-mr-2 gl-fill-current gl-icon gl-ml-2 gl-text-gray-500 s16"
+      class="-gl-mr-2 gl-fill-current gl-icon gl-ml-2 gl-text-subtle s16"
       data-testid="assignee-icon"
       role="img"
       title="User created"
@@ -113,7 +113,7 @@ exports[`MemberActivity with a member that has all fields renders \`User created
   >
     <svg
       aria-hidden="true"
-      class="gl-fill-current gl-icon gl-text-gray-500 s16"
+      class="gl-fill-current gl-icon gl-text-subtle s16"
       data-testid="check-icon"
       role="img"
       title="Access granted"
@@ -131,7 +131,7 @@ exports[`MemberActivity with a member that has all fields renders \`User created
   >
     <svg
       aria-hidden="true"
-      class="gl-fill-current gl-icon gl-text-gray-500 s16"
+      class="gl-fill-current gl-icon gl-text-subtle s16"
       data-testid="hourglass-icon"
       role="img"
       title="Last activity"
diff --git a/spec/frontend/organizations/shared/components/new_edit_form_spec.js b/spec/frontend/organizations/shared/components/new_edit_form_spec.js
index 5ba5f6748735532843afe0d967a0b6b0c27b53aa..40457ea50302849c3d001bbe78b8bda62b9f28e0 100644
--- a/spec/frontend/organizations/shared/components/new_edit_form_spec.js
+++ b/spec/frontend/organizations/shared/components/new_edit_form_spec.js
@@ -111,7 +111,7 @@ describe('NewEditForm', () => {
       });
 
       it('renders the character counter correctly', () => {
-        expect(findDescriptionCharacterCounter().classes()).toStrictEqual(['gl-text-gray-500']);
+        expect(findDescriptionCharacterCounter().classes()).toStrictEqual(['gl-text-subtle']);
         expect(findDescriptionCharacterCounter().text()).toBe(
           `${charactersLeft} characters remaining`,
         );
diff --git a/spec/frontend/projects/components/new_edit_form_spec.js b/spec/frontend/projects/components/new_edit_form_spec.js
index d8b6c07488527bd1d0c769158fbab9bd7ad27354..b5b84b9cb0ef8ca2703b04650f3201271017fb52 100644
--- a/spec/frontend/projects/components/new_edit_form_spec.js
+++ b/spec/frontend/projects/components/new_edit_form_spec.js
@@ -65,7 +65,7 @@ describe('NewEditForm', () => {
       });
 
       it('renders the character counter correctly', () => {
-        expect(findDescriptionCharacterCounter().classes()).toStrictEqual(['gl-text-gray-500']);
+        expect(findDescriptionCharacterCounter().classes()).toStrictEqual(['gl-text-subtle']);
         expect(findDescriptionCharacterCounter().text()).toBe('1995 characters remaining');
       });
     });
diff --git a/spec/frontend/projects/new/components/new_project_url_select_spec.js b/spec/frontend/projects/new/components/new_project_url_select_spec.js
index 87471a4959c362ee8650a5d719e6efe2de6c691e..cba52298f10af85def14d2abe9c9063552fd2c9a 100644
--- a/spec/frontend/projects/new/components/new_project_url_select_spec.js
+++ b/spec/frontend/projects/new/components/new_project_url_select_spec.js
@@ -67,7 +67,7 @@ describe('NewProjectUrlSelect component', () => {
     inputName: 'input_name',
   };
 
-  const dropdownPlaceholderClass = '!gl-text-gray-500';
+  const dropdownPlaceholderClass = '!gl-text-subtle';
 
   let mockQueryResponse;
   let focusInputSpy;
diff --git a/spec/frontend/projects/settings/components/access_dropdown_spec.js b/spec/frontend/projects/settings/components/access_dropdown_spec.js
index 54c77d5240e618c9fcb07079c444d6908ef3215a..287f18ba1c409fcad97cf4043fdce73fe3e87f00 100644
--- a/spec/frontend/projects/settings/components/access_dropdown_spec.js
+++ b/spec/frontend/projects/settings/components/access_dropdown_spec.js
@@ -56,7 +56,7 @@ describe('Access Level Dropdown', () => {
   });
 
   let wrapper;
-  const defaultToggleClass = '!gl-text-gray-500';
+  const defaultToggleClass = '!gl-text-subtle';
   const mockAccessLevelsData = [
     {
       id: 1,
diff --git a/spec/frontend/work_items/components/design_management/__snapshots__/design_item_spec.js.snap b/spec/frontend/work_items/components/design_management/__snapshots__/design_item_spec.js.snap
index 570a1f6822be364de377f15e7cc0d7bb8f5a96ac..b6dcdaa6442bd2d9c8d5aee8ff2f8582897c7b88 100644
--- a/spec/frontend/work_items/components/design_management/__snapshots__/design_item_spec.js.snap
+++ b/spec/frontend/work_items/components/design_management/__snapshots__/design_item_spec.js.snap
@@ -55,7 +55,7 @@ exports[`Design item component with notes renders item with multiple comments 1`
       </span>
     </div>
     <div
-      class="gl-flex gl-items-center gl-ml-auto gl-text-gray-500"
+      class="gl-flex gl-items-center gl-ml-auto gl-text-subtle"
     >
       <gl-icon-stub
         class="gl-ml-2"
@@ -120,7 +120,7 @@ exports[`Design item component with notes renders item with single comment 1`] =
       </span>
     </div>
     <div
-      class="gl-flex gl-items-center gl-ml-auto gl-text-gray-500"
+      class="gl-flex gl-items-center gl-ml-auto gl-text-subtle"
     >
       <gl-icon-stub
         class="gl-ml-2"
diff --git a/spec/frontend/work_items/components/work_item_development/work_item_development_ff_item_spec.js b/spec/frontend/work_items/components/work_item_development/work_item_development_ff_item_spec.js
index e30beb3bff92fd82ab8fbf893dbe21f7cb3bd423..dbe14f63996c87be3870f0d7861548e36714e2bc 100644
--- a/spec/frontend/work_items/components/work_item_development/work_item_development_ff_item_spec.js
+++ b/spec/frontend/work_items/components/work_item_development/work_item_development_ff_item_spec.js
@@ -27,7 +27,7 @@ describe('WorkItemDevelopmentFfItem', () => {
     it.each`
       state         | icon                       | featureFlag            | iconClass
       ${'Enabled'}  | ${'feature-flag'}          | ${enabledFeatureFlag}  | ${'gl-text-blue-500'}
-      ${'Disabled'} | ${'feature-flag-disabled'} | ${disabledFeatureFlag} | ${'gl-text-gray-500'}
+      ${'Disabled'} | ${'feature-flag-disabled'} | ${disabledFeatureFlag} | ${'gl-text-subtle'}
     `(
       'renders icon "$icon" when the state of the feature flag is "$state"',
       ({ icon, iconClass, featureFlag }) => {
diff --git a/spec/helpers/milestones_helper_spec.rb b/spec/helpers/milestones_helper_spec.rb
index bf93e863a010bc509900f1f5f962cddc62ae3abb..3a7dda235179547dcc440c726605fb56a36efbf2 100644
--- a/spec/helpers/milestones_helper_spec.rb
+++ b/spec/helpers/milestones_helper_spec.rb
@@ -35,7 +35,7 @@
     context 'when primary is set to false' do
       subject { helper.milestone_counter_class(false) }
 
-      it { is_expected.to eq('gl-text-gray-500') }
+      it { is_expected.to eq('gl-text-subtle') }
     end
   end
 end