diff --git a/frontend/src/metabase/admin/databases/components/widgets/EngineWidget/EngineWidget.styled.jsx b/frontend/src/metabase/admin/databases/components/widgets/EngineWidget/EngineWidget.styled.jsx
index 92dca8ada39fadd47ee37b5d4657bccde4f63d3a..18254a7be052cf36201c35175049f79b7cf0edc5 100644
--- a/frontend/src/metabase/admin/databases/components/widgets/EngineWidget/EngineWidget.styled.jsx
+++ b/frontend/src/metabase/admin/databases/components/widgets/EngineWidget/EngineWidget.styled.jsx
@@ -1,5 +1,6 @@
 import styled from "styled-components";
 import { color, lighten } from "metabase/lib/colors";
+import { breakpointMinSmall } from "metabase/styled-components/theme";
 import Icon from "metabase/components/Icon";
 import IconButtonWrapper from "metabase/components/IconButtonWrapper";
 import Button from "metabase/components/Button";
@@ -10,9 +11,13 @@ export const EngineSearchRoot = styled.div`
 
 export const EngineListRoot = styled.div`
   display: grid;
-  grid-template-columns: repeat(3, 1fr);
+  grid-template-columns: 1fr;
   gap: 1.5rem;
   margin: 1.5rem 0;
+
+  ${breakpointMinSmall} {
+    grid-template-columns: repeat(3, 1fr);
+  }
 `;
 
 export const EngineCardRoot = styled(IconButtonWrapper)`
