From 7a60ce5c14bc03b72b73b9609a0c5d879b420890 Mon Sep 17 00:00:00 2001
From: sdejonge <sdejonge@gitlab.com>
Date: Thu, 14 Nov 2024 16:23:49 +1100
Subject: [PATCH] Update gl-text-gray-500 to gl-text-subtle

Update gl-text-gray-500 to gl-text-subtle
---
 .../abuse_report/components/labels_select.vue |  2 +-
 .../components/date_ranges_dropdown.vue       |  2 +-
 .../components/projects_dropdown_filter.vue   |  2 +-
 .../boards/components/board_card_inner.vue    |  2 +-
 .../boards/components/board_list_header.vue   |  2 +-
 .../sidebar/board_editable_item.vue           |  2 +-
 .../list/ci_resources_list_item.vue           |  2 +-
 .../downstream_pipelines.vue                  |  2 +-
 .../components/pipeline_new_form.vue          |  4 +-
 .../components/pipeline_url.vue               |  4 +-
 .../javascripts/clusters_list/constants.js    |  2 +-
 .../components/suggestions_dropdown.vue       | 14 ++--
 .../contribution_event_base.vue               |  2 +-
 .../design_notes/design_discussion.vue        |  4 +-
 .../components/toolbar/index.vue              |  2 +-
 .../diffs/components/diff_line_note_form.vue  |  2 +-
 .../diffs/components/diff_stats.vue           |  2 +-
 .../environments/components/deployment.vue    |  8 +-
 .../components/environment_actions.vue        |  2 +-
 .../javascripts/environments/constants.js     |  2 +-
 .../settings/components/access_dropdown.vue   |  2 +-
 .../fields/description_template.vue           |  2 +-
 .../incidents/timeline_events_form.vue        |  2 +-
 .../components/workload_details.vue           |  2 +-
 .../components/workload_details_item.vue      |  2 +-
 .../components/avatars/user_avatar.vue        |  2 +-
 .../components/table/member_activity.vue      |  6 +-
 .../components/assigned_users.vue             |  2 +-
 .../experiments/show/ml_experiments_show.vue  |  4 +-
 .../ml/model_registry/apps/show_ml_model.vue  | 10 +--
 .../apps/show_ml_model_version.vue            |  6 +-
 .../components/model_versions_table.vue       |  2 +-
 .../notifications_dropdown_item.vue           |  2 +-
 .../shared/components/new_edit_form.vue       |  2 +-
 .../components/list_page/cleanup_status.vue   |  2 +-
 .../components/list_page/image_list_row.vue   |  2 +-
 .../components/manifest_row.vue               |  2 +-
 .../container_expiration_policy_form.vue      |  2 +-
 .../components/expiration_dropdown.vue        |  2 +-
 .../project/components/expiration_input.vue   |  2 +-
 .../shared/components/package_path.vue        |  4 +-
 .../forks/new/components/fork_form.vue        |  2 +-
 .../permissions/components/settings_panel.vue | 18 ++--
 .../components/snippets/snippet_row.vue       |  4 +-
 .../profile/edit/components/user_avatar.vue   |  2 +-
 .../projects/components/new_edit_form.vue     |  2 +-
 .../new/components/new_project_url_select.vue |  2 +-
 .../settings/components/access_dropdown.vue   |  2 +-
 .../branch_rules/components/branch_rule.vue   |  2 +-
 .../related_issues/components/issue_token.vue |  4 +-
 .../releases/components/tag_search.vue        |  2 +-
 .../language_filter/checkbox_filter.vue       |  2 +-
 .../super_sidebar/components/nav_item.vue     |  2 +-
 .../surveys/components/satisfaction_rate.vue  |  2 +-
 .../surveys/merge_request_experience/app.vue  |  4 +-
 .../components/sectioned_percentage_bar.vue   |  2 +-
 .../user_lists/components/user_list.vue       |  2 +-
 .../user_lists/components/user_list_form.vue  |  2 +-
 .../components/alert_sidebar.vue              |  2 +-
 .../number_to_human_size.stories.js           |  2 +-
 .../components/usage_quotas/usage_banner.vue  |  4 +-
 .../components/users_table/user_avatar.vue    |  2 +-
 .../design_management/design_item.vue         |  2 +-
 .../design_notes/design_discussion.vue        |  4 +-
 .../work_item_development_ff_item.vue         |  2 +-
 app/helpers/application_helper.rb             |  2 +-
 app/helpers/ci/runners_helper.rb              |  2 +-
 app/helpers/milestones_helper.rb              |  2 +-
 app/presenters/project_presenter.rb           |  2 +-
 .../_prometheus.html.haml                     |  2 +-
 .../application_settings/_usage.html.haml     |  2 +-
 .../dashboard/_stats_users_table.html.haml    |  2 +-
 app/views/admin/dashboard/stats.html.haml     |  2 +-
 app/views/admin/groups/_group.html.haml       |  2 +-
 app/views/admin/projects/_projects.html.haml  |  2 +-
 app/views/admin/topics/_topic.html.haml       |  2 +-
 .../devise/sessions/restricted.html.haml      |  2 +-
 .../shared/_terms_of_service_notice.html.haml |  2 +-
 .../doorkeeper/authorizations/new.html.haml   |  4 +-
 .../creations/_new_submit.html.haml           |  2 +-
 .../shared/empty_states/_issues.html.haml     |  2 +-
 app/views/shared/groups/_group.html.haml      |  2 +-
 .../shared/issuable/form/_metadata.html.haml  |  2 +-
 .../_setting_label_fieldset.html.haml         |  2 +-
 app/views/shared/snippets/_snippet.html.haml  |  2 +-
 app/views/users/show.html.haml                |  2 +-
 .../ai/components/user_feedback.vue           |  2 +-
 .../components/list/dashboard_list_item.vue   |  2 +-
 .../custom_stage_event_label_field.vue        |  2 +-
 .../components/no_data_available_state.vue    |  2 +-
 .../ai_impact/components/metric_table.vue     |  2 +-
 .../devops_adoption_overview_table.vue        |  4 +-
 .../components/devops_adoption_table.vue      |  4 +-
 .../components/release_stats_card.vue         |  2 +-
 .../components/throughput_chart.vue           |  2 +-
 .../unconfigured_security_rule.vue            |  2 +-
 .../javascripts/approvals/mr_edit/app.vue     |  2 +-
 .../stream/stream_destination_editor.vue      |  4 +-
 .../boards/components/assignee_select.vue     |  2 +-
 .../board_scope_current_iteration.vue         |  2 +-
 .../boards/components/epic_lane.vue           |  2 +-
 .../boards/components/labels_select.vue       |  2 +-
 .../boards/components/milestone_select.vue    |  2 +-
 .../components/timebox_summary_cards.vue      |  2 +-
 .../runner/components/runner_active_list.vue  |  2 +-
 .../runner_dashboard_stat_status.vue          |  2 +-
 .../secret_details/secret_details_wrapper.vue |  2 +-
 .../drawer_sections/branch_path.vue           |  2 +-
 .../shared/drawer_section_sub_header.vue      |  2 +-
 .../components/dependency_location.vue        |  4 +-
 .../components/dependency_location_count.vue  |  4 +-
 .../components/dashboard/project_header.vue   |  8 +-
 .../add_edit_escalation_policy_form.vue       |  2 +-
 .../components/escalation_policy.vue          |  2 +-
 .../external_issues_show/components/note.vue  |  6 +-
 .../javascripts/geo_replicable/constants.js   |  2 +-
 .../components/geo_site_form_core.vue         |  6 +-
 .../geo_site_primary_other_info.vue           |  2 +-
 .../geo_site_secondary_other_info.vue         |  2 +-
 .../secondary_site/geo_site_sync_settings.vue |  2 +-
 .../header/geo_site_last_updated.vue          |  2 +-
 .../issues/components/issue_weight.vue        |  2 +-
 .../components/issues_analytics_chart.vue     |  2 +-
 .../components/app.vue                        |  2 +-
 .../metrics/details/related_traces.vue        |  2 +-
 .../components/oncall_schedule.vue            |  2 +-
 .../preset_weeks/weeks_header_item.vue        |  2 +-
 .../included_in_trial_indicator.vue           |  2 +-
 .../project_quality_summary/app.vue           |  6 +-
 .../project_delayed_delete_button.vue         |  2 +-
 .../components/tree_item_body.vue             |  2 +-
 .../components/requirement_form.vue           |  2 +-
 .../components/requirement_item.vue           |  2 +-
 .../roadmap/components/epic_item_timeline.vue |  2 +-
 .../configuration_snippet_modal.vue           |  2 +-
 .../components/columns/name.vue               |  2 +-
 .../components/corpus_upload_form.vue         |  4 +-
 .../pre_scan_verification_sidebar.vue         |  2 +-
 .../pre_scan_verification_status.vue          |  6 +-
 .../components/pre_scan_verification_step.vue |  4 +-
 .../dast_profile_selector/empty_state.vue     |  4 +-
 .../dast_profiles_drawer_empty_state.vue      |  2 +-
 .../components/instance/project_list.vue      |  4 +-
 .../shared/project_security_status_chart.vue  |  4 +-
 .../policy_drawer/drawer_layout.vue           |  4 +-
 .../scan_execution/action/scan_action.vue     |  2 +-
 .../scan_execution/rule/rule_section.vue      |  2 +-
 .../policy_editor/scan_filter_selector.vue    |  2 +-
 .../scan_result/action/action_section.vue     |  2 +-
 .../action/approver_selection_wrapper.vue     |  2 +-
 .../scan_result/rule/rule_section.vue         |  2 +-
 .../rule/rule_section.vue                     |  2 +-
 .../order_summary/summary_details.vue         | 10 +--
 .../approvals/approvals_users_list.vue        |  2 +-
 ...ist_item_delayed_deletion_modal_footer.vue |  2 +-
 ...ist_item_delayed_deletion_modal_footer.vue |  2 +-
 .../components/solution_card_graphql.vue      |  2 +-
 .../new_vulnerability/section_details.vue     |  2 +-
 .../components/related_jira_issues.vue        |  4 +-
 .../components/work_item_iteration.vue        |  2 +-
 .../work_item_rolled_up_health_status.vue     |  2 +-
 .../workspaces_list/workspaces_table.vue      |  2 +-
 .../_elasticsearch_form.html.haml             |  2 +-
 .../dashboard/_stats_users_table.html.haml    |  4 +-
 .../registrations/_opt_in_to_email.html.haml  |  2 +-
 .../form/_merge_request_blocks.html.haml      |  2 +-
 .../runner_dashboard_stat_status_spec.js      |  4 +-
 .../__snapshots__/project_header_spec.js.snap |  8 +-
 .../escalation_policy_spec.js.snap            |  2 +-
 .../__snapshots__/note_spec.js.snap           |  4 +-
 .../__snapshots__/learn_gitlab_spec.js.snap   | 10 +--
 .../columns/__snapshots__/name_spec.js.snap   |  6 +-
 .../pre_scan_verification_step_spec.js        |  2 +-
 .../__snapshots__/empty_state_spec.js.snap    |  4 +-
 .../__snapshots__/drawer_layout_spec.js.snap  |  4 +-
 .../action/approver_selection_wrapper_spec.js |  4 +-
 .../__snapshots__/app_spec.js.snap            | 84 +++++++++----------
 .../components/suggestions_dropdown_spec.js   |  4 +-
 .../toolbar/__snapshots__/index_spec.js.snap  |  2 +-
 spec/frontend/fixtures/static/textarea.html   | 53 +++++++-----
 .../member_activity_spec.js.snap              | 14 ++--
 .../shared/components/new_edit_form_spec.js   |  2 +-
 .../projects/components/new_edit_form_spec.js |  2 +-
 .../components/new_project_url_select_spec.js |  2 +-
 .../components/access_dropdown_spec.js        |  2 +-
 .../__snapshots__/design_item_spec.js.snap    |  4 +-
 .../work_item_development_ff_item_spec.js     |  2 +-
 spec/helpers/milestones_helper_spec.rb        |  2 +-
 188 files changed, 341 insertions(+), 340 deletions(-)

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 a1c8e207cbdfe..8cf757269994e 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 fd707749497da..59f6617550ce1 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 1ddc805434be5..78c0a3304da94 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 a50783b98b928..2488688a27f88 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 765f9ac5bedd8..f03ba78251354 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 1f95b19bfe630..d94581b635f40 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 a02da36575ad5..fdca9aa22e394 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 6d006471a9e8e..319f32439c246 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 ac46030b577cc..45a86e2574462 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 506ba7c442dcd..d832c5f34e0f1 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 6db98aa8dc329..28f4fb43ea35b 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 3592a4868529b..09332119d2d62 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 e984d1abbfa99..e965c758fa101 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 f272c5375d50b..3dacf6d05448e 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 a5fecec5a9d38..50e09a1ccae62 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 54a975e922c09..ba017aa28aac3 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 368df987ed8d1..02cf173ca145e 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 a0efa55a7f832..8dfc6cd8c07aa 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 2309f598b2db2..ca12cd25be34d 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 01ccb512ec2f7..b9512fdf8d5ad 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 e1d2a7fa84f83..dbd8f2218a4de 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 4b20dafb86d01..ef040948ab9a9 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 25d4588f97cac..c533d06c235bb 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 a129032a472d1..d05da4dfdce53 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 a8a4a863100a8..e8873dac9dc4f 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 087ebab126925..84fa26da63b21 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 82e3ec5c5baf8..50f67e1dd60fd 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 8dc3c591dfc59..f25fd41be57a5 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 f5b668e8a6e93..02dc1ecbf6270 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 83d9a5cf830ae..652d6f4276e90 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 8022b4e96b326..932e77f0cceba 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 35a2bcda1aff6..35c3a1ef0f4b1 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 5a11bcf713efa..8ed53a24e6e3c 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 b6af292fa6077..61258da56a276 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 b54c521681a1a..88e3bde08930b 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 3990bda898edb..25f27b8f48aa2 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 718dd87f27cd6..1f93e5edb221d 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 f7f1f2742529a..a868620d90940 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 0bbb501011ab8..058efdd8cfe63 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 2c19662a4afc1..53b0f548929b4 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 5bc4f3054f3ec..5eccfdd01b1d7 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 230fdab921b9a..7d31ce7b59e51 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 48b7d4366d544..4ecf9922ab809 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 34df123178e19..1cdeee5c02918 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 b853a54a31b24..6cfde4e6d48c5 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 1e2165189b851..510761efffd46 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 ed9da03c1795e..236d9288631e7 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 c269426101816..51ffc8674177a 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 e473a0c5fa931..87b521a03bda3 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 b457a45c3b8df..8b419e9334d63 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 b0b229e106ff1..ad0d30a54f7c6 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 6e302cec59133..fea48025c978f 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 ded4eb86f3740..d787d5d804060 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 6cc7a08a11d61..62feb9d372ac9 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 467ee5ef48522..6a289f82c06af 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 168f3c331aecd..c61adb3cc23db 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 8c5a17dc3c81c..f1263339eb558 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 182e738ce21d4..bb1787805b2b7 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 807f392754e3e..86c857ef6cfca 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 c0702fc3db8a1..1570c6161bbd0 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 4dc6e4d1ef7a6..3baa2ed6a0802 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 2f6989991fd25..499c7e22faedc 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 754561f5c3626..6caf4f6783f5c 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 10c742b9788f2..a4d4357145b59 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 ef6905250c6f2..63b2aa54aa17a 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 aae79a6cc3b8f..ee79d552fe947 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 72a1b3cab39dc..5dca6eb1e65bb 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 6f904ece638bc..62f9024e6bbca 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 c574d24b15b20..16325945f687c 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 25e4bf11f328d..2bd733a93e550 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 1e63c1e74df4e..810c6d2a0c34b 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 804dd0f92a38f..218f91fd3a6bc 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 2b16a20a75895..4c419fcfb358b 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 5ed2defb785cb..6f39326d13956 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 66644d9691fce..3eff7445ce929 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 89a334d73b72a..8b98c11e49a63 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 b81285e0a814e..ca4c812ded26f 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 dd23a299b029d..9aac5729009da 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 dcff6cc17eddc..36ecf11834e17 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 ce644ed672017..d0e4425898759 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 4a8b806381443..708658ebad081 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 af20c30bfa566..c4fe879c476c8 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 279c6bc53b671..108470b129924 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 66c760b466cb7..352460c6da3fe 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 fae83c9149001..88f9acb6fff25 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 bde6d79c051da..1b42c8dbd6e5f 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 b24adee232f2b..156f588e75390 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 60b2eca55a3d6..634c5ecc584bd 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 23323d8a7f775..6bc7bd9e4e7fc 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 8ee5877c55fb3..3e3bdea847af8 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 23cac76ee8bf9..77a02e8a20442 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 6a40556a3aaaf..b3dc5ed6b2e35 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 53bf395bf62fe..560f647c068a0 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 bd6652796f8f3..2257803831fd8 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 86090109efe5f..57139e9f6b15c 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 d0b4e258fcf4e..49d2937774657 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 672d20e9db3fa..55df32a38d09f 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 0822cfb24d31f..ea7400326de0a 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 4451f98a5fd38..e8558ea8114cf 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 16e72dc45aaa6..0a6c8daaa5daf 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 dd10f0a2a3715..feb0813fe0ddf 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 fc84ec83aee1d..e7af0a5f9374f 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 7328f18c336f7..f4903f87f5630 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 287d43da20dab..5dcb24664ac6c 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 85963467ad687..e9dfccdf2214b 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 38dc9d4779380..ddb17bd715d6d 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 c77ac1b6fa7af..002cd676f8d3b 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 669b1363590a9..c704cbf1f035a 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 fd32de322ee88..bdfe8914029f2 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 d32a3b8cee0f2..4398209822f3d 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 cc88630041fed..2d57e34999c68 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 9bd625c84d3e5..8a1cd3fa3be40 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 1d06f223464e1..720f726eca5a6 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 b7abb70b4ec38..1b6632fa66af3 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 9d14553d7fddd..6328c84f6f095 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 c15003dfb5283..40bd7c8b33bd0 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 40f604677f48a..fb21ca59650e8 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 573492275896c..c35c9c8d14b30 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 6491cbc3e0edf..09b0e72e56497 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 32f0d7fec18a0..9569af595f8fc 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 0a5e0f8a22a7b..e9e3fc9ef1eaa 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 5083166880938..32143cb97f711 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 0d5692a38f209..e84c5775830f0 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 7f5066cbc57b9..d345cf1a1dfb6 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 48191214400d1..1fcda79f5c04c 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 bd7600f6cd50b..b390e18cc6fae 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 bdccd692a003c..31c9632cf3785 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 40973f76bf5e8..7d077a8463aba 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 3a6d5f8ca2d7a..b2cd75edafcf1 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 8000a8500ff2b..2db06a1c38579 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 18052cc4beb3a..11899035493b0 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 cb1f66fdfe54b..b41e160e03f99 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 19693846ac11e..24d126014d45e 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 b51c0a9a1ed7c..51a378ef2511c 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 3336e1621e11b..70c5c339fab22 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 fa9be1e83ce3e..1dd9c94ec6652 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 e7ee6a50c76b5..52c4d3be72be9 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 c63dd058c6d15..4f2e375481830 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 f807f714f6700..1905eb5f65d8a 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 0ef1a0a639fef..0b0a3eb858653 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 3c7bab3ab84ac..c382612970a08 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 4b724d802e013..8b6f539922112 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 78679b32a0dd0..017b681a17e9b 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 69506b831af4e..fc0dbca77933d 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 45e7ee9fefe4c..e4320329393db 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 31ea8ee729064..47731bde31302 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 8e8404afbc96d..f5d1e1ddbee9c 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 8fef28285098c..7a8b22998f4d8 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 bc92d33170676..2e902cf00e2dd 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 89ac73c8207b7..45df82bc3260d 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 c098747eeeade..dd9a53aec9991 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 9a06b2826775d..69b060882faf3 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 75fa9cca4c0e8..1991d7899b3e3 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 f78193b4dd3e5..662f2b84887dd 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 80543972daa95..d0d779abb7f0b 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 5af6dcbbe26bd..03d5f11fb0da8 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 f5f8aa0311af4..1cc367d635ba6 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 2a55412986918..4f301beb2103d 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 5b62433b66ee7..c96ee9baffbea 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 80e22e5fdaf9b..c71276d115a09 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 54a34381fc7f2..87d7891c3466d 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 f373be423abd7..397e00851f00d 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 d510043e2c287..da0c29b7d791a 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 5fd5e05da1ed7..ed398b2e67460 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 54d195726449d..cec682a80005f 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 2bea72894f884..1985c52039d21 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 480c9579fe2ed..d5a9d87f8cd07 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 cd8b5ddb916b8..944a14a56f0a2 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 5e863ee965e02..1bae158b99252 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 f66daefe371b3..131f6a856b04a 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 306ef0497ebbe..06b7564bfb236 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 653cdc06841bc..d73b93aa765e8 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 18b926c862807..dc7ae4e3e2127 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 5ae8a3aac53ff..8faaad6566ade 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 c4b951ab8c908..8c147b45944e7 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 715b7551a92d9..0357bb86d71d4 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 b6765e19c8786..d7332706210b4 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 bffd119f86c74..8773aee37a6a4 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 5dca75a248d05..3bc9fab5d40da 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 2d57e997c7699..1e961820c5b03 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 9ece3dda10df7..270af326179dc 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 5ba5f67487355..40457ea503028 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 d8b6c07488527..b5b84b9cb0ef8 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 87471a4959c36..cba52298f10af 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 54c77d5240e61..287f18ba1c409 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 570a1f6822be3..b6dcdaa6442bd 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 e30beb3bff92f..dbe14f63996c8 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 bf93e863a010b..3a7dda2351795 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
-- 
GitLab