         button.titleEdgeInsets = UIEdgeInsets(top: 0, left: effectiveUserInterfaceLayoutDirection == .leftToRight ? 5 : -5, bottom: 0, right: effectiveUserInterfaceLayoutDirection == .leftToRight ? -5 : 5)
         button.isUserInteractionEnabled = false
         return button
-	}()
-
-	// MARK - UI Elements - Stacks
-
-	lazy var mainVerticalStackView: UIStackView = {
-		let stackView = UIStackView()
-		stackView.translatesAutoresizingMaskIntoConstraints = false
-		stackView.axis = .vertical
-		stackView.distribution = .fill
-		stackView.alignment = .leading
-		return stackView
-	}()
-
-	lazy var internalHorizontalStackView: UIStackView = {
-		let stackView = UIStackView()
-		stackView.translatesAutoresizingMaskIntoConstraints = false
-		stackView.axis = .horizontal
-		stackView.distribution = .fill
-		return stackView
-	}()
-
-	lazy var internalVerticalNotificationContentStack: UIStackView = {
-		let stackView = UIStackView()
-		stackView.translatesAutoresizingMaskIntoConstraints = false
-		stackView.axis = .vertical
-		stackView.distribution = .fill
-		stackView.alignment = .leading
-		return stackView
-	}()
-
-	// MARK: - UI Elements - Containers
-
-	lazy var leadingContainer: UIView = {
-		let view = UIView()
-		view.translatesAutoresizingMaskIntoConstraints = false
-		return view
-	}()
-
-	lazy var projectSourceContainer: UIView = {
-		let view = UIView()
-		view.translatesAutoresizingMaskIntoConstraints = false
-		return view
-	}()
-
-	lazy var headerTextContainer: UIView = {
-		let view = UIView()
-		view.translatesAutoresizingMaskIntoConstraints = false
-		return view
-	}()
-
-	// MARK: - UI Elements - Helpers
-
-	lazy var cellSeparator: UIView = {
-		let view = UIView()
-		view.translatesAutoresizingMaskIntoConstraints = false
-		return view
-	}()
-
-	// MARK: - Lifecycle
-
-	override init(frame: CGRect) {
-		super.init(frame: frame)
-		setup()
-	}
-
-	required init?(coder: NSCoder) {
-		super.init(coder: coder)
-		setup()
-	}
-
-	override func prepareForReuse() {
-		super.prepareForReuse()
-		self.viewModel = nil
-	}
-
-	func setup() {
+    }()
+
+    // MARK - UI Elements - Stacks
+
+    lazy var mainVerticalStackView: UIStackView = {
+        let stackView = UIStackView()
+        stackView.translatesAutoresizingMaskIntoConstraints = false
+        stackView.axis = .vertical
+        stackView.distribution = .fill
+        stackView.alignment = .leading
+        return stackView
+    }()
+
+    lazy var internalHorizontalStackView: UIStackView = {
+        let stackView = UIStackView()
+        stackView.translatesAutoresizingMaskIntoConstraints = false
+        stackView.axis = .horizontal
+        stackView.distribution = .fill
+        return stackView
+    }()
+
+    lazy var internalVerticalNotificationContentStack: UIStackView = {
+        let stackView = UIStackView()
+        stackView.translatesAutoresizingMaskIntoConstraints = false
+        stackView.axis = .vertical
+        stackView.distribution = .fill
+        stackView.alignment = .leading
+        return stackView
+    }()
+
+    // MARK: - UI Elements - Containers
+
+    lazy var leadingContainer: UIView = {
+        let view = UIView()
+        view.translatesAutoresizingMaskIntoConstraints = false
+        return view
+    }()
+
+    lazy var projectSourceContainer: UIView = {
+        let view = UIView()
+        view.translatesAutoresizingMaskIntoConstraints = false
+        return view
+    }()
+
+    lazy var headerTextContainer: UIView = {
+        let view = UIView()
+        view.translatesAutoresizingMaskIntoConstraints = false
+        return view
+    }()
+
+    // MARK: - UI Elements - Helpers
+
+    lazy var cellSeparator: UIView = {
+        let view = UIView()
+        view.translatesAutoresizingMaskIntoConstraints = false
+        return view
+    }()
+
+    // MARK: - Lifecycle
+
+    override init(frame: CGRect) {
+        super.init(frame: frame)
+        setup()
+    }
+
+    required init?(coder: NSCoder) {
+        super.init(coder: coder)
+        setup()
+    }
+
+    override func prepareForReuse() {
+        super.prepareForReuse()
+        self.viewModel = nil
+    }
+
+    func setup() {
         let topMargin: CGFloat = 13
-		let edgeMargin: CGFloat = 11
-
-		selectedBackgroundView = UIView()
-
-		contentView.addSubview(leadingContainer)
-		contentView.addSubview(mainVerticalStackView)
-		contentView.addSubview(cellSeparator)
-
-		leadingContainer.addSubview(leadingImageView)
-
-		headerTextContainer.addSubview(headerLabel)
-		headerTextContainer.addSubview(relativeTimeAgoLabel)
-
-		mainVerticalStackView.addArrangedSubview(headerTextContainer)
-		mainVerticalStackView.addArrangedSubview(internalHorizontalStackView)
-
-		internalHorizontalStackView.addArrangedSubview(internalVerticalNotificationContentStack)
-		internalHorizontalStackView.addArrangedSubview(projectSourceContainer)
-
-		projectSourceContainer.addSubview(projectSourceLabel)
-		projectSourceContainer.addSubview(projectSourceImage)
-
-		internalVerticalNotificationContentStack.addArrangedSubview(VerticalSpacerView.spacerWith(space: 3))
-		internalVerticalNotificationContentStack.addArrangedSubview(subheaderLabel)
-		internalVerticalNotificationContentStack.addArrangedSubview(VerticalSpacerView.spacerWith(space: 3))
-		internalVerticalNotificationContentStack.addArrangedSubview(messageSummaryLabel)
-		internalVerticalNotificationContentStack.addArrangedSubview(VerticalSpacerView.spacerWith(space: 10))
-		internalVerticalNotificationContentStack.addArrangedSubview(metaActionButton)
-		internalVerticalNotificationContentStack.addArrangedSubview(VerticalSpacerView.spacerWith(space: 3))
-
-		// Primary Hierarchy Constraints
-
-		NSLayoutConstraint.activate([
-			leadingContainer.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
+        let edgeMargin: CGFloat = 11
+
+        selectedBackgroundView = UIView()
+
+        contentView.addSubview(leadingContainer)
+        contentView.addSubview(mainVerticalStackView)
+        contentView.addSubview(cellSeparator)
+
+        leadingContainer.addSubview(leadingImageView)
+
+        headerTextContainer.addSubview(headerLabel)
+        headerTextContainer.addSubview(relativeTimeAgoLabel)
+
+        mainVerticalStackView.addArrangedSubview(headerTextContainer)
+        mainVerticalStackView.addArrangedSubview(internalHorizontalStackView)
+
+        internalHorizontalStackView.addArrangedSubview(internalVerticalNotificationContentStack)
+        internalHorizontalStackView.addArrangedSubview(projectSourceContainer)
+
+        projectSourceContainer.addSubview(projectSourceLabel)
+        projectSourceContainer.addSubview(projectSourceImage)
+
+        internalVerticalNotificationContentStack.addArrangedSubview(VerticalSpacerView.spacerWith(space: 3))
+        internalVerticalNotificationContentStack.addArrangedSubview(subheaderLabel)
+        internalVerticalNotificationContentStack.addArrangedSubview(VerticalSpacerView.spacerWith(space: 3))
+        internalVerticalNotificationContentStack.addArrangedSubview(messageSummaryLabel)
+        internalVerticalNotificationContentStack.addArrangedSubview(VerticalSpacerView.spacerWith(space: 10))
+        internalVerticalNotificationContentStack.addArrangedSubview(metaActionButton)
+        internalVerticalNotificationContentStack.addArrangedSubview(VerticalSpacerView.spacerWith(space: 3))
+
+        // Primary Hierarchy Constraints
+
+        NSLayoutConstraint.activate([
+            leadingContainer.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
             leadingContainer.topAnchor.constraint(equalTo: mainVerticalStackView.topAnchor),
-			leadingContainer.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
-			leadingContainer.trailingAnchor.constraint(equalTo: mainVerticalStackView.leadingAnchor),
-
-			mainVerticalStackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: topMargin),
-			mainVerticalStackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -edgeMargin),
-			mainVerticalStackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
-
-			cellSeparator.heightAnchor.constraint(equalToConstant: 0.5),
-			cellSeparator.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
-			cellSeparator.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
-			cellSeparator.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
-		])
-
-		// Leading Image Constraints
-
-		NSLayoutConstraint.activate([
-			leadingImageView.heightAnchor.constraint(equalToConstant: 32),
-			leadingImageView.widthAnchor.constraint(equalToConstant: 32),
-			leadingImageView.leadingAnchor.constraint(equalTo: leadingContainer.leadingAnchor, constant: edgeMargin),
-			leadingImageView.trailingAnchor.constraint(equalTo: leadingContainer.trailingAnchor, constant: -edgeMargin),
+            leadingContainer.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
+            leadingContainer.trailingAnchor.constraint(equalTo: mainVerticalStackView.leadingAnchor),
+
+            mainVerticalStackView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: topMargin),
+            mainVerticalStackView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -edgeMargin),
+            mainVerticalStackView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
+
+            cellSeparator.heightAnchor.constraint(equalToConstant: 0.5),
+            cellSeparator.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
+            cellSeparator.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
+            cellSeparator.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
+        ])
+
+        // Leading Image Constraints
+
+        NSLayoutConstraint.activate([
+            leadingImageView.heightAnchor.constraint(equalToConstant: 32),
+            leadingImageView.widthAnchor.constraint(equalToConstant: 32),
+            leadingImageView.leadingAnchor.constraint(equalTo: leadingContainer.leadingAnchor, constant: edgeMargin),
+            leadingImageView.trailingAnchor.constraint(equalTo: leadingContainer.trailingAnchor, constant: -edgeMargin),
             leadingImageView.centerYAnchor.constraint(equalTo: headerLabel.centerYAnchor, constant: topMargin/3)
-		])
-
-		// Header label constraints
-
-		NSLayoutConstraint.activate([
-			headerLabel.leadingAnchor.constraint(equalTo: headerTextContainer.leadingAnchor),
-			headerLabel.topAnchor.constraint(equalTo: headerTextContainer.topAnchor),
-			headerLabel.bottomAnchor.constraint(equalTo: headerTextContainer.bottomAnchor),
-			headerLabel.trailingAnchor.constraint(equalTo: relativeTimeAgoLabel.leadingAnchor),
-			headerLabel.widthAnchor.constraint(greaterThanOrEqualToConstant: 50),
-
-			relativeTimeAgoLabel.topAnchor.constraint(equalTo: headerTextContainer.topAnchor),
-			relativeTimeAgoLabel.bottomAnchor.constraint(equalTo: headerTextContainer.bottomAnchor),
-			relativeTimeAgoLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -edgeMargin)
-		])
-
-		// Project Source
-
-		NSLayoutConstraint.activate([
-			projectSourceContainer.widthAnchor.constraint(equalToConstant: 50),
-			projectSourceContainer.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -edgeMargin),
+        ])
+
+        // Header label constraints
+
+        NSLayoutConstraint.activate([
+            headerLabel.leadingAnchor.constraint(equalTo: headerTextContainer.leadingAnchor),
+            headerLabel.topAnchor.constraint(equalTo: headerTextContainer.topAnchor),
+            headerLabel.bottomAnchor.constraint(equalTo: headerTextContainer.bottomAnchor),
+            headerLabel.trailingAnchor.constraint(equalTo: relativeTimeAgoLabel.leadingAnchor),
+            headerLabel.widthAnchor.constraint(greaterThanOrEqualToConstant: 50),
+
+            relativeTimeAgoLabel.topAnchor.constraint(equalTo: headerTextContainer.topAnchor),
+            relativeTimeAgoLabel.bottomAnchor.constraint(equalTo: headerTextContainer.bottomAnchor),
+            relativeTimeAgoLabel.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -edgeMargin)
+        ])
+
+        // Project Source
+
+        NSLayoutConstraint.activate([
+            projectSourceContainer.widthAnchor.constraint(equalToConstant: 50),
+            projectSourceContainer.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -edgeMargin),
 
             projectSourceLabel.topAnchor.constraint(equalTo: subheaderLabel.topAnchor),
-			projectSourceLabel.trailingAnchor.constraint(equalTo: relativeTimeAgoLabel.trailingAnchor),
-
-			projectSourceImage.topAnchor.constraint(equalTo: subheaderLabel.topAnchor),
-			projectSourceImage.trailingAnchor.constraint(equalTo: relativeTimeAgoLabel.trailingAnchor),
-		])
-	}
-
-	// MARK: - Public
-
-	func configure(viewModel: NotificationsCenterCellViewModel, theme: Theme) {
-		self.viewModel = viewModel
-		self.theme = theme
+            projectSourceLabel.trailingAnchor.constraint(equalTo: relativeTimeAgoLabel.trailingAnchor),
+
+            projectSourceImage.topAnchor.constraint(equalTo: subheaderLabel.topAnchor),
+            projectSourceImage.trailingAnchor.constraint(equalTo: relativeTimeAgoLabel.trailingAnchor),
+        ])
+    }
+
+    // MARK: - Public
+
+    func configure(viewModel: NotificationsCenterCellViewModel, theme: Theme) {
+        self.viewModel = viewModel
+        self.theme = theme
 
         updateCellStyle(forDisplayState: viewModel.displayState)
         updateLabels(forViewModel: viewModel)
         updateProject(forViewModel: viewModel)
-		updateMetaButton(forViewModel: viewModel)
-	}
-
-	func updateCellStyle(forDisplayState displayState: NotificationsCenterCellDisplayState) {
-		guard let notificationType = viewModel?.notificationType else {
-			return
-		}
-
-		// let displayState = NotificationsCenterCellDisplayState.allCases.randomElement()!
-		let cellStyle = NotificationsCenterCellStyle(theme: theme, traitCollection: traitCollection, notificationType: notificationType)
-
-		// Colors
-
-		cellSeparator.backgroundColor = cellStyle.cellSeparatorColor
-
-		headerLabel.textColor = cellStyle.headerTextColor(displayState)
-		subheaderLabel.textColor = cellStyle.subheaderTextColor(displayState)
-		messageSummaryLabel.textColor = cellStyle.messageTextColor
-		relativeTimeAgoLabel.textColor = cellStyle.relativeTimeAgoColor
-		metaActionButton.setTitleColor(cellStyle.metadataTextColor, for: .normal)
-		metaActionButton.imageView?.tintColor = cellStyle.metadataTextColor
-		projectSourceLabel.label.textColor = cellStyle.projectSourceColor
-		projectSourceLabel.layer.borderColor = cellStyle.projectSourceColor.cgColor
-		projectSourceImage.tintColor = cellStyle.projectSourceColor
-
-		selectedBackgroundView?.backgroundColor = cellStyle.selectedCellBackgroundColor
-
-		// Fonts
-
-		headerLabel.font = cellStyle.headerFont(displayState)
-		subheaderLabel.font = cellStyle.subheaderFont(displayState)
-		messageSummaryLabel.font = cellStyle.messageFont
-		relativeTimeAgoLabel.font = cellStyle.relativeTimeAgoFont(displayState)
-		metaActionButton.titleLabel?.font = cellStyle.metadataFont(displayState)
-		projectSourceLabel.label.font = cellStyle.projectSourceFont
-
-		// Image
-
-		leadingImageView.backgroundColor = cellStyle.leadingImageBackgroundColor(displayState)
-		leadingImageView.imageView.image = cellStyle.leadingImage(displayState)
-		leadingImageView.imageView.tintColor = cellStyle.leadingImageTintColor
-		leadingImageView.layer.borderColor = cellStyle.leadingImageBorderColor(displayState).cgColor
-	}
-    
+        updateMetaButton(forViewModel: viewModel)
+    }
+
+    func updateCellStyle(forDisplayState displayState: NotificationsCenterCellDisplayState) {
+        guard let notificationType = viewModel?.notificationType else {
+            return
+        }
+
+        // let displayState = NotificationsCenterCellDisplayState.allCases.randomElement()!
+        let cellStyle = NotificationsCenterCellStyle(theme: theme, traitCollection: traitCollection, notificationType: notificationType)
+
+        // Colors
+
+        cellSeparator.backgroundColor = cellStyle.cellSeparatorColor
+
+        headerLabel.textColor = cellStyle.headerTextColor(displayState)
+        subheaderLabel.textColor = cellStyle.subheaderTextColor(displayState)
+        messageSummaryLabel.textColor = cellStyle.messageTextColor
+        relativeTimeAgoLabel.textColor = cellStyle.relativeTimeAgoColor
+        metaActionButton.setTitleColor(cellStyle.metadataTextColor, for: .normal)
+        metaActionButton.imageView?.tintColor = cellStyle.metadataTextColor
+        projectSourceLabel.label.textColor = cellStyle.projectSourceColor
+        projectSourceLabel.layer.borderColor = cellStyle.projectSourceColor.cgColor
+        projectSourceImage.tintColor = cellStyle.projectSourceColor
+
+        selectedBackgroundView?.backgroundColor = cellStyle.selectedCellBackgroundColor
+
+        // Fonts
+
+        headerLabel.font = cellStyle.headerFont(displayState)
+        subheaderLabel.font = cellStyle.subheaderFont(displayState)
+        messageSummaryLabel.font = cellStyle.messageFont
+        relativeTimeAgoLabel.font = cellStyle.relativeTimeAgoFont(displayState)
+        metaActionButton.titleLabel?.font = cellStyle.metadataFont(displayState)
+        projectSourceLabel.label.font = cellStyle.projectSourceFont
+
+        // Image
+
+        leadingImageView.backgroundColor = cellStyle.leadingImageBackgroundColor(displayState)
+        leadingImageView.imageView.image = cellStyle.leadingImage(displayState)
+        leadingImageView.imageView.tintColor = cellStyle.leadingImageTintColor
+        leadingImageView.layer.borderColor = cellStyle.leadingImageBorderColor(displayState).cgColor
+    }
+
     func updateLabels(forViewModel viewModel: NotificationsCenterCellViewModel) {
         headerLabel.text = viewModel.text.header
         subheaderLabel.text = viewModel.text.subheader

        messageSummaryLabel.text = messageSummaryText.isEmpty ? " " : viewModel.text.body
        relativeTimeAgoLabel.text = viewModel.text.date
    }
    
    func updateProject(forViewModel viewModel: NotificationsCenterCellViewModel) {
        
        // Show or hide project source label and image
        if let projectText = viewModel.text.project {
            projectSourceLabel.label.text = projectText

            metaActionButton.setImage(nil, for: .normal)
            return
        }

        let image: UIImage?
        switch footerIcon {
        case .custom(let iconName):