diff --git a/frontend/src/metabase/components/Toggle.css b/frontend/src/metabase/components/Toggle.css
deleted file mode 100644
index ec2f3bf83318251a30d0824a9c88909308292ca4..0000000000000000000000000000000000000000
--- a/frontend/src/metabase/components/Toggle.css
+++ /dev/null
@@ -1,49 +0,0 @@
-:local(.toggle) {
-  position: relative;
-  display: inline-block;
-  color: var(--color-brand);
-  box-sizing: border-box;
-  width: 48px;
-  height: 24px;
-  border-radius: 99px;
-  border: 1px solid var(--color-border);
-  background-color: var(--color-bg-medium);
-  transition: all 0.3s;
-}
-
-:local(.toggle.selected) {
-  background-color: currentColor;
-}
-
-:local(.toggle):after {
-  content: "";
-  width: 20px;
-  height: 20px;
-  border-radius: 99px;
-  position: absolute;
-  top: 1px;
-  left: 1px;
-  background-color: white;
-  transition: all 0.3s;
-  box-shadow: 2px 2px 6px var(--color-shadow);
-}
-
-:local(.toggle.selected):after {
-  left: 25px;
-
-  background-color: white;
-}
-
-:local(.toggle.small) {
-  width: 28px;
-  height: 17px;
-}
-
-:local(.toggle.small):after {
-  width: 13px;
-  height: 13px;
-}
-
-:local(.toggle.small.selected):after {
-  left: 12px;
-}
diff --git a/frontend/src/metabase/components/Toggle.jsx b/frontend/src/metabase/components/Toggle.jsx
deleted file mode 100644
index ebe2312374c1ba7a1cfc79b375974d34ae31fe62..0000000000000000000000000000000000000000
--- a/frontend/src/metabase/components/Toggle.jsx
+++ /dev/null
@@ -1,43 +0,0 @@
-/* eslint-disable react/prop-types */
-import React, { Component } from "react";
-import PropTypes from "prop-types";
-
-import styles from "./Toggle.css";
-
-import cx from "classnames";
-
-export default class Toggle extends Component {
-  static propTypes = {
-    value: PropTypes.bool.isRequired,
-    onChange: PropTypes.func,
-    small: PropTypes.bool,
-  };
-
-  handleClick = () => {
-    if (this.props.onChange) {
-      this.props.onChange(!this.props.value);
-    }
-  };
-
-  render() {
-    const { value, small, className, color, onChange, ...props } = this.props;
-    return (
-      <a
-        {...props}
-        role="checkbox"
-        aria-checked={value}
-        className={cx(
-          styles.toggle,
-          "no-decoration",
-          {
-            [styles.selected]: value,
-            [styles.small]: small,
-          },
-          className,
-        )}
-        style={{ color: color || null }}
-        onClick={onChange ? this.handleClick : null}
-      />
-    );
-  }
-}
diff --git a/frontend/src/metabase/components/Toggle/Toggle.styled.tsx b/frontend/src/metabase/components/Toggle/Toggle.styled.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..830a366b6215c55329251b133a45621b80efa5c3
--- /dev/null
+++ b/frontend/src/metabase/components/Toggle/Toggle.styled.tsx
@@ -0,0 +1,57 @@
+import styled from "styled-components";
+import { color } from "metabase/lib/colors";
+
+export interface ToggleRootProps {
+  isSmall?: boolean;
+  isSelected?: boolean;
+  currentColor?: string;
+}
+
+const getLeft = ({ isSmall, isSelected }: ToggleRootProps): string => {
+  if (!isSelected) {
+    return "1px";
+  } else if (!isSmall) {
+    return "25px";
+  } else {
+    return "12px";
+  }
+};
+
+const getBackgroundColor = ({
+  isSelected,
+  currentColor,
+}: ToggleRootProps): string => {
+  if (isSelected) {
+    return currentColor ?? color("brand");
+  } else {
+    return color("white");
+  }
+};
+
+export const ToggleRoot = styled.a<ToggleRootProps>`
+  position: relative;
+  display: inline-block;
+  color: ${props => props.currentColor ?? color("brand")};
+  box-sizing: border-box;
+  width: ${props => (props.isSmall ? "28px" : "48px")};
+  height: ${props => (props.isSmall ? "17px" : "24px")};
+  border-radius: 99px;
+  border: 1px solid ${color("border")};
+  background-color: ${color("bg-medium")};
+  background-color: ${getBackgroundColor};
+  transition: all 0.3s;
+  text-decoration: none;
+
+  &:after {
+    content: "";
+    width: ${props => (props.isSmall ? "13px" : "20px")};
+    height: ${props => (props.isSmall ? "13px" : "20px")};
+    border-radius: 99px;
+    position: absolute;
+    top: 1px;
+    left: ${getLeft};
+    background-color: ${color("white")};
+    transition: all 0.3s;
+    box-shadow: 2px 2px 6px ${color("shadow")};
+  }
+`;
diff --git a/frontend/src/metabase/components/Toggle/Toggle.tsx b/frontend/src/metabase/components/Toggle/Toggle.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..85033563170bd7505f0160f90ecddc52be9fcd3c
--- /dev/null
+++ b/frontend/src/metabase/components/Toggle/Toggle.tsx
@@ -0,0 +1,39 @@
+import React, { AnchorHTMLAttributes } from "react";
+import { ToggleRoot } from "metabase/components/Toggle/Toggle.styled";
+
+export interface ToggleProps
+  extends Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "onChange"> {
+  className?: string;
+  value: boolean;
+  small?: boolean;
+  color?: string;
+  onChange?: (value: boolean) => void;
+}
+
+const Toggle = ({
+  className,
+  value,
+  small,
+  color,
+  onChange,
+  ...rest
+}: ToggleProps): JSX.Element => {
+  const handleClick = () => {
+    onChange && onChange(!value);
+  };
+
+  return (
+    <ToggleRoot
+      {...rest}
+      className={className}
+      role="checkbox"
+      aria-checked={value}
+      isSmall={small}
+      isSelected={value}
+      currentColor={color}
+      onClick={handleClick}
+    />
+  );
+};
+
+export default Toggle;
diff --git a/frontend/src/metabase/components/Toggle/index.ts b/frontend/src/metabase/components/Toggle/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d184aca03d593230d497d050e8eb24bb3591c867
--- /dev/null
+++ b/frontend/src/metabase/components/Toggle/index.ts
@@ -0,0 +1 @@
+export { default } from "./Toggle";
diff --git a/frontend/src/metabase/setup/components/ActiveStep/ActiveStep.styled.tsx b/frontend/src/metabase/setup/components/ActiveStep/ActiveStep.styled.tsx
index 9acb28f47fdf8e4cbb256caf2ec899aa1aea9b7e..27ab6a10bf965c3b0934886e75dcfca2632e7782 100644
--- a/frontend/src/metabase/setup/components/ActiveStep/ActiveStep.styled.tsx
+++ b/frontend/src/metabase/setup/components/ActiveStep/ActiveStep.styled.tsx
@@ -1,13 +1,18 @@
 import styled from "styled-components";
 import { color } from "metabase/lib/colors";
