 // MARK: Write in an impartial tone
 
 final fileprivate class ImpartialToneDataSource: WelcomeContainerViewControllerDataSource {
-    lazy var foregroundAnimationView: WelcomeAnimationView = {
-        return WelcomeAnimationView(staticImage: UIImage(named: "editing-welcome-scale")!)
-    }()
-
-    lazy var backgroundAnimationView: WelcomeAnimationView? = {
-        return nil
+    private let scaleBarAnimatedImageView = WelcomeAnimatedImageView(imageName: "editing-welcome/impartial-tone/bar", origin: CGPoint(x: 73, y: 50), insertBelow: false, initialAlpha: 1)
+    private let scaleArticleAnimatedImageView = WelcomeAnimatedImageView(imageName: "editing-welcome/impartial-tone/article", origin: CGPoint(x: 238, y: 61.5), initialAlpha: 1)
+    private let scaleSaturnAnimatedImageView = WelcomeAnimatedImageView(imageName: "editing-welcome/impartial-tone/saturn", origin: CGPoint(x: 40, y: 61.5), initialAlpha: 1)
+    private let plusesAnimatedImageView = WelcomeAnimatedImageView(imageName: "editing-welcome/impartial-tone/pluses")
+
+    lazy var animationView: WelcomeAnimationView = {
+        return WelcomeAnimationView(staticImageNamed: "editing-welcome/impartial-tone/stem", animatedImageViews: [scaleBarAnimatedImageView, scaleArticleAnimatedImageView, scaleSaturnAnimatedImageView, plusesAnimatedImageView], propertyAnimator: propertyAnimator)
+    }()
+
+    private lazy var propertyAnimator: UIViewPropertyAnimator = {
+        let scalePropertyAnimator = UIViewPropertyAnimator(duration: 2.6, curve: .linear)
+
+        scalePropertyAnimator.addAnimations {
+            self.scaleBarAnimatedImageView.transform = CGAffineTransform(rotationAngle: 15 * (.pi / 180))
+            let scaleSaturnTranslationY = 0 - self.scaleBarAnimatedImageView.bounds.height * self.scaleBarAnimatedImageView.transform.a
+            let scaleArticleTranslationY = self.scaleBarAnimatedImageView.bounds.height * self.scaleBarAnimatedImageView.transform.a
+            self.scaleSaturnAnimatedImageView.transform = CGAffineTransform(translationX: 0, y: scaleSaturnTranslationY)
+            self.scaleArticleAnimatedImageView.transform = CGAffineTransform(translationX: 0, y: scaleArticleTranslationY)
+        }
+
+        scalePropertyAnimator.addAnimations({
+            self.scaleBarAnimatedImageView.transform = CGAffineTransform.identity
+            self.scaleSaturnAnimatedImageView.transform = CGAffineTransform.identity
+            self.scaleArticleAnimatedImageView.transform = CGAffineTransform.identity
+        }, delayFactor: 0.7)
+
+        scalePropertyAnimator.addAnimations({
+            self.plusesAnimatedImageView.alpha = 1
+        }, delayFactor: 2.0)
+
+        return scalePropertyAnimator
     }()
 
     lazy var panelViewController: WelcomePanelViewController = {

// MARK: Be bold

final fileprivate class BeBoldDataSource: WelcomeContainerViewControllerDataSource {
    lazy var foregroundAnimationView: WelcomeAnimationView = {
        return WelcomeAnimationView(staticImage: UIImage(named: "editing-welcome-article")!)
    }()

    lazy var backgroundAnimationView: WelcomeAnimationView? = {
        return nil
    }()

    lazy var panelViewController: WelcomePanelViewController = {

// MARK: Set knowledge free

final fileprivate class SetKnowledgeFreeDataSource: WelcomeContainerViewControllerDataSource {
    private let plusesAnimatedImageView = WelcomeAnimatedImageView(imageName: "editing-welcome/set-knowledge-free/pluses")

    private lazy var articleAnimatedImageViews: [WelcomeAnimatedImageView] = {
        let namePrefix = "editing-welcome/set-knowledge-free/article-"
        let origin = CGPoint(x: 153, y: 85)
        return [
            WelcomeAnimatedImageView(imageName: "\(namePrefix)16", origin: origin, destination: CGPoint(x: 200, y: 118)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)16", origin: origin, destination: CGPoint(x: 104, y: 25)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)16", origin: origin, destination: CGPoint(x: 111, y: 144)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)16", origin: origin, destination: CGPoint(x: 122, y: 93)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)14", origin: origin, destination: CGPoint(x: 156, y: 62)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)16", origin: origin, destination: CGPoint(x: 139, y: 55)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)16", origin: origin, destination: CGPoint(x: 176, y: 26)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)16", origin: origin, destination: CGPoint(x: 225, y: 24)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)15", origin: origin, destination: CGPoint(x: 213, y: 30)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)11", origin: origin, destination: CGPoint(x: 167, y: 119)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)16", origin: origin, destination: CGPoint(x: 136, y: 167)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)14", origin: origin, destination: CGPoint(x: 163, y: 136)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)14", origin: origin, destination: CGPoint(x: 55, y: 92)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)15", origin: origin, destination: CGPoint(x: 113, y: 113)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)13", origin: origin, destination: CGPoint(x: 51, y: 26)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)2", origin: origin, destination: CGPoint(x: 225, y: 47)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)12", origin: origin, destination: CGPoint(x: 45, y: 67)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)11", origin: origin, destination: CGPoint(x: 93, y: 29)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)13", origin: origin, destination: CGPoint(x: 162, y: 33)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)9", origin: origin, destination: CGPoint(x: 226, y: 31)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)8", origin: origin, destination: CGPoint(x: 81, y: 79)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)11", origin: origin, destination: CGPoint(x: 223, y: 106)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)6", origin: origin, destination: CGPoint(x: 236, y: 85)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)5", origin: origin, destination: CGPoint(x: 108, y: 68)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)4", origin: origin, destination: CGPoint(x: 184, y: 95)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)3", origin: origin, destination: CGPoint(x: 188, y: 51)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)2", origin: origin, destination: CGPoint(x: 154, y: 160)),
            WelcomeAnimatedImageView(imageName: "\(namePrefix)14", origin: origin, destination: CGPoint(x: 76, y: 126))
        ]
    }()

    lazy var animationView: WelcomeAnimationView = {
        let animatedImageViews = articleAnimatedImageViews + [plusesAnimatedImageView]
        return WelcomeAnimationView(staticImageNamed: "editing-welcome/set-knowledge-free/main-article", animatedImageViews: animatedImageViews, propertyAnimator: propertyAnimator)
    }()

    private lazy var propertyAnimator: UIViewPropertyAnimator = {
        let articlePropertyAnimator = UIViewPropertyAnimator(duration: 0.8, curve: .easeInOut)

        articlePropertyAnimator.addAnimations {
            self.articleAnimatedImageViews.forEach { imageView in
                imageView.alpha = 1
                imageView.frame.origin = imageView.normalizedDestination!
            }
        }

        let plusesPropertyAnimator = UIViewPropertyAnimator(duration: 0.5, curve: .linear)

        plusesPropertyAnimator.addAnimations {
            self.plusesAnimatedImageView.alpha = 1
        }

        articlePropertyAnimator.addCompletion { _ in
            plusesPropertyAnimator.startAnimation()
        }

        return articlePropertyAnimator
    }()

    lazy var panelViewController: WelcomePanelViewController = {
