diff --git a/src/components/Analysis/AnalysisConsumption.tsx b/src/components/Analysis/AnalysisConsumption.tsx
index 1e9943f9ddec493ea1ee28588afbfe07ee83787e..ea850893ab874a7aa107c2fa97dc32c30b2aa659 100644
--- a/src/components/Analysis/AnalysisConsumption.tsx
+++ b/src/components/Analysis/AnalysisConsumption.tsx
@@ -1,30 +1,30 @@
-import React, { useCallback, useEffect, useState } from 'react'
-import { useI18n } from 'cozy-ui/transpiled/react/I18n'
-import Icon from 'cozy-ui/transpiled/react/Icon'
-import { useSelector } from 'react-redux'
-import { AppStore } from 'store'
-import { useHistory } from 'react-router-dom'
-import { FluidType } from 'enum/fluid.enum'
-import { PerformanceIndicator, Profile } from 'models'
-import { MonthlyForecast, ProfileType } from 'models/profileType.model'
-import './analysisConsumption.scss'
-import Button from '@material-ui/core/Button'
-import AnalysisConsumptionRow from 'components/Analysis/AnalysisConsumptionRow'
-import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
-import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
-import ProfileTypeService from 'services/profileType.service'
-import { Client, useClient } from 'cozy-client'
-import { DateTime } from 'luxon'
-import ProfileTypeEntityService from 'services/profileTypeEntity.service'
 import {
   Accordion,
   AccordionDetails,
   AccordionSummary,
 } from '@material-ui/core'
-import PlaceHolderIcon from 'assets/icons/visu/analysis/no-profile-placeholder.svg'
+import Button from '@material-ui/core/Button'
+import chevronDown from 'assets/icons/ico/chevron-down.svg'
 import ProfileEditIcon from 'assets/icons/ico/profile-edit.svg'
 import AnalysisIcon from 'assets/icons/visu/analysis/analysis.svg'
