diff --git a/src/com/android/wallpaper/customization/ui/binder/ClockFloatingSheetBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ClockFloatingSheetBinder.kt
index 9dca30c..497d7c9 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ClockFloatingSheetBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ClockFloatingSheetBinder.kt
@@ -27,6 +27,7 @@
 import android.view.ViewTreeObserver.OnGlobalLayoutListener
 import android.widget.FrameLayout
 import android.widget.ImageView
+import android.widget.TextView
 import androidx.core.graphics.drawable.DrawableCompat
 import androidx.core.view.isVisible
 import androidx.lifecycle.Lifecycle
@@ -123,16 +124,41 @@
 
         // Clock style
         val clockStyleContent = view.requireViewById<View>(R.id.clock_floating_sheet_style_content)
+        val clockSizeSwitch =
+            clockStyleContent.requireViewById<MaterialSwitch>(R.id.clock_style_clock_size_switch)
+        val isClockStyleActive = {
+            isFloatingSheetActive() && viewModel.selectedTab.value == Tab.STYLE
+        }
         val clockStyleAdapter =
             createClockStyleOptionItemAdapter(
                 colorUpdateViewModel = colorUpdateViewModel,
-                shouldAnimateColor = isFloatingSheetActive,
+                shouldAnimateColor = isClockStyleActive,
                 lifecycleOwner = lifecycleOwner,
             )
         val clockStyleList =
             view.requireViewById<RecyclerView>(R.id.clock_style_list).apply {
                 initStyleList(appContext, clockStyleAdapter)
             }
+        ColorUpdateBinder.bind(
+            setColor = { color ->
+                clockStyleContent
+                    .requireViewById<TextView>(R.id.clock_style_clock_size_title)
+                    .setTextColor(color)
+            },
+            color = colorUpdateViewModel.colorOnSurface,
+            shouldAnimate = isClockStyleActive,
+            lifecycleOwner = lifecycleOwner,
+        )
+        ColorUpdateBinder.bind(
+            setColor = { color ->
+                clockStyleContent
+                    .requireViewById<TextView>(R.id.clock_style_clock_size_description)
+                    .setTextColor(color)
+            },
+            color = colorUpdateViewModel.colorOnSurfaceVariant,
+            shouldAnimate = isClockStyleActive,
+            lifecycleOwner = lifecycleOwner,
+        )
 
         // Clock font editor
         val clockFontContent =
@@ -144,6 +170,28 @@
         clockFontToolbar.requireViewById<View>(R.id.clock_font_apply).setOnClickListener {
             viewModel.confirmFontAxes()
         }
+        val isClockFontActive = {
+            isFloatingSheetActive() && viewModel.selectedTab.value == Tab.FONT
+        }
+        ColorUpdateBinder.bind(
+            setColor = { color ->
+                clockFontContent
+                    .requireViewById<TextView>(R.id.clock_axis_slider_name1)
+                    .setTextColor(color)
+                clockFontContent
+                    .requireViewById<TextView>(R.id.clock_axis_slider_name2)
+                    .setTextColor(color)
+                clockFontContent
+                    .requireViewById<TextView>(R.id.clock_axis_switch_name1)
+                    .setTextColor(color)
+                clockFontContent
+                    .requireViewById<TextView>(R.id.clock_axis_switch_name2)
+                    .setTextColor(color)
+            },
+            color = colorUpdateViewModel.colorOnSurface,
+            shouldAnimate = isClockFontActive,
+            lifecycleOwner = lifecycleOwner,
+        )
 
         // Clock color
         val clockColorContent = view.requireViewById<View>(R.id.clock_floating_sheet_color_content)
@@ -171,10 +219,29 @@
                 }
             }
         }
-
-        // Clock size switch
-        val clockSizeSwitch =
-            view.requireViewById<MaterialSwitch>(R.id.clock_style_clock_size_switch)
+        val isClockColorActive = {
+            isFloatingSheetActive() && viewModel.selectedTab.value == Tab.COLOR
+        }
+        ColorUpdateBinder.bind(
+            setColor = { color ->
+                clockColorContent
+                    .requireViewById<TextView>(R.id.clock_color_title)
+                    .setTextColor(color)
+            },
+            color = colorUpdateViewModel.colorOnSurface,
+            shouldAnimate = isClockColorActive,
+            lifecycleOwner = lifecycleOwner,
+        )
+        ColorUpdateBinder.bind(
+            setColor = { color ->
+                clockColorContent
+                    .requireViewById<TextView>(R.id.clock_color_description)
+                    .setTextColor(color)
+            },
+            color = colorUpdateViewModel.colorOnSurfaceVariant,
+            shouldAnimate = isClockColorActive,
+            lifecycleOwner = lifecycleOwner,
+        )
 
         clockStyleContent.viewTreeObserver.addOnGlobalLayoutListener(
             object : OnGlobalLayoutListener {
@@ -341,7 +408,7 @@
                                         ClockSize.SMALL -> false
                                     },
                                 colorUpdateViewModel = colorUpdateViewModel,
-                                shouldAnimateColor = isFloatingSheetActive,
+                                shouldAnimateColor = isClockStyleActive,
                                 lifecycleOwner = lifecycleOwner,
                             )
                     }
@@ -361,7 +428,7 @@
             clockFontContent = clockFontContent,
             viewModel = viewModel,
             colorUpdateViewModel = colorUpdateViewModel,
-            shouldAnimateColor = isFloatingSheetActive,
+            shouldAnimateColor = isClockFontActive,
             lifecycleOwner = lifecycleOwner,
         )
     }
diff --git a/src/com/android/wallpaper/customization/ui/binder/ColorsFloatingSheetBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ColorsFloatingSheetBinder.kt
index 4c6a3e9..bac650f 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ColorsFloatingSheetBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ColorsFloatingSheetBinder.kt
@@ -55,6 +55,16 @@
         val viewModel = optionsViewModel.colorPickerViewModel2
         val isFloatingSheetActive = { optionsViewModel.selectedOption.value == COLORS }
 
+        ColorUpdateBinder.bind(
+            setColor = { color ->
+                view.requireViewById<TextView>(R.id.color_type_tab_subhead).setTextColor(color)
+                view.requireViewById<TextView>(R.id.dark_mode_toggle_title).setTextColor(color)
+            },
+            color = colorUpdateViewModel.colorOnSurface,
+            shouldAnimate = isFloatingSheetActive,
+            lifecycleOwner = lifecycleOwner,
+        )
+
         val tabs = view.requireViewById<FloatingToolbar>(R.id.floating_toolbar)
         val tabContainer =
             tabs.findViewById<ViewGroup>(com.android.wallpaper.R.id.floating_toolbar_tab_container)
