diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountNavigation.kt
index 7b51eb93b..c320dd95d 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/createaccount/CreateAccountNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.auth.feature.createaccount
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
 
 private const val CREATE_ACCOUNT_ROUTE = "create_account"
 
@@ -22,12 +21,8 @@ fun NavGraphBuilder.createAccountDestination(
     onNavigateBack: () -> Unit,
     onNavigateToLogin: (emailAddress: String, captchaToken: String) -> Unit,
 ) {
-    composable(
+    composableWithSlideTransitions(
         route = CREATE_ACCOUNT_ROUTE,
-        enterTransition = TransitionProviders.Enter.slideUp,
-        exitTransition = TransitionProviders.Exit.slideDown,
-        popEnterTransition = TransitionProviders.Enter.slideUp,
-        popExitTransition = TransitionProviders.Exit.slideDown,
     ) {
         CreateAccountScreen(
             onNavigateBack = onNavigateBack,
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnNavigation.kt
index cdb07660e..04bbe1cd9 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/enterprisesignon/EnterpriseSignOnNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.auth.feature.enterprisesignon
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
 
 private const val ENTERPRISE_SIGN_ON_ROUTE = "enterprise_sign_on"
 
@@ -21,12 +20,8 @@ fun NavController.navigateToEnterpriseSignOn(navOptions: NavOptions? = null) {
 fun NavGraphBuilder.enterpriseSignOnDestination(
     onNavigateBack: () -> Unit,
 ) {
-    composable(
+    composableWithSlideTransitions(
         route = ENTERPRISE_SIGN_ON_ROUTE,
-        enterTransition = TransitionProviders.Enter.slideUp,
-        exitTransition = TransitionProviders.Exit.stay,
-        popEnterTransition = TransitionProviders.Enter.stay,
-        popExitTransition = TransitionProviders.Exit.slideDown,
     ) {
         EnterpriseSignOnScreen(
             onNavigateBack = onNavigateBack,
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentNavigation.kt
index 61db3e473..abd0e27fa 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.auth.feature.environment
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
 
 private const val ENVIRONMENT_ROUTE = "environment"
 
@@ -14,12 +13,8 @@ private const val ENVIRONMENT_ROUTE = "environment"
 fun NavGraphBuilder.environmentDestination(
     onNavigateBack: () -> Unit,
 ) {
-    composable(
+    composableWithSlideTransitions(
         route = ENVIRONMENT_ROUTE,
-        enterTransition = TransitionProviders.Enter.slideUp,
-        exitTransition = TransitionProviders.Exit.slideDown,
-        popEnterTransition = TransitionProviders.Enter.slideUp,
-        popExitTransition = TransitionProviders.Exit.slideDown,
     ) {
         EnvironmentScreen(onNavigateBack = onNavigateBack)
     }
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingNavigation.kt
index c02ebfb5a..342a3445f 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/landing/LandingNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.auth.feature.landing
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithStayTransitions
 
 const val LANDING_ROUTE: String = "landing"
 
@@ -23,12 +22,8 @@ fun NavGraphBuilder.landingDestination(
     onNavigateToLogin: (emailAddress: String) -> Unit,
     onNavigateToEnvironment: () -> Unit,
 ) {
-    composable(
+    composableWithStayTransitions(
         route = LANDING_ROUTE,
-        enterTransition = TransitionProviders.Enter.stay,
-        exitTransition = TransitionProviders.Exit.stay,
-        popEnterTransition = TransitionProviders.Enter.stay,
-        popExitTransition = TransitionProviders.Exit.stay,
     ) {
         LandingScreen(
             onNavigateToCreateAccount = onNavigateToCreateAccount,
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/login/LoginNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/login/LoginNavigation.kt
index c982a6734..18d80b3e5 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/login/LoginNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/login/LoginNavigation.kt
@@ -5,10 +5,9 @@ import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
 import androidx.navigation.NavType
-import androidx.navigation.compose.composable
 import androidx.navigation.navArgument
 import com.x8bit.bitwarden.data.platform.annotation.OmitFromCoverage
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
 
 private const val EMAIL_ADDRESS: String = "email_address"
 private const val CAPTCHA_TOKEN = "captcha_token"
@@ -47,7 +46,7 @@ fun NavGraphBuilder.loginDestination(
     onNavigateToEnterpriseSignOn: () -> Unit,
     onNavigateToLoginWithDevice: () -> Unit,
 ) {
-    composable(
+    composableWithSlideTransitions(
         route = LOGIN_ROUTE,
         arguments = listOf(
             navArgument(EMAIL_ADDRESS) { type = NavType.StringType },
@@ -56,10 +55,6 @@ fun NavGraphBuilder.loginDestination(
                 nullable = true
             },
         ),
-        enterTransition = TransitionProviders.Enter.slideUp,
-        exitTransition = TransitionProviders.Exit.stay,
-        popEnterTransition = TransitionProviders.Enter.stay,
-        popExitTransition = TransitionProviders.Exit.slideDown,
     ) {
         LoginScreen(
             onNavigateBack = onNavigateBack,
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceNavigation.kt
index bc1d9cf48..75ba42f58 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.auth.feature.loginwithdevice
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
 
 private const val LOGIN_WITH_DEVICE_ROUTE = "login_with_device"
 
@@ -21,12 +20,8 @@ fun NavController.navigateToLoginWithDevice(navOptions: NavOptions? = null) {
 fun NavGraphBuilder.loginWithDeviceDestination(
     onNavigateBack: () -> Unit,
 ) {
-    composable(
+    composableWithSlideTransitions(
         route = LOGIN_WITH_DEVICE_ROUTE,
-        enterTransition = TransitionProviders.Enter.slideUp,
-        exitTransition = TransitionProviders.Exit.stay,
-        popEnterTransition = TransitionProviders.Enter.stay,
-        popExitTransition = TransitionProviders.Exit.slideDown,
     ) {
         LoginWithDeviceScreen(
             onNavigateBack = onNavigateBack,
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockNavigation.kt
index 22a5e0bd7..03bdfa951 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/auth/feature/vaultunlock/VaultUnlockNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.auth.feature.vaultunlock
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
 
 const val VAULT_UNLOCK_ROUTE: String = "vault_unlock"
 
@@ -21,12 +20,8 @@ fun NavController.navigateToVaultUnlock(
  * Add the Vault Unlock screen to the nav graph.
  */
 fun NavGraphBuilder.vaultUnlockDestination() {
-    composable(
+    composableWithSlideTransitions(
         route = VAULT_UNLOCK_ROUTE,
-        enterTransition = TransitionProviders.Enter.slideUp,
-        exitTransition = TransitionProviders.Exit.slideDown,
-        popEnterTransition = TransitionProviders.Enter.slideUp,
-        popExitTransition = TransitionProviders.Exit.slideDown,
     ) {
         VaultUnlockScreen()
     }
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/base/util/NavGraphBuilderExtensions.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/base/util/NavGraphBuilderExtensions.kt
new file mode 100644
index 000000000..61513df9e
--- /dev/null
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/base/util/NavGraphBuilderExtensions.kt
@@ -0,0 +1,103 @@
+package com.x8bit.bitwarden.ui.platform.base.util
+
+import androidx.compose.animation.AnimatedContentScope
+import androidx.compose.runtime.Composable
+import androidx.navigation.NamedNavArgument
+import androidx.navigation.NavBackStackEntry
+import androidx.navigation.NavDeepLink
+import androidx.navigation.NavGraphBuilder
+import androidx.navigation.compose.composable
+import com.x8bit.bitwarden.data.platform.annotation.OmitFromCoverage
+import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+
+/**
+ * A wrapper around [NavGraphBuilder.composable] that supplies slide up/down transitions.
+ */
+@OmitFromCoverage
+fun NavGraphBuilder.composableWithSlideTransitions(
+    route: String,
+    arguments: List<NamedNavArgument> = emptyList(),
+    deepLinks: List<NavDeepLink> = emptyList(),
+    content: @Composable AnimatedContentScope.(NavBackStackEntry) -> Unit,
+) {
+    this.composable(
+        route = route,
+        arguments = arguments,
+        deepLinks = deepLinks,
+        enterTransition = TransitionProviders.Enter.slideUp,
+        exitTransition = TransitionProviders.Exit.stay,
+        popEnterTransition = TransitionProviders.Enter.stay,
+        popExitTransition = TransitionProviders.Exit.slideDown,
+        content = content,
+    )
+}
+
+/**
+ * A wrapper around [NavGraphBuilder.composable] that supplies "stay" transitions.
+ */
+@OmitFromCoverage
+fun NavGraphBuilder.composableWithStayTransitions(
+    route: String,
+    arguments: List<NamedNavArgument> = emptyList(),
+    deepLinks: List<NavDeepLink> = emptyList(),
+    content: @Composable AnimatedContentScope.(NavBackStackEntry) -> Unit,
+) {
+    this.composable(
+        route = route,
+        arguments = arguments,
+        deepLinks = deepLinks,
+        enterTransition = TransitionProviders.Enter.stay,
+        exitTransition = TransitionProviders.Exit.stay,
+        popEnterTransition = TransitionProviders.Enter.stay,
+        popExitTransition = TransitionProviders.Exit.stay,
+        content = content,
+    )
+}
+
+/**
+ * A wrapper around [NavGraphBuilder.composable] that supplies push transitions.
+ *
+ * This is suitable for screens deeper within a hierarchy that uses push transitions; the root
+ * screen of such a hierarchy should use [composableWithRootPushTransitions].
+ */
+@OmitFromCoverage
+fun NavGraphBuilder.composableWithPushTransitions(
+    route: String,
+    arguments: List<NamedNavArgument> = emptyList(),
+    deepLinks: List<NavDeepLink> = emptyList(),
+    content: @Composable AnimatedContentScope.(NavBackStackEntry) -> Unit,
+) {
+    this.composable(
+        route = route,
+        arguments = arguments,
+        deepLinks = deepLinks,
+        enterTransition = TransitionProviders.Enter.pushLeft,
+        exitTransition = TransitionProviders.Exit.pushLeft,
+        popEnterTransition = TransitionProviders.Enter.pushLeft,
+        popExitTransition = TransitionProviders.Exit.pushRight,
+        content = content,
+    )
+}
+
+/**
+ * A wrapper around [NavGraphBuilder.composable] that supplies push transitions to the root screen
+ * in a nested graph that uses push transitions.
+ */
+@OmitFromCoverage
+fun NavGraphBuilder.composableWithRootPushTransitions(
+    route: String,
+    arguments: List<NamedNavArgument> = emptyList(),
+    deepLinks: List<NavDeepLink> = emptyList(),
+    content: @Composable AnimatedContentScope.(NavBackStackEntry) -> Unit,
+) {
+    this.composable(
+        route = route,
+        arguments = arguments,
+        deepLinks = deepLinks,
+        enterTransition = TransitionProviders.Enter.stay,
+        exitTransition = TransitionProviders.Exit.pushLeft,
+        popEnterTransition = TransitionProviders.Enter.pushRight,
+        popExitTransition = TransitionProviders.Exit.fadeOut,
+        content = content,
+    )
+}
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsNavigation.kt
index 0b31bc1f8..bb22a564c 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/SettingsNavigation.kt
@@ -3,8 +3,8 @@ package com.x8bit.bitwarden.ui.platform.feature.settings
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
 import androidx.navigation.navigation
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithRootPushTransitions
 import com.x8bit.bitwarden.ui.platform.feature.settings.about.aboutDestination
 import com.x8bit.bitwarden.ui.platform.feature.settings.about.navigateToAbout
 import com.x8bit.bitwarden.ui.platform.feature.settings.accountsecurity.accountSecurityDestination
@@ -17,7 +17,6 @@ import com.x8bit.bitwarden.ui.platform.feature.settings.other.navigateToOther
 import com.x8bit.bitwarden.ui.platform.feature.settings.other.otherDestination
 import com.x8bit.bitwarden.ui.platform.feature.settings.vault.navigateToVaultSettings
 import com.x8bit.bitwarden.ui.platform.feature.settings.vault.vaultSettingsDestination
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
 
 const val SETTINGS_GRAPH_ROUTE: String = "settings_graph"
 private const val SETTINGS_ROUTE: String = "settings"
@@ -33,12 +32,8 @@ fun NavGraphBuilder.settingsGraph(
         startDestination = SETTINGS_ROUTE,
         route = SETTINGS_GRAPH_ROUTE,
     ) {
-        composable(
+        composableWithRootPushTransitions(
             route = SETTINGS_ROUTE,
-            enterTransition = TransitionProviders.Enter.stay,
-            exitTransition = TransitionProviders.Exit.pushLeft,
-            popEnterTransition = TransitionProviders.Enter.pushRight,
-            popExitTransition = TransitionProviders.Exit.fadeOut,
         ) {
             SettingsScreen(
                 onNavigateToAbout = { navController.navigateToAbout() },
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutNavigation.kt
index 48ba740de..8c4769303 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/about/AboutNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.about
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithPushTransitions
 
 private const val ABOUT_ROUTE = "settings_about"
 
@@ -14,12 +13,8 @@ private const val ABOUT_ROUTE = "settings_about"
 fun NavGraphBuilder.aboutDestination(
     onNavigateBack: () -> Unit,
 ) {
-    composable(
+    composableWithPushTransitions(
         route = ABOUT_ROUTE,
-        enterTransition = TransitionProviders.Enter.pushLeft,
-        exitTransition = TransitionProviders.Exit.pushLeft,
-        popEnterTransition = TransitionProviders.Enter.pushLeft,
-        popExitTransition = TransitionProviders.Exit.pushRight,
     ) {
         AboutScreen(onNavigateBack = onNavigateBack)
     }
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityNavigation.kt
index 31533bdac..6b496aae4 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/AccountSecurityNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.accountsecurity
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithPushTransitions
 
 private const val ACCOUNT_SECURITY_ROUTE = "settings_account_security"
 
@@ -15,12 +14,8 @@ fun NavGraphBuilder.accountSecurityDestination(
     onNavigateBack: () -> Unit,
     onNavigateToDeleteAccount: () -> Unit,
 ) {
-    composable(
+    composableWithPushTransitions(
         route = ACCOUNT_SECURITY_ROUTE,
-        enterTransition = TransitionProviders.Enter.pushLeft,
-        exitTransition = TransitionProviders.Exit.pushLeft,
-        popEnterTransition = TransitionProviders.Enter.pushLeft,
-        popExitTransition = TransitionProviders.Exit.pushRight,
     ) {
         AccountSecurityScreen(
             onNavigateBack = onNavigateBack,
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/deleteaccount/DeleteAccountNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/deleteaccount/DeleteAccountNavigation.kt
index 0328d151a..2cd81f880 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/deleteaccount/DeleteAccountNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/deleteaccount/DeleteAccountNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.accountsecurity.deletea
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
 
 private const val DELETE_ACCOUNT_ROUTE = "delete_account"
 
@@ -14,12 +13,8 @@ private const val DELETE_ACCOUNT_ROUTE = "delete_account"
 fun NavGraphBuilder.deleteAccountDestination(
     onNavigateBack: () -> Unit,
 ) {
-    composable(
+    composableWithSlideTransitions(
         route = DELETE_ACCOUNT_ROUTE,
-        enterTransition = TransitionProviders.Enter.slideUp,
-        exitTransition = TransitionProviders.Exit.slideDown,
-        popEnterTransition = TransitionProviders.Enter.slideUp,
-        popExitTransition = TransitionProviders.Exit.slideDown,
     ) {
         DeleteAccountScreen(onNavigateBack = onNavigateBack)
     }
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceNavigation.kt
index d01ca794d..0681d4ead 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/appearance/AppearanceNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.appearance
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithPushTransitions
 
 private const val APPEARANCE_ROUTE = "settings_appearance"
 
@@ -14,12 +13,8 @@ private const val APPEARANCE_ROUTE = "settings_appearance"
 fun NavGraphBuilder.appearanceDestination(
     onNavigateBack: () -> Unit,
 ) {
-    composable(
+    composableWithPushTransitions(
         route = APPEARANCE_ROUTE,
-        enterTransition = TransitionProviders.Enter.pushLeft,
-        exitTransition = TransitionProviders.Exit.pushLeft,
-        popEnterTransition = TransitionProviders.Enter.pushLeft,
-        popExitTransition = TransitionProviders.Exit.pushRight,
     ) {
         AppearanceScreen(onNavigateBack = onNavigateBack)
     }
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillNavigation.kt
index 5f1f05bb6..b64e41e44 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/autofill/AutoFillNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.autofill
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithPushTransitions
 
 private const val AUTO_FILL_ROUTE = "settings_auto_fill"
 
@@ -14,12 +13,8 @@ private const val AUTO_FILL_ROUTE = "settings_auto_fill"
 fun NavGraphBuilder.autoFillDestination(
     onNavigateBack: () -> Unit,
 ) {
-    composable(
+    composableWithPushTransitions(
         route = AUTO_FILL_ROUTE,
-        enterTransition = TransitionProviders.Enter.pushLeft,
-        exitTransition = TransitionProviders.Exit.pushLeft,
-        popEnterTransition = TransitionProviders.Enter.pushLeft,
-        popExitTransition = TransitionProviders.Exit.pushRight,
     ) {
         AutoFillScreen(onNavigateBack = onNavigateBack)
     }
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/other/OtherNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/other/OtherNavigation.kt
index 7fa24dcf5..04730ae3d 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/other/OtherNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/other/OtherNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.other
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithPushTransitions
 
 private const val OTHER_ROUTE = "settings_other"
 
@@ -14,12 +13,8 @@ private const val OTHER_ROUTE = "settings_other"
 fun NavGraphBuilder.otherDestination(
     onNavigateBack: () -> Unit,
 ) {
-    composable(
+    composableWithPushTransitions(
         route = OTHER_ROUTE,
-        enterTransition = TransitionProviders.Enter.pushLeft,
-        exitTransition = TransitionProviders.Exit.pushLeft,
-        popEnterTransition = TransitionProviders.Enter.pushLeft,
-        popExitTransition = TransitionProviders.Exit.pushRight,
     ) {
         OtherScreen(onNavigateBack = onNavigateBack)
     }
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsNavigation.kt
index 97feb7728..c8b37b128 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.platform.feature.settings.vault
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithPushTransitions
 
 private const val VAULT_SETTINGS_ROUTE = "vault_settings"
 
@@ -14,12 +13,8 @@ private const val VAULT_SETTINGS_ROUTE = "vault_settings"
 fun NavGraphBuilder.vaultSettingsDestination(
     onNavigateBack: () -> Unit,
 ) {
-    composable(
+    composableWithPushTransitions(
         route = VAULT_SETTINGS_ROUTE,
-        enterTransition = TransitionProviders.Enter.pushLeft,
-        exitTransition = TransitionProviders.Exit.pushLeft,
-        popEnterTransition = TransitionProviders.Enter.pushLeft,
-        popExitTransition = TransitionProviders.Exit.pushRight,
     ) {
         VaultSettingsScreen(onNavigateBack = onNavigateBack)
     }
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/VaultUnlockedNavBarNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/VaultUnlockedNavBarNavigation.kt
index c42c79263..72af0172e 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/VaultUnlockedNavBarNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/platform/feature/vaultunlockednavbar/VaultUnlockedNavBarNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.platform.feature.vaultunlockednavbar
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithStayTransitions
 
 /**
  * The functions below pertain to entry into the [VaultUnlockedNavBarScreen].
@@ -30,12 +29,8 @@ fun NavGraphBuilder.vaultUnlockedNavBarDestination(
     onNavigateToDeleteAccount: () -> Unit,
     onNavigateToPasswordHistory: () -> Unit,
 ) {
-    composable(
+    composableWithStayTransitions(
         route = VAULT_UNLOCKED_NAV_BAR_ROUTE,
-        enterTransition = TransitionProviders.Enter.stay,
-        exitTransition = TransitionProviders.Exit.stay,
-        popEnterTransition = TransitionProviders.Enter.stay,
-        popExitTransition = TransitionProviders.Exit.stay,
     ) {
         VaultUnlockedNavBarScreen(
             onNavigateToVaultAddItem = onNavigateToVaultAddItem,
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryNavigation.kt
index 9c62afa20..5aad8a7c7 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/generator/passwordhistory/PasswordHistoryNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.tools.feature.generator.passwordhistory
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
 
 /**
  * The functions below pertain to entry into the [PasswordHistoryScreen].
@@ -17,13 +16,9 @@ private const val PASSWORD_HISTORY_ROUTE: String = "password_history"
 fun NavGraphBuilder.passwordHistoryDestination(
     onNavigateBack: () -> Unit,
 ) {
-    composable(
+    composableWithSlideTransitions(
         // TODO: (BIT-617) Allow Password History screen to launch from VaultItemScreen
         route = PASSWORD_HISTORY_ROUTE,
-        enterTransition = TransitionProviders.Enter.slideUp,
-        exitTransition = TransitionProviders.Exit.slideDown,
-        popEnterTransition = TransitionProviders.Enter.slideUp,
-        popExitTransition = TransitionProviders.Exit.slideDown,
     ) {
         PasswordHistoryScreen(
             onNavigateBack = onNavigateBack,
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/NewSendNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/NewSendNavigation.kt
index e558cd79e..799bfac5a 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/NewSendNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/NewSendNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.tools.feature.send
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
 
 private const val NEW_SEND_ROUTE = "new_send"
 
@@ -14,12 +13,8 @@ private const val NEW_SEND_ROUTE = "new_send"
 fun NavGraphBuilder.newSendDestination(
     onNavigateBack: () -> Unit,
 ) {
-    composable(
+    composableWithSlideTransitions(
         route = NEW_SEND_ROUTE,
-        enterTransition = TransitionProviders.Enter.slideUp,
-        exitTransition = TransitionProviders.Exit.slideDown,
-        popEnterTransition = TransitionProviders.Enter.slideUp,
-        popExitTransition = TransitionProviders.Exit.slideDown,
     ) {
         NewSendScreen(onNavigateBack = onNavigateBack)
     }
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/SendNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/SendNavigation.kt
index bbeb31481..738e11b0f 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/SendNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/tools/feature/send/SendNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.tools.feature.send
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithRootPushTransitions
 
 const val SEND_ROUTE: String = "send"
 
@@ -14,12 +13,8 @@ const val SEND_ROUTE: String = "send"
 fun NavGraphBuilder.sendDestination(
     onNavigateToNewSend: () -> Unit,
 ) {
-    composable(
+    composableWithRootPushTransitions(
         route = SEND_ROUTE,
-        enterTransition = TransitionProviders.Enter.stay,
-        exitTransition = TransitionProviders.Exit.pushLeft,
-        popEnterTransition = TransitionProviders.Enter.pushRight,
-        popExitTransition = TransitionProviders.Exit.fadeOut,
     ) {
         SendScreen(
             onNavigateNewSend = onNavigateToNewSend,
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/additem/VaultAddEditItemNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/additem/VaultAddEditItemNavigation.kt
index 7a0c19daf..22a90f6d0 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/additem/VaultAddEditItemNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/additem/VaultAddEditItemNavigation.kt
@@ -5,9 +5,8 @@ import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
 import androidx.navigation.NavType
-import androidx.navigation.compose.composable
 import androidx.navigation.navArgument
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
 import com.x8bit.bitwarden.ui.vault.model.VaultAddEditType
 
 private const val ADD_TYPE: String = "add"
@@ -41,15 +40,11 @@ class VaultAddEditItemArgs(
 fun NavGraphBuilder.vaultAddEditItemDestination(
     onNavigateBack: () -> Unit,
 ) {
-    composable(
+    composableWithSlideTransitions(
         route = ADD_EDIT_ITEM_ROUTE,
         arguments = listOf(
             navArgument(ADD_EDIT_ITEM_TYPE) { type = NavType.StringType },
         ),
-        enterTransition = TransitionProviders.Enter.slideUp,
-        exitTransition = TransitionProviders.Exit.slideDown,
-        popEnterTransition = TransitionProviders.Enter.slideUp,
-        popExitTransition = TransitionProviders.Exit.slideDown,
     ) {
         VaultAddItemScreen(onNavigateBack)
     }
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemNavigation.kt
index 8e8ff3a3e..151de64b6 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemNavigation.kt
@@ -5,10 +5,9 @@ import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
 import androidx.navigation.NavType
-import androidx.navigation.compose.composable
 import androidx.navigation.navArgument
 import com.x8bit.bitwarden.data.platform.annotation.OmitFromCoverage
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
 
 private const val VAULT_ITEM_PREFIX = "vault_item"
 private const val VAULT_ITEM_ID = "vault_item_id"
@@ -31,15 +30,11 @@ fun NavGraphBuilder.vaultItemDestination(
     onNavigateBack: () -> Unit,
     onNavigateToVaultEditItem: (vaultItemId: String) -> Unit,
 ) {
-    composable(
+    composableWithSlideTransitions(
         route = VAULT_ITEM_ROUTE,
         arguments = listOf(
             navArgument(VAULT_ITEM_ID) { type = NavType.StringType },
         ),
-        enterTransition = TransitionProviders.Enter.slideUp,
-        exitTransition = TransitionProviders.Exit.stay,
-        popEnterTransition = TransitionProviders.Enter.stay,
-        popExitTransition = TransitionProviders.Exit.slideDown,
     ) {
         VaultItemScreen(
             onNavigateBack = onNavigateBack,
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingNavigation.kt
index 51fa7e2ce..9e7d9f26c 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingNavigation.kt
@@ -5,9 +5,8 @@ import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
 import androidx.navigation.NavType
-import androidx.navigation.compose.composable
 import androidx.navigation.navArgument
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithPushTransitions
 import com.x8bit.bitwarden.ui.vault.model.VaultItemListingType
 
 private const val CARD: String = "card"
@@ -48,7 +47,7 @@ fun NavGraphBuilder.vaultItemListingDestination(
     onNavigateToVaultItemScreen: (id: String) -> Unit,
     onNavigateToVaultAddItemScreen: () -> Unit,
 ) {
-    composable(
+    composableWithPushTransitions(
         route = VAULT_ITEM_LISTING_ROUTE,
         arguments = listOf(
             navArgument(
@@ -63,10 +62,6 @@ fun NavGraphBuilder.vaultItemListingDestination(
                 },
             ),
         ),
-        enterTransition = TransitionProviders.Enter.pushLeft,
-        exitTransition = TransitionProviders.Exit.pushLeft,
-        popEnterTransition = TransitionProviders.Enter.pushLeft,
-        popExitTransition = TransitionProviders.Exit.pushRight,
     ) {
         VaultItemListingScreen(
             onNavigateBack = onNavigateBack,
diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultNavigation.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultNavigation.kt
index 3d27a6fff..378f6d31a 100644
--- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultNavigation.kt
+++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultNavigation.kt
@@ -3,8 +3,7 @@ package com.x8bit.bitwarden.ui.vault.feature.vault
 import androidx.navigation.NavController
 import androidx.navigation.NavGraphBuilder
 import androidx.navigation.NavOptions
-import androidx.navigation.compose.composable
-import com.x8bit.bitwarden.ui.platform.theme.TransitionProviders
+import com.x8bit.bitwarden.ui.platform.base.util.composableWithRootPushTransitions
 import com.x8bit.bitwarden.ui.vault.model.VaultItemListingType
 
 const val VAULT_ROUTE: String = "vault"
@@ -19,12 +18,8 @@ fun NavGraphBuilder.vaultDestination(
     onNavigateToVaultItemListingScreen: (vaultItemType: VaultItemListingType) -> Unit,
     onDimBottomNavBarRequest: (shouldDim: Boolean) -> Unit,
 ) {
-    composable(
+    composableWithRootPushTransitions(
         route = VAULT_ROUTE,
-        enterTransition = TransitionProviders.Enter.stay,
-        exitTransition = TransitionProviders.Exit.pushLeft,
-        popEnterTransition = TransitionProviders.Enter.pushRight,
-        popExitTransition = TransitionProviders.Exit.fadeOut,
     ) {
         VaultScreen(
             onNavigateToVaultAddItemScreen = onNavigateToVaultAddItemScreen,