+import { breakpointMinSmall } from "metabase/styled-components/theme";
 
 export const StepRoot = styled.section`
   position: relative;
-  padding: 4rem;
+  padding: 2rem;
   margin-bottom: 1.75rem;
   border: 1px solid ${color("border")};
   border-radius: 0.5rem;
   background-color: ${color("white")};
+
+  ${breakpointMinSmall} {
+    padding: 4rem;
+  }
 `;
 
 export const StepTitle = styled.div`
diff --git a/frontend/src/metabase/setup/components/PreferencesStep/PreferencesStep.styled.tsx b/frontend/src/metabase/setup/components/PreferencesStep/PreferencesStep.styled.tsx
index 91fcbdbe599c6d7a9aa3d149ed3e2d2b9f711c4d..85d517669469ce74f867aada5f83c6104b2edd29 100644
--- a/frontend/src/metabase/setup/components/PreferencesStep/PreferencesStep.styled.tsx
+++ b/frontend/src/metabase/setup/components/PreferencesStep/PreferencesStep.styled.tsx
@@ -1,12 +1,13 @@
 import styled from "styled-components";
 import { color } from "metabase/lib/colors";
+import Toggle from "metabase/components/Toggle";
 
 export const StepDescription = styled.div`
   margin: 0.875rem 0 1.25rem;
   color: ${color("text-medium")};
 `;
 
-export const StepToggle = styled.div`
+export const StepToggleContainer = styled.div`
   display: flex;
   align-items: center;
   margin: 0 2rem 1.25rem 0;
@@ -15,6 +16,10 @@ export const StepToggle = styled.div`
   border-radius: 0.5rem;
 `;
 
+export const StepToggle = styled(Toggle)`
+  flex: 0 0 auto;
+`;
+
 export const StepToggleLabel = styled.div`
   color: ${color("text-medium")};
   margin-left: 0.5rem;
diff --git a/frontend/src/metabase/setup/components/PreferencesStep/PreferencesStep.tsx b/frontend/src/metabase/setup/components/PreferencesStep/PreferencesStep.tsx
index 428ce01803ba0eaefea72bf9eade606bf0f2a15f..1e4b8cace4222e24c86a6cf3af1b32d387e9c4b6 100644
--- a/frontend/src/metabase/setup/components/PreferencesStep/PreferencesStep.tsx
+++ b/frontend/src/metabase/setup/components/PreferencesStep/PreferencesStep.tsx
@@ -4,15 +4,15 @@ import { getIn } from "icepick";
 import Settings from "metabase/lib/settings";
 import ActionButton from "metabase/components/ActionButton";
 import ExternalLink from "metabase/components/ExternalLink";
-import Toggle from "metabase/components/Toggle";
 import ActiveStep from "../ActiveStep";
 import InactiveStep from "../InvactiveStep";
 import {
   StepDescription,
-  StepToggle,
+  StepToggleContainer,
   StepToggleLabel,
   StepInfoList,
   StepError,
+  StepToggle,
 } from "./PreferencesStep.styled";
 
 export interface PreferencesStepProps {
@@ -68,8 +68,8 @@ const PreferencesStep = ({
           href={Settings.docsUrl("information-collection")}
         >{t`Here's a full list of what we track and why.`}</ExternalLink>
       </StepDescription>
-      <StepToggle>
-        <Toggle
+      <StepToggleContainer>
+        <StepToggle
           value={isTrackingAllowed}
           onChange={onTrackingChange}
           aria-labelledby="anonymous-usage-events-label"
@@ -77,7 +77,7 @@ const PreferencesStep = ({
         <StepToggleLabel id="anonymous-usage-events-label">
           {t`Allow Metabase to anonymously collect usage events`}
         </StepToggleLabel>
-      </StepToggle>
+      </StepToggleContainer>
       {isTrackingAllowed && (
         <StepInfoList>
           <li>{jt`Metabase ${(
diff --git a/frontend/src/metabase/setup/components/UserStep/UserStep.styled.tsx b/frontend/src/metabase/setup/components/UserStep/UserStep.styled.tsx
index 06272866496da065ea09193f4b37a127bbc8fdbb..e61d3404295c57354e2c33dfd65fca5a617e2009 100644
--- a/frontend/src/metabase/setup/components/UserStep/UserStep.styled.tsx
+++ b/frontend/src/metabase/setup/components/UserStep/UserStep.styled.tsx
@@ -1,5 +1,6 @@
 import styled from "styled-components";
 import { color } from "metabase/lib/colors";
+import { breakpointMinSmall } from "metabase/styled-components/theme";
 import User from "metabase/entities/users";
 
 export const StepDescription = styled.div`
@@ -12,7 +13,9 @@ export const UserFormRoot = styled(User.Form)`
 `;
 
 export const UserFormGroup = styled.div`
-  display: grid;
-  grid-template-columns: repeat(2, 1fr);
-  gap: 1rem;
+  ${breakpointMinSmall} {
+    display: grid;
+    grid-template-columns: repeat(2, 1fr);
+    gap: 1rem;
+  }
 `;