-import chevronDown from 'assets/icons/ico/chevron-down.svg'
+import PlaceHolderIcon from 'assets/icons/visu/analysis/no-profile-placeholder.svg'
+import AnalysisConsumptionRow from 'components/Analysis/AnalysisConsumptionRow'
+import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
+import Loader from 'components/Loader/Loader'
+import { Client, useClient } from 'cozy-client'
+import { useI18n } from 'cozy-ui/transpiled/react/I18n'
+import Icon from 'cozy-ui/transpiled/react/Icon'
+import { FluidType } from 'enum/fluid.enum'
+import { DateTime } from 'luxon'
+import { PerformanceIndicator, Profile } from 'models'
+import { MonthlyForecast, ProfileType } from 'models/profileType.model'
+import React, { useCallback, useEffect, useState } from 'react'
+import { useSelector } from 'react-redux'
+import { useHistory } from 'react-router-dom'
+import ProfileTypeService from 'services/profileType.service'
+import ProfileTypeEntityService from 'services/profileTypeEntity.service'
+import { AppStore } from 'store'
+import './analysisConsumption.scss'
 
 interface AnalysisConsumptionProps {
   aggregatedPerformanceIndicator: PerformanceIndicator
@@ -189,7 +189,7 @@ const AnalysisConsumption: React.FC<AnalysisConsumptionProps> = ({
           profileNotCompleted()
         ) : isLoading ? (
           <div className="loader-container">
-            <StyledSpinner size="5em" fluidType={FluidType.ELECTRICITY} />
+            <Loader color="elec" />
           </div>
         ) : (
           <>
diff --git a/src/components/Analysis/ElecHalfHourMonthlyAnalysis.tsx b/src/components/Analysis/ElecHalfHourMonthlyAnalysis.tsx
index 196f4cfd77c013f77891b8933e316ee804922f4e..c80479c0bc760ddccb18ae119e6c473b47f096f0 100644
--- a/src/components/Analysis/ElecHalfHourMonthlyAnalysis.tsx
+++ b/src/components/Analysis/ElecHalfHourMonthlyAnalysis.tsx
@@ -2,9 +2,9 @@ import IconButton from '@material-ui/core/IconButton'
 import LeftArrowIcon from 'assets/icons/ico/left-arrow.svg'
 import MaxPowerIcon from 'assets/icons/ico/maxPower.svg'
 import MinIcon from 'assets/icons/ico/minimum.svg'
-import RigthArrowIcon from 'assets/icons/ico/right-arrow.svg'
+import RightArrowIcon from 'assets/icons/ico/right-arrow.svg'
 import ElecHalfHourChart from 'components/Analysis/ElecHalfHourChart'
-import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
+import Loader from 'components/Loader/Loader'
 import { useClient } from 'cozy-client'
 import { useI18n } from 'cozy-ui/transpiled/react/I18n'
 import Icon from 'cozy-ui/transpiled/react/Icon'
@@ -175,12 +175,12 @@ const ElecHalfHourMonthlyAnalysis: React.FC<
               onClick={handleChangeWeek}
               className="arrow-next"
             >
-              <Icon icon={RigthArrowIcon} size={24} />
+              <Icon icon={RightArrowIcon} size={24} />
             </IconButton>
           </div>
           {isLoading && (
             <div className="loader-container">
-              <StyledSpinner size="5em" fluidType={FluidType.ELECTRICITY} />
+              <Loader color="elec" />
             </div>
           )}
           {!isLoading && (
diff --git a/src/components/Analysis/MaxConsumptionCard.tsx b/src/components/Analysis/MaxConsumptionCard.tsx
index 8b72fa68c6d64f2180034bbbd8ba1b538badb63d..b8bb9c6deb9d1678a4f52033108c2c9736756ffc 100644
--- a/src/components/Analysis/MaxConsumptionCard.tsx
+++ b/src/components/Analysis/MaxConsumptionCard.tsx
@@ -1,23 +1,23 @@
-import React, { useCallback, useEffect, useState } from 'react'
-import { useI18n } from 'cozy-ui/transpiled/react/I18n'
+import IconButton from '@material-ui/core/IconButton'
+import GraphIcon from 'assets/icons/ico/graph-icon.svg'
 import LeftArrowIcon from 'assets/icons/ico/left-arrow.svg'
-import RigthArrowIcon from 'assets/icons/ico/right-arrow.svg'
+import RightArrowIcon from 'assets/icons/ico/right-arrow.svg'
 import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
-import IconButton from '@material-ui/core/IconButton'
+import Loader from 'components/Loader/Loader'
+import { useClient } from 'cozy-client'
+import { useI18n } from 'cozy-ui/transpiled/react/I18n'
 import Icon from 'cozy-ui/transpiled/react/Icon'
-import GraphIcon from 'assets/icons/ico/graph-icon.svg'
 import { FluidType } from 'enum/fluid.enum'
-import { useSelector } from 'react-redux'
-import { AppStore } from 'store'
-import { getNavPicto } from 'utils/picto'
-import { DateTime } from 'luxon'
-import { useClient } from 'cozy-client'
 import { TimeStep } from 'enum/timeStep.enum'
+import { DateTime } from 'luxon'
 import { Dataload, TimePeriod } from 'models'
+import React, { useCallback, useEffect, useState } from 'react'
+import { useSelector } from 'react-redux'
 import ConsumptionDataManager from 'services/consumption.service'
-import './maxConsumptionCard.scss'
-import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
+import { AppStore } from 'store'
+import { getNavPicto } from 'utils/picto'
 import { formatNumberValues } from 'utils/utils'
+import './maxConsumptionCard.scss'
 
 interface MaxConsumptionCardProps {
   analysisDate: DateTime
@@ -33,10 +33,10 @@ const MaxConsumptionCard: React.FC<MaxConsumptionCardProps> = ({
   const [index, setIndex] = useState<number>(0)
 
   const [maxDayData, setMaxDayData] = useState<Dataload | null>(null)
-  const [isLoading, setisLoading] = useState<boolean>(false)
+  const [isLoading, setIsLoading] = useState<boolean>(false)
 
   const handleChangePrevFluid = useCallback(() => {
-    setisLoading(true)
+    setIsLoading(true)
     if (index === 0) {
       setIndex(fluidTypes.length - 1)
     } else {
@@ -45,7 +45,7 @@ const MaxConsumptionCard: React.FC<MaxConsumptionCardProps> = ({
   }, [fluidTypes, index])
 
   const handleChangeNextFluid = useCallback(() => {
-    setisLoading(true)
+    setIsLoading(true)
     if (index === fluidTypes.length - 1) {
       setIndex(0)
     } else {
@@ -56,7 +56,7 @@ const MaxConsumptionCard: React.FC<MaxConsumptionCardProps> = ({
   useEffect(() => {
     let subscribed = true
     async function getMaxLoadData() {
-      setisLoading(true)
+      setIsLoading(true)
       const timePeriod: TimePeriod = {
         startDate: analysisDate.minus({ month: 1 }).startOf('month'),
         endDate: analysisDate.minus({ month: 1 }).endOf('month'),
@@ -75,7 +75,7 @@ const MaxConsumptionCard: React.FC<MaxConsumptionCardProps> = ({
       } else {
         setMaxDayData(null)
       }
-      setisLoading(false)
+      setIsLoading(false)
     }
     if (subscribed) {
       getMaxLoadData()
@@ -111,14 +111,12 @@ const MaxConsumptionCard: React.FC<MaxConsumptionCardProps> = ({
             onClick={handleChangeNextFluid}
             className="arrow-next"
           >
-            <Icon icon={RigthArrowIcon} size={24} />
+            <Icon icon={RightArrowIcon} size={24} />
           </IconButton>
         )}
       </div>
       <div className="data-container">
-        {isLoading && (
-          <StyledSpinner size="3em" fluidType={fluidTypes[index]} />
-        )}
+        {isLoading && <Loader fluidType={fluidTypes[index]} />}
         {!isLoading && (
           <>
             {!maxDayData && (
diff --git a/src/components/Analysis/MonthlyAnalysis.tsx b/src/components/Analysis/MonthlyAnalysis.tsx
index 617818b2b59a750ed9eceb4fa8a955c961887f17..ee59f2a5d1b96b51cc4346d3e94fcb33c43d3e13 100644
--- a/src/components/Analysis/MonthlyAnalysis.tsx
+++ b/src/components/Analysis/MonthlyAnalysis.tsx
@@ -1,23 +1,22 @@
-import React, { useEffect, useState } from 'react'
+import Loader from 'components/Loader/Loader'
+import FluidPerformanceIndicator from 'components/PerformanceIndicator/FluidPerformanceIndicator'
 import { useClient } from 'cozy-client'
-import { useSelector } from 'react-redux'
-import { AppStore } from 'store'
-import './monthlyanalysis.scss'
-
 import { FluidType } from 'enum/fluid.enum'
 import { TimeStep } from 'enum/timeStep.enum'
+import { DateTime } from 'luxon'
 import { PerformanceIndicator } from 'models'
+import React, { useEffect, useState } from 'react'
+import { useSelector } from 'react-redux'
 import ConsumptionService from 'services/consumption.service'
-import PerformanceIndicatorService from 'services/performanceIndicator.service'
 import ConfigService from 'services/fluidConfig.service'
-import FluidPerformanceIndicator from 'components/PerformanceIndicator/FluidPerformanceIndicator'
+import PerformanceIndicatorService from 'services/performanceIndicator.service'
+import { AppStore } from 'store'
 import AnalysisConsumption from './AnalysisConsumption'
-import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
 import AnalysisErrorModal from './AnalysisErrorModal'
-import { DateTime } from 'luxon'
+import ElecHalfHourMonthlyAnalysis from './ElecHalfHourMonthlyAnalysis'
 import MaxConsumptionCard from './MaxConsumptionCard'
+import './monthlyanalysis.scss'
 import TotalAnalysisChart from './TotalAnalysisChart'
-import ElecHalfHourMonthlyAnalysis from './ElecHalfHourMonthlyAnalysis'
 
 interface MonthlyAnalysisProps {
   analysisDate: DateTime
@@ -111,7 +110,7 @@ const MonthlyAnalysis: React.FC<MonthlyAnalysisProps> = ({
     <>
       {!isLoaded && (
         <div className="analysis-container-spinner" aria-busy="true">
-          <StyledSpinner size="5em" fluidType={FluidType.MULTIFLUID} />
+          <Loader />
         </div>
       )}
       {isLoaded && (
diff --git a/src/components/Challenge/ChallengeCardOnGoing.tsx b/src/components/Challenge/ChallengeCardOnGoing.tsx
index aa6db9b163ea4077f9f493329b3ac7340889d78f..586a2c3710ae00b0c960995a20c1b8fc3917d90d 100644
--- a/src/components/Challenge/ChallengeCardOnGoing.tsx
+++ b/src/components/Challenge/ChallengeCardOnGoing.tsx
@@ -6,7 +6,7 @@ import defaultIcon from 'assets/icons/visu/duel/default.svg'
 import duelLocked from 'assets/icons/visu/duel/locked.svg'
 import classNames from 'classnames'
 import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
-import StyledBlackSpinner from 'components/CommonKit/Spinner/StyledBlackSpinner'
+import Loader from 'components/Loader/Loader'
 import { Client, useClient } from 'cozy-client'
 import { useI18n } from 'cozy-ui/transpiled/react/I18n'
 import { UserActionState } from 'enum/userAction.enum'
@@ -234,7 +234,7 @@ const ChallengeCardOnGoing: React.FC<ChallengeCardOnGoingProps> = ({
         <button className="smallCard goDuel" onClick={goDuel}>
           {isLoading ? (
             <div className="spinner-container">
-              <StyledBlackSpinner className="duel-spinner" size={46} />
+              <Loader color="black" />
             </div>
           ) : (
             <>
diff --git a/src/components/CommonKit/Spinner/Spinner.spec.tsx b/src/components/CommonKit/Spinner/Spinner.spec.tsx
deleted file mode 100644
index ff1327a0d2a4de39ce9adf447cb383808841a78b..0000000000000000000000000000000000000000
--- a/src/components/CommonKit/Spinner/Spinner.spec.tsx
+++ /dev/null
@@ -1,25 +0,0 @@
-import React from 'react'
-import { mount } from 'enzyme'
-import Spinner from './Spinner'
-
-jest.mock('cozy-ui/transpiled/react/I18n', () => {
-  return {
-    useI18n: jest.fn(() => {
-      return {
-        t: (str: string) => str,
-      }
-    }),
-  }
-})
-
-describe('Spinner component test ', () => {
-  const mockProps = {
-    size: 14,
-  }
-
-  it('should render correctly Spinner', () => {
-    const wrapper = mount(<Spinner size={mockProps.size} />)
-
-    expect(wrapper.getElement()).toMatchSnapshot()
-  })
-})
diff --git a/src/components/CommonKit/Spinner/Spinner.tsx b/src/components/CommonKit/Spinner/Spinner.tsx
deleted file mode 100644
index 6c9ab1f66946f964deab153a9a3ffe131a6d88c0..0000000000000000000000000000000000000000
--- a/src/components/CommonKit/Spinner/Spinner.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-import React from 'react'
-import CircularProgress from '@material-ui/core/CircularProgress'
-import { useI18n } from 'cozy-ui/transpiled/react/I18n'
-
-interface SpinnerProps {
-  size: number | string
-}
-
-const Spinner: React.FC<SpinnerProps> = ({ size }: SpinnerProps) => {
-  const { t } = useI18n()
-  return (
-    <CircularProgress
-      size={size}
-      aria-label={t('common.accessibility.loading')}
-      title={t('common.accessibility.loading')}
-    />
-  )
-}
-
-export default Spinner
diff --git a/src/components/CommonKit/Spinner/StyledBlackSpinner.spec.tsx b/src/components/CommonKit/Spinner/StyledBlackSpinner.spec.tsx
deleted file mode 100644
index 80e83b0a9ff734e3f0d96d12e41d2038a43028ee..0000000000000000000000000000000000000000
--- a/src/components/CommonKit/Spinner/StyledBlackSpinner.spec.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import { mount } from 'enzyme'
-import React from 'react'
-
-import StyledBlackSpinner from './StyledBlackSpinner'
-
-describe('StyledBlackSpinner component test', () => {
-  it('should render correclty StyledBlackSpinner', () => {
-    const wrapper = mount(<StyledBlackSpinner />)
-    expect(wrapper.getElement()).toMatchSnapshot()
-  })
-})
diff --git a/src/components/CommonKit/Spinner/StyledBlackSpinner.tsx b/src/components/CommonKit/Spinner/StyledBlackSpinner.tsx
deleted file mode 100644
index 20b05258f6c7b6fac818b877187f3307704d4ece..0000000000000000000000000000000000000000
--- a/src/components/CommonKit/Spinner/StyledBlackSpinner.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react'
-import { withStyles } from '@material-ui/core/styles'
-import MuiCircularProgress, {
-  CircularProgressProps,
-} from '@material-ui/core/CircularProgress'
-
-const SpinnerBase = withStyles({
-  root: {
-    color: 'var(--black)',
-  },
-})(MuiCircularProgress) as React.FC<CircularProgressProps>
-
-type StyledBlackSpinnerProps = CircularProgressProps
-
-const StyledBlackSpinner: React.FC<StyledBlackSpinnerProps> = ({
-  ...props
-}: StyledBlackSpinnerProps) => {
-  return <SpinnerBase {...props} />
-}
-
-export default StyledBlackSpinner
diff --git a/src/components/CommonKit/Spinner/StyledEcogestureSpinner.tsx b/src/components/CommonKit/Spinner/StyledEcogestureSpinner.tsx
deleted file mode 100644
index 8e2c796cfa149d8efe134befa0ef6dfbcd8bc99e..0000000000000000000000000000000000000000
--- a/src/components/CommonKit/Spinner/StyledEcogestureSpinner.tsx
+++ /dev/null
@@ -1,21 +0,0 @@
-import React from 'react'
-import { withStyles } from '@material-ui/core/styles'
-import MuiCircularProgress, {
-  CircularProgressProps,
-} from '@material-ui/core/CircularProgress'
-
-const SpinnerBase = withStyles({
-  root: {
-    color: 'var(--blue)',
-  },
-})(MuiCircularProgress) as React.FC<CircularProgressProps>
-
-type StyledSpinnerProps = CircularProgressProps
-
-const StyledEcogestureSpinner: React.FC<StyledSpinnerProps> = ({
-  ...props
-}: StyledSpinnerProps) => {
-  return <SpinnerBase {...props} />
-}
-
-export default StyledEcogestureSpinner
diff --git a/src/components/CommonKit/Spinner/StyledSpinner.spec.tsx b/src/components/CommonKit/Spinner/StyledSpinner.spec.tsx
deleted file mode 100644
index 684001d9787002e06522530afd7556c3c8dc9a50..0000000000000000000000000000000000000000
--- a/src/components/CommonKit/Spinner/StyledSpinner.spec.tsx
+++ /dev/null
@@ -1,36 +0,0 @@
-import React from 'react'
-import { mount } from 'enzyme'
-import StyledSpinner from './StyledSpinner'
-import { FluidType } from 'enum/fluid.enum'
-
-describe('StyledSpinner component test', () => {
-  it('should render correctly base StyledSpinner (with option home)', () => {
-    const wrapper = mount(<StyledSpinner fluidType={FluidType.ELECTRICITY} />)
-
-    expect(wrapper.getElement()).toMatchSnapshot()
-  })
-
-  it('should render correctly base StyledSpinner with unknown FluidType', () => {
-    const wrapper = mount(<StyledSpinner fluidType={99} />)
-
-    expect(wrapper.getElement()).toMatchSnapshot()
-  })
-
-  it('should render correctly Electricty StyledSpinner', () => {
-    const wrapper = mount(<StyledSpinner fluidType={FluidType.ELECTRICITY} />)
-
-    expect(wrapper.getElement()).toMatchSnapshot()
-  })
-
-  it('should render correctly Water StyledSpinner', () => {
-    const wrapper = mount(<StyledSpinner fluidType={FluidType.WATER} />)
-
-    expect(wrapper.getElement()).toMatchSnapshot()
-  })
-
-  it('should render correctly Gas StyledSpinner', () => {
-    const wrapper = mount(<StyledSpinner fluidType={FluidType.GAS} />)
-
-    expect(wrapper.getElement()).toMatchSnapshot()
-  })
-})
diff --git a/src/components/CommonKit/Spinner/StyledSpinner.tsx b/src/components/CommonKit/Spinner/StyledSpinner.tsx
deleted file mode 100644
index 1024efe943996dae8edc15cc90a221644d49a6aa..0000000000000000000000000000000000000000
--- a/src/components/CommonKit/Spinner/StyledSpinner.tsx
+++ /dev/null
@@ -1,54 +0,0 @@
-import React from 'react'
-import { FluidType } from 'enum/fluid.enum'
-import { withStyles } from '@material-ui/core/styles'
-import MuiCircularProgress, {
-  CircularProgressProps,
-} from '@material-ui/core/CircularProgress'
-
-const SpinnerBase = withStyles({
-  root: {
-    color: 'var(--multiColor)',
-  },
-})(MuiCircularProgress) as React.FC<CircularProgressProps>
-
-const SpinnerElec = withStyles({
-  root: {
-    color: 'var(--elecColor)',
-  },
-})(MuiCircularProgress) as React.FC<CircularProgressProps>
-
-const SpinnerWater = withStyles({
-  root: {
-    color: 'var(--waterColor)',
-  },
-})(MuiCircularProgress) as React.FC<CircularProgressProps>
-
-const SpinnerGas = withStyles({
-  root: {
-    color: 'var(--gasColor)',
-  },
-})(MuiCircularProgress) as React.FC<CircularProgressProps>
-
-interface StyledSpinnerProps extends CircularProgressProps {
-  fluidType: FluidType
-}
-
-const StyledSpinner: React.FC<StyledSpinnerProps> = ({
-  fluidType,
-  ...props
-}: StyledSpinnerProps) => {
-  switch (fluidType) {
-    case FluidType.ELECTRICITY:
-      return <SpinnerElec {...props} />
-    case FluidType.WATER:
-      return <SpinnerWater {...props} />
-    case FluidType.GAS:
-      return <SpinnerGas {...props} />
-    case FluidType.MULTIFLUID:
-      return <SpinnerBase {...props} />
-    default:
-      return <SpinnerBase {...props} />
-  }
-}
-
-export default StyledSpinner
diff --git a/src/components/CommonKit/Spinner/__snapshots__/Spinner.spec.tsx.snap b/src/components/CommonKit/Spinner/__snapshots__/Spinner.spec.tsx.snap
deleted file mode 100644
index 1d209b97fa03772a710d1b4ca6edcaaf6610f659..0000000000000000000000000000000000000000
--- a/src/components/CommonKit/Spinner/__snapshots__/Spinner.spec.tsx.snap
+++ /dev/null
@@ -1,7 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`Spinner component test  should render correctly Spinner 1`] = `
-<Spinner
-  size={14}
-/>
-`;
diff --git a/src/components/CommonKit/Spinner/__snapshots__/StyledBlackSpinner.spec.tsx.snap b/src/components/CommonKit/Spinner/__snapshots__/StyledBlackSpinner.spec.tsx.snap
deleted file mode 100644
index f37195d63a69872c3d7531c7c25996d9707e66d1..0000000000000000000000000000000000000000
--- a/src/components/CommonKit/Spinner/__snapshots__/StyledBlackSpinner.spec.tsx.snap
+++ /dev/null
@@ -1,3 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`StyledBlackSpinner component test should render correclty StyledBlackSpinner 1`] = `<StyledBlackSpinner />`;
diff --git a/src/components/CommonKit/Spinner/__snapshots__/StyledSpinner.spec.tsx.snap b/src/components/CommonKit/Spinner/__snapshots__/StyledSpinner.spec.tsx.snap
deleted file mode 100644
index e0b7eb274e12bdd8fcd046ae9f283a24b4e5bdc9..0000000000000000000000000000000000000000
--- a/src/components/CommonKit/Spinner/__snapshots__/StyledSpinner.spec.tsx.snap
+++ /dev/null
@@ -1,31 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`StyledSpinner component test should render correctly Electricty StyledSpinner 1`] = `
-<StyledSpinner
-  fluidType={0}
-/>
-`;
-
-exports[`StyledSpinner component test should render correctly Gas StyledSpinner 1`] = `
-<StyledSpinner
-  fluidType={2}
-/>
-`;
-
-exports[`StyledSpinner component test should render correctly Water StyledSpinner 1`] = `
-<StyledSpinner
-  fluidType={1}
-/>
-`;
-
-exports[`StyledSpinner component test should render correctly base StyledSpinner (with option home) 1`] = `
-<StyledSpinner
-  fluidType={0}
-/>
-`;
-
-exports[`StyledSpinner component test should render correctly base StyledSpinner with unknown FluidType 1`] = `
-<StyledSpinner
-  fluidType={99}
-/>
-`;
diff --git a/src/components/Connection/ConnectionResult.tsx b/src/components/Connection/ConnectionResult.tsx
index 33ff4dd0704254c0d3e1c401e61aab2004301619..c3560ac13c6d4128400fe0df8daa087362691340 100644
--- a/src/components/Connection/ConnectionResult.tsx
+++ b/src/components/Connection/ConnectionResult.tsx
@@ -1,8 +1,7 @@
 import Button from '@material-ui/core/Button'
 import warningWhite from 'assets/icons/ico/warning-white.svg'
 import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
-import StyledBlackSpinner from 'components/CommonKit/Spinner/StyledBlackSpinner'
-import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
+import Loader from 'components/Loader/Loader'
 import { useClient } from 'cozy-client'
 import { useI18n } from 'cozy-ui/transpiled/react/I18n'
 import { FluidState, FluidType } from 'enum/fluid.enum'
@@ -291,7 +290,7 @@ const ConnectionResult: React.FC<ConnectionResultProps> = ({
             label: 'text-16-normal',
           }}
         >
-          {deleting && <StyledSpinner size="1rem" fluidType={fluidType} />}
+          {deleting && <Loader fluidType={fluidType} />}
           {!deleting && t('konnector_form.button_delete')}
         </Button>
         <Button
@@ -307,7 +306,7 @@ const ConnectionResult: React.FC<ConnectionResultProps> = ({
             label: 'text-16-bold',
           }}
         >
-          {updating && <StyledBlackSpinner size="1rem" />}
+          {updating && <Loader color="black" />}
           {!updating && (
             <div>
               {konnectorError === 'error_update_oauth'
diff --git a/src/components/Connection/FormOAuth.tsx b/src/components/Connection/FormOAuth.tsx
index 3bb9b0b428df2039eb9557be6c47424951165fa3..eb30fdc6099d2abe8d632663cb5861be506d816c 100644
--- a/src/components/Connection/FormOAuth.tsx
+++ b/src/components/Connection/FormOAuth.tsx
@@ -1,18 +1,18 @@
-import React, { useCallback, useEffect, useState } from 'react'
-import { useI18n } from 'cozy-ui/transpiled/react/I18n'
-import { useClient } from 'cozy-client'
-import './auth.scss'
-import { FluidStatus, Konnector } from 'models'
-import { OAuthWindow } from 'cozy-harvest-lib/dist/components/OAuthWindow'
 import Button from '@material-ui/core/Button'
 import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
-import StyledBlackSpinner from 'components/CommonKit/Spinner/StyledBlackSpinner'
-import { getPartnerPicto } from 'utils/picto'
+import Loader from 'components/Loader/Loader'
+import { useClient } from 'cozy-client'
+import { OAuthWindow } from 'cozy-harvest-lib/dist/components/OAuthWindow'
+import { useI18n } from 'cozy-ui/transpiled/react/I18n'
+import { UsageEventType } from 'enum/usageEvent.enum'
+import { FluidStatus, Konnector } from 'models'
+import React, { useCallback, useEffect, useState } from 'react'
 import { useDispatch, useSelector } from 'react-redux'
+import UsageEventService from 'services/usageEvent.service'
 import { AppStore } from 'store'
 import { setShouldRefreshConsent } from 'store/global/global.actions'
-import { UsageEventType } from 'enum/usageEvent.enum'
-import UsageEventService from 'services/usageEvent.service'
+import { getPartnerPicto } from 'utils/picto'
+import './auth.scss'
 
 interface FormOAuthProps {
   konnector: Konnector | null
@@ -100,7 +100,7 @@ const FormOAuth: React.FC<FormOAuthProps> = ({
         <div className="authform-button-content">
           <div className="authform-button-content-icon">
             {isWaiting ? (
-              <StyledBlackSpinner size={48} />
+              <Loader color="black" />
             ) : (
               <StyledIcon icon={icon} size={80} />
             )}
diff --git a/src/components/DateNavigator/DateNavigator.tsx b/src/components/DateNavigator/DateNavigator.tsx
index ff14f1f74173d11f91fc91a5861725c5eaf6dd88..5a1936bad94e991a3dda66ffd4092045a3cab59e 100644
--- a/src/components/DateNavigator/DateNavigator.tsx
+++ b/src/components/DateNavigator/DateNavigator.tsx
@@ -1,23 +1,21 @@
-import React from 'react'
-import './datenavigator.scss'
+import IconButton from '@material-ui/core/IconButton'
+import LeftArrowIcon from 'assets/icons/ico/left-arrow.svg'
+import RightArrowIcon from 'assets/icons/ico/right-arrow.svg'
+import classNames from 'classnames'
+import DateNavigatorFormat from 'components/DateNavigator/DateNavigatorFormat'
 import { useI18n } from 'cozy-ui/transpiled/react/I18n'
+import Icon from 'cozy-ui/transpiled/react/Icon'
+import { FluidType } from 'enum/fluid.enum'
+import { TimeStep } from 'enum/timeStep.enum'
+import { DateTime } from 'luxon'
+import React from 'react'
 import { useDispatch, useSelector } from 'react-redux'
+import DateChartService from 'services/dateChart.service'
 import { AppStore } from 'store'
 import { setCurrentIndex, setSelectedDate } from 'store/chart/chart.actions'
-import { DateTime } from 'luxon'
-import classNames from 'classnames'
-
-import DateChartService from 'services/dateChart.service'
 import { isLastDateReached } from 'utils/date'
-
-import DateNavigatorFormat from 'components/DateNavigator/DateNavigatorFormat'
-import LeftArrowIcon from 'assets/icons/ico/left-arrow.svg'
-import RigthArrowIcon from 'assets/icons/ico/right-arrow.svg'
-import IconButton from '@material-ui/core/IconButton'
-import Icon from 'cozy-ui/transpiled/react/Icon'
-import { TimeStep } from 'enum/timeStep.enum'
 import { isKonnectorActive } from 'utils/utils'
-import { FluidType } from 'enum/fluid.enum'
+import './datenavigator.scss'
 
 interface DateNavigatorProps {
   currentAnalysisDate?: DateTime
@@ -132,7 +130,7 @@ const DateNavigator: React.FC<DateNavigatorProps> = ({
           })}
           onClick={() => handleChangeNextIndex()}
         >
-          <Icon icon={RigthArrowIcon} size={16} />
+          <Icon icon={RightArrowIcon} size={16} />
         </IconButton>
       </div>
     </div>
diff --git a/src/components/Ecogesture/EcogestureView.tsx b/src/components/Ecogesture/EcogestureView.tsx
index c09e4e0498c885a3c6766ebc494ae6fa18994dc5..e167d49ac0bd263e6feaed2841f15e4db3ebc78f 100644
--- a/src/components/Ecogesture/EcogestureView.tsx
+++ b/src/components/Ecogesture/EcogestureView.tsx
@@ -1,27 +1,26 @@
-import React, { useCallback, useEffect, useState } from 'react'
-import { useClient } from 'cozy-client'
+import { Tab, Tabs } from '@material-ui/core'
+import classNames from 'classnames'
+import Content from 'components/Content/Content'
 import EcogestureList from 'components/Ecogesture/EcogestureList'
 import CozyBar from 'components/Header/CozyBar'
 import Header from 'components/Header/Header'
-import Content from 'components/Content/Content'
-import { Tabs, Tab } from '@material-ui/core'
-import './ecogestureView.scss'
-import classNames from 'classnames'
+import Loader from 'components/Loader/Loader'
+import { useClient } from 'cozy-client'
 import { useI18n } from 'cozy-ui/transpiled/react/I18n'
-import { useDispatch, useSelector } from 'react-redux'
-import { AppStore } from 'store'
+import { EcogestureStatus } from 'enum/ecogesture.enum'
 import { Ecogesture } from 'models'
+import { ProfileEcogesture } from 'models/profileEcogesture.model'
+import React, { useCallback, useEffect, useState } from 'react'
+import { useDispatch, useSelector } from 'react-redux'
+import { useHistory, useLocation } from 'react-router-dom'
 import EcogestureService from 'services/ecogesture.service'
+import { AppStore } from 'store'
+import { updateProfile } from 'store/profile/profile.actions'
 import { getSeason } from 'utils/utils'
-import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
-import { FluidType } from 'enum/fluid.enum'
 import EcogestureEmptyList from './EcogestureEmptyList'
-import { EcogestureStatus } from 'enum/ecogesture.enum'
 import EcogestureInitModal from './EcogestureInitModal'
 import EcogestureReinitModal from './EcogestureReinitModal'
-import { updateProfile } from 'store/profile/profile.actions'
-import { useHistory, useLocation } from 'react-router-dom'
-import { ProfileEcogesture } from 'models/profileEcogesture.model'
+import './ecogestureView.scss'
 
 interface TabPanelProps {
   children?: React.ReactNode
@@ -187,7 +186,7 @@ const EcogestureView: React.FC = () => {
       {!isLoaded && (
         <Content height={headerHeight}>
           <div className="ecogesture-spinner" aria-busy="true">
-            <StyledSpinner size="5em" fluidType={FluidType.MULTIFLUID} />
+            <Loader />
           </div>
         </Content>
       )}
diff --git a/src/components/Ecogesture/SingleEcogesture.spec.tsx b/src/components/Ecogesture/SingleEcogesture.spec.tsx
index 892407ba79da1ed814d8262439feedb4b8161774..1c4cd286b5237908c5364e48b51c8a57b47c7498 100644
--- a/src/components/Ecogesture/SingleEcogesture.spec.tsx
+++ b/src/components/Ecogesture/SingleEcogesture.spec.tsx
@@ -31,9 +31,7 @@ jest.mock('components/Ecogesture/EfficientyRating', () => () => (
 ))
 jest.mock('components/Header/Header', () => () => <div id="Header"></div>)
 jest.mock('components/Header/CozyBar', () => () => <div id="CozyBar"></div>)
-jest.mock('components/CommonKit/Spinner/StyledSpinner', () => () => (
-  <div id="spinner"></div>
-))
+jest.mock('components/Loader/Loader', () => () => <div id="spinner"></div>)
 // eslint-disable-next-line @typescript-eslint/no-explicit-any
 jest.mock('components/Content/Content', () => (props: any) => (
   <div id="content">{props.children}</div>
diff --git a/src/components/Ecogesture/SingleEcogesture.tsx b/src/components/Ecogesture/SingleEcogesture.tsx
index 4f089add5159c554e6ae9988add975ee4bfc3332..2d49b1c0d8eb4314afad4ccecd907e33b907475d 100644
--- a/src/components/Ecogesture/SingleEcogesture.tsx
+++ b/src/components/Ecogesture/SingleEcogesture.tsx
@@ -1,31 +1,30 @@
-import React, { useState, useEffect, useCallback, useMemo } from 'react'
-import './singleEcogesture.scss'
-import classNames from 'classnames'
-import { useI18n } from 'cozy-ui/transpiled/react/I18n'
-import { AppStore } from 'store'
-import { useSelector } from 'react-redux'
-import useExploration from 'components/Hooks/useExploration'
-import { importIconbyId } from 'utils/utils'
-import EcogestureService from 'services/ecogesture.service'
 import IconButton from '@material-ui/core/IconButton'
-import Icon from 'cozy-ui/transpiled/react/Icon'
-import { Ecogesture } from 'models'
-import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
-import EfficientyRating from './EfficientyRating'
-import defaultIcon from 'assets/icons/visu/ecogesture/default.svg'
-import doingEnabledIcon from 'assets/icons/ico/doing-enabled.svg'
 import doingDisabledIcon from 'assets/icons/ico/doing-disabled.svg'
-import objectiveEnabledIcon from 'assets/icons/ico/objective-enabled.svg'
+import doingEnabledIcon from 'assets/icons/ico/doing-enabled.svg'
 import objectiveDisabledIcon from 'assets/icons/ico/objective-disabled.svg'
+import objectiveEnabledIcon from 'assets/icons/ico/objective-enabled.svg'
+import defaultIcon from 'assets/icons/visu/ecogesture/default.svg'
+import classNames from 'classnames'
+import ErrorPage from 'components/CommonKit/ErrorPage/ErrorPage'
+import StyledIcon from 'components/CommonKit/Icon/StyledIcon'
 import Content from 'components/Content/Content'
 import CozyBar from 'components/Header/CozyBar'
 import Header from 'components/Header/Header'
+import useExploration from 'components/Hooks/useExploration'
+import Loader from 'components/Loader/Loader'
 import { useClient } from 'cozy-client'
-import ErrorPage from 'components/CommonKit/ErrorPage/ErrorPage'
-import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
-import { FluidType } from 'enum/fluid.enum'
-import { useHistory, useLocation } from 'react-router-dom'
+import { useI18n } from 'cozy-ui/transpiled/react/I18n'
+import Icon from 'cozy-ui/transpiled/react/Icon'
 import { Location } from 'history'
+import { Ecogesture } from 'models'
+import React, { useCallback, useEffect, useMemo, useState } from 'react'
+import { useSelector } from 'react-redux'
+import { useHistory, useLocation } from 'react-router-dom'
+import EcogestureService from 'services/ecogesture.service'
+import { AppStore } from 'store'
+import { importIconbyId } from 'utils/utils'
+import EfficientyRating from './EfficientyRating'
+import './singleEcogesture.scss'
 
 interface SingleEcogestureProps {
   match: { params: { id: string } }
@@ -133,7 +132,7 @@ const SingleEcogesture: React.FC<SingleEcogestureProps> = ({
     return (
       <Content height={headerHeight}>
         <div className="se-loader-container">
-          <StyledSpinner size="5em" fluidType={FluidType.MULTIFLUID} />
+          <Loader />
         </div>
       </Content>
     )
diff --git a/src/components/Ecogesture/__snapshots__/EcogestureView.spec.tsx.snap b/src/components/Ecogesture/__snapshots__/EcogestureView.spec.tsx.snap
index 4d6d99ca21929de48c0845070944a44c21130222..6c9d81778a4947c8740c528210754d92536a5c28 100644
--- a/src/components/Ecogesture/__snapshots__/EcogestureView.spec.tsx.snap
+++ b/src/components/Ecogesture/__snapshots__/EcogestureView.spec.tsx.snap
@@ -527,10 +527,10 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                   className="indicator-tab"
                   classes={
                     Object {
-                      "colorPrimary": "PrivateTabIndicator-colorPrimary-3",
-                      "colorSecondary": "PrivateTabIndicator-colorSecondary-4",
-                      "root": "PrivateTabIndicator-root-2",
-                      "vertical": "PrivateTabIndicator-vertical-5",
+                      "colorPrimary": "PrivateTabIndicator-colorPrimary-2",
+                      "colorSecondary": "PrivateTabIndicator-colorSecondary-3",
+                      "root": "PrivateTabIndicator-root-1",
+                      "vertical": "PrivateTabIndicator-vertical-4",
                     }
                   }
                   color="secondary"
@@ -543,7 +543,7 @@ exports[`EcogestureView component should be rendered correctly 1`] = `
                   }
                 >
                   <span
-                    className="PrivateTabIndicator-root-2 PrivateTabIndicator-colorSecondary-4 indicator-tab"
+                    className="PrivateTabIndicator-root-1 PrivateTabIndicator-colorSecondary-3 indicator-tab"
                     style={
                       Object {
                         "left": 0,
diff --git a/src/components/EcogestureForm/EcogestureFormView.tsx b/src/components/EcogestureForm/EcogestureFormView.tsx
index 23dda80906d54d6babef45b41a01ca1238e0eba7..2e001b9fc2127c95c2b60a7dd8b8fda4ec4fd2f8 100644
--- a/src/components/EcogestureForm/EcogestureFormView.tsx
+++ b/src/components/EcogestureForm/EcogestureFormView.tsx
@@ -1,27 +1,26 @@
-import React, { useCallback, useEffect, useState } from 'react'
+import Content from 'components/Content/Content'
+import EcogestureFormEquipment from 'components/EcogestureForm/EcogestureFormEquipment'
+import EcogestureFormSingleChoice from 'components/EcogestureForm/EcogestureFormSingleChoice'
+import EcogestureLaunchFormModal from 'components/EcogestureForm/EcogestureLaunchFormModal'
 import CozyBar from 'components/Header/CozyBar'
 import Header from 'components/Header/Header'
-import Content from 'components/Content/Content'
-import { useSelector } from 'react-redux'
-import { AppStore } from 'store'
+import Loader from 'components/Loader/Loader'
+import ProfileTypeView from 'components/ProfileType/ProfileTypeView'
 import {
-  ProfileEcogestureAnswerType,
   EcogestureStepForm,
+  ProfileEcogestureAnswerType,
 } from 'enum/ecogestureForm.enum'
-import EcogestureFormSingleChoice from 'components/EcogestureForm/EcogestureFormSingleChoice'
-import EcogestureLaunchFormModal from 'components/EcogestureForm/EcogestureLaunchFormModal'
-import EcogestureFormEquipment from 'components/EcogestureForm/EcogestureFormEquipment'
+import { Profile } from 'models'
 import {
   ProfileEcogesture,
   ProfileEcogestureAnswer,
 } from 'models/profileEcogesture.model'
-import { Profile } from 'models'
+import React, { useCallback, useEffect, useState } from 'react'
+import { useSelector } from 'react-redux'
+import { useLocation } from 'react-router-dom'
 import ProfileEcogestureFormService from 'services/profileEcogestureForm.service'
-import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
-import { FluidType } from 'enum/fluid.enum'
+import { AppStore } from 'store'
 import './ecogestureFormView.scss'
-import { useLocation } from 'react-router-dom'
-import ProfileTypeView from 'components/ProfileType/ProfileTypeView'
 
 const EcogestureFormView: React.FC = () => {
   const [headerHeight, setHeaderHeight] = useState<number>(0)
@@ -92,7 +91,7 @@ const EcogestureFormView: React.FC = () => {
     return (
       <Content height={headerHeight}>
         <div className="se-loader-container">
-          <StyledSpinner size="5em" fluidType={FluidType.MULTIFLUID} />
+          <Loader />
         </div>
       </Content>
     )
diff --git a/src/components/EcogestureSelection/EcogestureSelection.tsx b/src/components/EcogestureSelection/EcogestureSelection.tsx
index 866bb07954f3b228000766ed24dd77102b885c49..1dd8fb2d7723aa408fd5c8e04bb628e1f9abb811 100644
--- a/src/components/EcogestureSelection/EcogestureSelection.tsx
+++ b/src/components/EcogestureSelection/EcogestureSelection.tsx
@@ -1,22 +1,21 @@
-import React, { useCallback, useEffect, useMemo, useState } from 'react'
-import './ecogestureSelection.scss'
-import { ProfileEcogesture } from 'models/profileEcogesture.model'
-import { useSelector } from 'react-redux'
-import { AppStore } from 'store'
-import { useClient } from 'cozy-client'
-import { useI18n } from 'cozy-ui/transpiled/react/I18n'
-import { Ecogesture } from 'models'
-import CozyBar from 'components/Header/CozyBar'
-import Header from 'components/Header/Header'
 import Content from 'components/Content/Content'
-import EcogestureService from 'services/ecogesture.service'
-import EcogestureSelectionModal from 'components/EcogestureSelection/EcogestureSelectionModal'
 import EcogestureSelectionDetail from 'components/EcogestureSelection/EcogestureSelectionDetail'
-import EcogestureSelectionRestart from 'components/EcogestureSelection/EcogestureSelectionRestart'
 import EcogestureSelectionEnd from 'components/EcogestureSelection/EcogestureSelectionEnd'
-import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
-import { FluidType } from 'enum/fluid.enum'
+import EcogestureSelectionModal from 'components/EcogestureSelection/EcogestureSelectionModal'
+import EcogestureSelectionRestart from 'components/EcogestureSelection/EcogestureSelectionRestart'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
+import Loader from 'components/Loader/Loader'
+import { useClient } from 'cozy-client'
+import { useI18n } from 'cozy-ui/transpiled/react/I18n'
+import { Ecogesture } from 'models'
+import { ProfileEcogesture } from 'models/profileEcogesture.model'
+import React, { useCallback, useEffect, useMemo, useState } from 'react'
+import { useSelector } from 'react-redux'
 import { useHistory } from 'react-router-dom'
+import EcogestureService from 'services/ecogesture.service'
+import { AppStore } from 'store'
+import './ecogestureSelection.scss'
 
 const EcogestureSelection: React.FC = () => {
   const { t } = useI18n()
@@ -117,7 +116,7 @@ const EcogestureSelection: React.FC = () => {
     return (
       <Content height={headerHeight}>
         <div className="eg-selection-loader">
-          <StyledSpinner size="5em" fluidType={FluidType.MULTIFLUID} />
+          <Loader />
         </div>
       </Content>
     )
diff --git a/src/components/FluidChart/FluidChart.tsx b/src/components/FluidChart/FluidChart.tsx
index ff1a4bc3cd0016ff7fac04fffe00890665d2b211..c3257a3245a907111dae927a396301085d141e53 100644
--- a/src/components/FluidChart/FluidChart.tsx
+++ b/src/components/FluidChart/FluidChart.tsx
@@ -1,20 +1,19 @@
-import useExploration from 'components/Hooks/useExploration'
-import { useClient } from 'cozy-client'
-import { useI18n } from 'cozy-ui/transpiled/react/I18n'
-import React, { useEffect, useState } from 'react'
-import { useSelector } from 'react-redux'
-import { AppStore } from 'store'
-import './fluidChart.scss'
-
 import StyledSwitch from 'components/CommonKit/Switch/StyledSwitch'
 import HalfHourNoData from 'components/HalfHourNoData/HalfHourNoData'
+import useExploration from 'components/Hooks/useExploration'
 import TimeStepSelector from 'components/TimeStepSelector/TimeStepSelector'
+import { useClient } from 'cozy-client'
+import { useI18n } from 'cozy-ui/transpiled/react/I18n'
 import { FluidType } from 'enum/fluid.enum'
 import { TimeStep } from 'enum/timeStep.enum'
 import { UsageEventType } from 'enum/usageEvent.enum'
 import { UserExplorationID } from 'enum/userExploration.enum'
+import React, { useEffect, useState } from 'react'
+import { useSelector } from 'react-redux'
 import ConsumptionService from 'services/consumption.service'
 import UsageEventService from 'services/usageEvent.service'
+import { AppStore } from 'store'
+import './fluidChart.scss'
 import FluidChartSwipe from './FluidChartSwipe'
 
 interface FluidChartProps {
diff --git a/src/components/FluidChart/FluidChartSlide.tsx b/src/components/FluidChart/FluidChartSlide.tsx
index 1959cbfab0b9db77cb825fe1ed4ccbb674312350..1a60fb84ad09dbba3a7183343d8b690536dddacb 100644
--- a/src/components/FluidChart/FluidChartSlide.tsx
+++ b/src/components/FluidChart/FluidChartSlide.tsx
@@ -1,20 +1,18 @@
-import React, { useState, useEffect } from 'react'
-import './fluidChartSlide.scss'
+import BarChart from 'components/Charts/BarChart'
+import ConsumptionVisualizer from 'components/ConsumptionVisualizer/ConsumptionVisualizer'
+import Loader from 'components/Loader/Loader'
 import { useClient } from 'cozy-client'
-import { useDispatch, useSelector } from 'react-redux'
-import { AppStore } from 'store'
-import { setCurrentDatachart, setLoading } from 'store/chart/chart.actions'
-import { DateTime } from 'luxon'
-
 import { FluidType } from 'enum/fluid.enum'
+import { TimeStep } from 'enum/timeStep.enum'
+import { DateTime } from 'luxon'
 import { Datachart } from 'models'
+import React, { useEffect, useState } from 'react'
+import { useDispatch, useSelector } from 'react-redux'
 import ConsumptionService from 'services/consumption.service'
 import DateChartService from 'services/dateChart.service'
-
-import BarChart from 'components/Charts/BarChart'
-import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
-import { TimeStep } from 'enum/timeStep.enum'
-import ConsumptionVisualizer from 'components/ConsumptionVisualizer/ConsumptionVisualizer'
+import { AppStore } from 'store'
+import { setCurrentDatachart, setLoading } from 'store/chart/chart.actions'
+import './fluidChartSlide.scss'
 
 interface FluidChartSlideProps {
   index: number
@@ -122,11 +120,9 @@ const FluidChartSlide: React.FC<FluidChartSlideProps> = ({
   return (
     <div className={'fluidchartslide-root'} aria-busy={!isDataLoaded}>
       {!isDataLoaded ? (
-        <StyledSpinner
-          size="5em"
-          fluidType={fluidType}
-          className="data-spinner"
-        />
+        <div className="data-spinner">
+          <Loader fluidType={fluidType} />
+        </div>
       ) : (
         <>
           <ConsumptionVisualizer
diff --git a/src/components/FluidChart/fluidChartSlide.scss b/src/components/FluidChart/fluidChartSlide.scss
index cd629bab5d4e630bc397840ea8f3e94852a9db68..4e062f5b08335e1f8a0f279050e7ef9afd4a6650 100644
--- a/src/components/FluidChart/fluidChartSlide.scss
+++ b/src/components/FluidChart/fluidChartSlide.scss
@@ -11,6 +11,6 @@
     min-height: 14rem;
   }
   .data-spinner {
-    margin-top: 4rem;
+    margin-top: 5rem;
   }
 }
diff --git a/src/components/Home/ConsumptionView.spec.tsx b/src/components/Home/ConsumptionView.spec.tsx
index 2999134ba5b3aa3bdb4b0024b447e1c6d185f485..63e4c5b66e0256d4d20b9beb77f5a9298c9bd0df 100644
--- a/src/components/Home/ConsumptionView.spec.tsx
+++ b/src/components/Home/ConsumptionView.spec.tsx
@@ -1,4 +1,4 @@
-import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
+import Loader from 'components/Loader/Loader'
 import { FluidState, FluidType } from 'enum/fluid.enum'
 import { TimeStep } from 'enum/timeStep.enum'
 import { mount } from 'enzyme'
@@ -106,7 +106,7 @@ describe('ConsumptionView component', () => {
     expect(wrapper.find('mock-cozybar').exists()).toBeTruthy()
     expect(wrapper.find('mock-header').exists()).toBeTruthy()
     expect(wrapper.find('mock-datenavigator').exists()).toBeTruthy()
-    expect(wrapper.find(StyledSpinner).exists()).toBeTruthy()
+    expect(wrapper.find(Loader).exists()).toBeTruthy()
   })
 
   it('should set CurrentTimeStep to WEEK when fluid != ELECTRICITY and timeStep = HALF_AN_HOUR', () => {
diff --git a/src/components/Home/ConsumptionView.tsx b/src/components/Home/ConsumptionView.tsx
index d2ff3c66ed11f6960bcde245341bc141d15827f8..0ca0095e676d62565d6d6ce53bbcc8fc994ac8ed 100644
--- a/src/components/Home/ConsumptionView.tsx
+++ b/src/components/Home/ConsumptionView.tsx
@@ -1,41 +1,38 @@
-import React, { useCallback, useEffect, useState } from 'react'
-import './consumptionView.scss'
-import { useSelector, useDispatch } from 'react-redux'
-import { AppStore } from 'store'
 import { FluidType } from 'enum/fluid.enum'
 import { TimeStep } from 'enum/timeStep.enum'
+import React, { useCallback, useEffect, useState } from 'react'
+import { useDispatch, useSelector } from 'react-redux'
+import { AppStore } from 'store'
+import './consumptionView.scss'
 
-import StyledSpinner from 'components/CommonKit/Spinner/StyledSpinner'
-import CozyBar from 'components/Header/CozyBar'
-import Header from 'components/Header/Header'
+import classNames from 'classnames'
+import ExpiredConsentModal from 'components/Connection/ExpiredConsentModal'
 import Content from 'components/Content/Content'
-import FluidChart from 'components/FluidChart/FluidChart'
+import CustomPopupModal from 'components/CustomPopup/CustomPopupModal'
 import DateNavigator from 'components/DateNavigator/DateNavigator'
-import { setCurrentTimeStep, setLoading } from 'store/chart/chart.actions'
+import FluidChart from 'components/FluidChart/FluidChart'
+import CozyBar from 'components/Header/CozyBar'
+import Header from 'components/Header/Header'
 import ConsumptionDetails from 'components/Home/ConsumptionDetails'
 import FluidButtons from 'components/Home/FluidButtons'
 import KonnectorViewerCard from 'components/Konnector/KonnectorViewerCard'
 import KonnectorViewerList from 'components/Konnector/KonnectorViewerList'
-import classNames from 'classnames'
+import Loader from 'components/Loader/Loader'
+import PartnersIssueModal from 'components/PartnersIssue/PartnersIssueModal'
+import { useClient } from 'cozy-client'
+import ProfileService from 'services/profile.service'
+import { setCurrentTimeStep, setLoading } from 'store/chart/chart.actions'
+import {
+  setCustomPopup,
+  setPartnersIssue,
+  showReleaseNotes,
+} from 'store/global/global.actions'
 import {
   getKonnectorUpdateError,
   getTodayDate,
   isKonnectorActive,
 } from 'utils/utils'
 import ReleaseNotesModal from './releaseNotesModal'
-import {
-  setCustomPopup,
-  setPartnersIssue,
-  showReleaseNotes,
-} from 'store/global/global.actions'
-import PartnersIssueModal from 'components/PartnersIssue/PartnersIssueModal'
-import ProfileService from 'services/profile.service'
-import { useClient } from 'cozy-client'
-import ExpiredConsentModal from 'components/Connection/ExpiredConsentModal'
-import CustomPopupModal from 'components/CustomPopup/CustomPopupModal'
-import KonnectorModal from 'components/Konnector/KonnectorModal'
-
-import { KonnectorError } from 'enum/konnectorError.enum'
 interface ConsumptionViewProps {
   fluidType: FluidType
 }
@@ -163,7 +160,7 @@ const ConsumptionView: React.FC<ConsumptionViewProps> = ({
           <>
             {loading && (
               <div className={'consumptionview-loading'} aria-busy="true">
-                <StyledSpinner size="5em" fluidType={fluidType} />
+                <Loader fluidType={fluidType} />
               </div>
             )}
             <div
diff --git a/src/components/Loader/Loader.scss b/src/components/Loader/Loader.scss
new file mode 100644
index 0000000000000000000000000000000000000000..c8b8d132d7898d08b4a1f532bebd9c0c0d8135b3
--- /dev/null
+++ b/src/components/Loader/Loader.scss
@@ -0,0 +1,52 @@
+@import 'src/styles/base/color';
+
+.loader {
+  height: 50px;
+  margin: auto;
+  display: flex;
+  align-items: flex-end;
+  gap: 8px;
+
+  &.gold {
+    color: $gold;
+  }
+
+  &.gaz {
+    color: $gas-color;
+  }
+
+  &.elec {
+    color: $elec-color;
+  }
+
+  &.water {
+    color: $water-color;
+  }
+
+  &.black {
+    color: $dark;
+  }
+
+  .bar {
+    width: 10px;
+    border-radius: 5px;
+    background: currentColor;
+    // Negative delay to fix bar appearing after delay
+    animation: load 0.4s -0.4s linear infinite alternate;
+    &:nth-child(1) {
+      animation-delay: -0.1s;
+    }
+    &:nth-child(3) {
+      animation-delay: -0.55s;
+    }
+  }
+
+  @keyframes load {
+    0% {
+      height: 20%;
+    }
+    100% {
+      height: 100%;
+    }
+  }
+}
diff --git a/src/components/Loader/Loader.spec.tsx b/src/components/Loader/Loader.spec.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..231c5b013606758b577ee2be1abef4973f99fa88
--- /dev/null
+++ b/src/components/Loader/Loader.spec.tsx
@@ -0,0 +1,36 @@
+import { FluidType } from 'enum/fluid.enum'
+import { mount } from 'enzyme'
+import React from 'react'
+import Loader from './Loader'
+
+jest.mock('cozy-ui/transpiled/react/I18n', () => {
+  return {
+    useI18n: jest.fn(() => {
+      return {
+        t: (str: string) => str,
+      }
+    }),
+  }
+})
+
+describe('Loader component', () => {
+  it('should render base Loader', () => {
+    const wrapper = mount(<Loader />)
+    expect(wrapper.getElement()).toMatchSnapshot()
+  })
+
+  it('should render Electricity Loader', () => {
+    const wrapper = mount(<Loader color="elec" />)
+    expect(wrapper.getElement()).toMatchSnapshot()
+  })
+
+  it('should render Water Loader', () => {
+    const wrapper = mount(<Loader fluidType={FluidType.WATER} />)
+    expect(wrapper.getElement()).toMatchSnapshot()
+  })
+
+  it('should render Gas Loader', () => {
+    const wrapper = mount(<Loader fluidType={FluidType.GAS} />)
+    expect(wrapper.getElement()).toMatchSnapshot()
+  })
+})
diff --git a/src/components/Loader/Loader.tsx b/src/components/Loader/Loader.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..09aef3ec4626b91e1cfd7f0cd8b29d7fa2bf9f77
--- /dev/null
+++ b/src/components/Loader/Loader.tsx
@@ -0,0 +1,47 @@
+import { useI18n } from 'cozy-ui/transpiled/react/I18n'
+import { FluidType } from 'enum/fluid.enum'
+import React from 'react'
+import './Loader.scss'
+
+interface color {
+  color?: 'gold' | 'gaz' | 'elec' | 'water' | 'black'
+  fluidType?: FluidType
+}
+
+/**
+ * Loader of Ecolyo, default color is gold
+ * @param color 'gold' | 'gaz' | 'elec' | 'water'
+ */
+const Loader = ({ color = 'gold', fluidType }: color) => {
+  const { t } = useI18n()
+
+  switch (fluidType) {
+    case FluidType.MULTIFLUID:
+      color = 'gold'
+      break
+    case FluidType.ELECTRICITY:
+      color = 'elec'
+      break
+    case FluidType.GAS:
+      color = 'gaz'
+      break
+    case FluidType.WATER:
+      color = 'water'
+      break
+  }
+
+  return (
+    <div
+      className={`loader ${color}`}
+      aria-busy="true"
+      aria-label={t('common.accessibility.loading')}
+      title={t('common.accessibility.loading')}
+    >
+      <div className="bar" />
+      <div className="bar" />
+      <div className="bar" />
+    </div>
+  )
+}
+
+export default Loader
diff --git a/src/components/Loader/__snapshots__/Loader.spec.tsx.snap b/src/components/Loader/__snapshots__/Loader.spec.tsx.snap
new file mode 100644
index 0000000000000000000000000000000000000000..e33f3c5b6e55146c70713ded38d7342c604476ea
--- /dev/null
+++ b/src/components/Loader/__snapshots__/Loader.spec.tsx.snap
@@ -0,0 +1,21 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Loader component should render Electricity Loader 1`] = `
+<Loader
+  color="elec"
+/>
+`;
+
+exports[`Loader component should render Gas Loader 1`] = `
+<Loader
+  fluidType={2}
+/>
+`;
+
+exports[`Loader component should render Water Loader 1`] = `
+<Loader
+  fluidType={1}
+/>
+`;
+
+exports[`Loader component should render base Loader 1`] = `<Loader />`;
diff --git a/src/components/Quiz/QuizCustomQuestionContent.spec.tsx b/src/components/Quiz/QuizCustomQuestionContent.spec.tsx
index eb0aca3e52f7a5ad175d58c688c1f9a4037dc2f4..0960911e61d9e891e68b6ec0cd13485e195df7b4 100644
--- a/src/components/Quiz/QuizCustomQuestionContent.spec.tsx
+++ b/src/components/Quiz/QuizCustomQuestionContent.spec.tsx
@@ -1,15 +1,15 @@
-import React from 'react'
+import Button from '@material-ui/core/Button'
+import Loader from 'components/Loader/Loader'
 import { mount } from 'enzyme'
+import React from 'react'
 import { Provider } from 'react-redux'
 import configureStore from 'redux-mock-store'
-import { userChallengeData } from '../../../tests/__mocks__/userChallengeData.mock'
-import { globalStateData } from '../../../tests/__mocks__/globalStateData.mock'
 import { challengeStateData } from '../../../tests/__mocks__/challengeStateData.mock'
-import Button from '@material-ui/core/Button'
-import QuizExplanationModal from './QuizExplanationModal'
-import QuizCustomQuestionContent from './QuizCustomQuestionContent'
+import { globalStateData } from '../../../tests/__mocks__/globalStateData.mock'
 import { questionEntity } from '../../../tests/__mocks__/quizData.mock'
-import StyledSpinner from 'components/CommonKit/Spinner/StyledEcogestureSpinner'
+import { userChallengeData } from '../../../tests/__mocks__/userChallengeData.mock'
+import QuizCustomQuestionContent from './QuizCustomQuestionContent'
+import QuizExplanationModal from './QuizExplanationModal'
 
 jest.mock('cozy-ui/transpiled/react/I18n', () => {
   return {
@@ -95,7 +95,7 @@ describe('QuizCustomQuestionContent component', () => {
         />
       </Provider>
     )
-    expect(wrapper.find(StyledSpinner).exists()).toBeTruthy()
+    expect(wrapper.find(Loader).exists()).toBeTruthy()
   })
   it('should display QuizExplanationModal when click on Button', () => {
     const store = mockStore({
diff --git a/src/components/Quiz/QuizCustomQuestionContent.tsx b/src/components/Quiz/QuizCustomQuestionContent.tsx
index aaf01eda04459383d30810d47581c3dc93d0a751..a5a38de7729980d4b2ac950bf59d1ba4d0c0cbf6 100644
--- a/src/components/Quiz/QuizCustomQuestionContent.tsx
+++ b/src/components/Quiz/QuizCustomQuestionContent.tsx
@@ -1,20 +1,20 @@
-import React, { useState } from 'react'
-import './quizQuestion.scss'
+import Button from '@material-ui/core/Button'
 import CloseIcon from 'assets/icons/ico/close.svg'
 import StyledIconButton from 'components/CommonKit/IconButton/StyledIconButton'
-import Button from '@material-ui/core/Button'
+import Loader from 'components/Loader/Loader'
 import QuizExplanationModal from 'components/Quiz/QuizExplanationModal'
+import { Client, useClient } from 'cozy-client'
 import { useI18n } from 'cozy-ui/transpiled/react/I18n'
+import { UsageEventType } from 'enum/usageEvent.enum'
+import { UserChallengeUpdateFlag } from 'enum/userChallenge.enum'
 import { Answer, QuestionEntity, UserChallenge, UserQuiz } from 'models'
+import React, { useState } from 'react'
+import { useDispatch } from 'react-redux'
 import ChallengeService from 'services/challenge.service'
 import QuizService from 'services/quiz.service'
-import { Client, useClient } from 'cozy-client'
-import { UserChallengeUpdateFlag } from 'enum/userChallenge.enum'
-import { updateUserChallengeList } from 'store/challenge/challenge.actions'
-import { useDispatch } from 'react-redux'
-import StyledSpinner from 'components/CommonKit/Spinner/StyledEcogestureSpinner'
 import UsageEventService from 'services/usageEvent.service'
-import { UsageEventType } from 'enum/usageEvent.enum'
+import { updateUserChallengeList } from 'store/challenge/challenge.actions'
+import './quizQuestion.scss'
 
 interface QuizCustomQuestionContent {
   userChallenge: UserChallenge
@@ -100,7 +100,7 @@ const QuizCustomQuestionContent: React.FC<QuizCustomQuestionContent> = ({
 
         {isLoading ? (
           <div className={'question-loading'} aria-busy="true">
-            <StyledSpinner />
+            <Loader />
           </div>
         ) : (
           question && (