diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index 33f14aadd44643361f50efd8f3e0c832bd0249f9..2826cb076a9a906b28bb3136657d3a3fabc9b4a9 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -1,9 +1,8 @@
-import React, { useState, Suspense } from 'react'
+import React, { useState } from 'react'
 import { useTranslation } from 'react-i18next'
 
 import './App.css'
 
-import './i18n'
 import { Button } from './components/button'
 
 import { appTimezone, appVersion, appTheme } from './appConfig'
@@ -31,48 +30,41 @@ const App = () => {
   }
 
   return (
-    <Suspense fallback="loading">
-      <div className="App">
-        <header className="App-header">
-          <Button href="https://example.com" target="_blank" rel="noopener">
-            Knapp
-          </Button>
-          <Button
-            href="https://example.com"
-            target="_blank"
-            rel="noopener"
-            pink
-          >
-            Rosa knapp
-          </Button>
+    <div className="App">
+      <header className="App-header">
+        <Button href="https://example.com" target="_blank" rel="noopener">
+          Knapp
+        </Button>
+        <Button href="https://example.com" target="_blank" rel="noopener">
+          Rosa knapp
+        </Button>
 
-          <p>{t('common:test')}</p>
-          <p>{t('common:nested.test')}</p>
-          <p>{t('footer:footerInfo')}</p>
+        <p>{t('common:test')}</p>
+        <p>{t('common:nested.test')}</p>
+        <p>{t('footer:footerInfo')}</p>
 
-          <Button
-            onClick={() =>
-              i18n.language === 'en'
-                ? i18n.changeLanguage('nb')
-                : i18n.changeLanguage('en')
-            }
-          >
-            {t('common:language.change', {
-              lang: i18n.language === 'en' ? 'Norsk' : 'Engelsk',
-            })}
-          </Button>
-          <p>
-            Version {appVersion}
-            <br />
-            Timezone {appTimezone}
-            <br />
-            Theme {appTheme}
-            <br />
-            API reachable? {apiHealth}
-          </p>
-        </header>
-      </div>
-    </Suspense>
+        <Button
+          onClick={() =>
+            i18n.language === 'en'
+              ? i18n.changeLanguage('nb')
+              : i18n.changeLanguage('en')
+          }
+        >
+          {t('common:language.change', {
+            lang: i18n.language === 'en' ? 'Norsk' : 'Engelsk',
+          })}
+        </Button>
+        <p>
+          Version {appVersion}
+          <br />
+          Timezone {appTimezone}
+          <br />
+          Theme {appTheme}
+          <br />
+          API reachable? {apiHealth}
+        </p>
+      </header>
+    </div>
   )
 }
 
diff --git a/frontend/src/components/button/index.tsx b/frontend/src/components/button/index.tsx
index 88caf48ec2e523f62ef09c714aa6d17d0cf60583..a585ca36cfad3bf1a20e8045f7114f403786a1c2 100644
--- a/frontend/src/components/button/index.tsx
+++ b/frontend/src/components/button/index.tsx
@@ -1,7 +1,7 @@
-import styled from 'styled-components/macro'
+import styled, { DefaultTheme } from 'styled-components/macro'
 
 type ButtonProps = {
-  pink?: boolean
+  theme: DefaultTheme
 }
 
 export const Button = styled.a<ButtonProps>`
@@ -13,11 +13,9 @@ export const Button = styled.a<ButtonProps>`
   background: black;
   color: white;
   border: 2px solid white;
-
-  ${(props) =>
-    props.pink &&
-    `
-      background: pink;
-      color: black;
-    `}
+  :hover {
+    background: ${(props) => props.theme.colors.secondary};
+    color: black;
+  }
+  background: ${(props) => props.theme.colors.main};
 `
diff --git a/frontend/src/globalStyles.ts b/frontend/src/globalStyles.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d8ce82cb9f611dc17a060974a3fcf0a698afed49
--- /dev/null
+++ b/frontend/src/globalStyles.ts
@@ -0,0 +1,18 @@
+import { createGlobalStyle } from 'styled-components/macro'
+
+const GlobalStyle = createGlobalStyle`
+  body {
+    margin: 0;
+    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
+      'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;
+    -webkit-font-smoothing: antialiased;
+    -moz-osx-font-smoothing: grayscale;
+  }
+
+  code {
+    font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
+      monospace;
+  }
+`
+
+export default GlobalStyle
diff --git a/frontend/src/index.css b/frontend/src/index.css
deleted file mode 100644
index ec2585e8c0bb8188184ed1e0703c4c8f2a8419b0..0000000000000000000000000000000000000000
--- a/frontend/src/index.css
+++ /dev/null
@@ -1,13 +0,0 @@
-body {
-  margin: 0;
-  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
-    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
-    sans-serif;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-
-code {
-  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
-    monospace;
-}
diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx
index ba3503c6e89f4cc311e5d0ec52b6b0ab6e7f1239..38d872db9f1fd3f29554275c2b8f272e22051003 100644
--- a/frontend/src/index.tsx
+++ b/frontend/src/index.tsx
@@ -1,15 +1,29 @@
-import React from 'react'
+import React, { Suspense } from 'react'
 import ReactDOM from 'react-dom'
-import './index.css'
+import { ThemeProvider } from 'styled-components/macro'
+
+import 'i18n'
+import getCurrentTheme from 'theme'
+import GlobalStyle from 'globalStyles'
 import App from './App'
 import reportWebVitals from './reportWebVitals'
 
-ReactDOM.render(
-  <React.StrictMode>
-    <App />
-  </React.StrictMode>,
-  document.getElementById('root')
-)
+function appRoot() {
+  return (
+    <>
+      <React.StrictMode>
+        <GlobalStyle />
+        <Suspense fallback="loading">
+          <ThemeProvider theme={getCurrentTheme()}>
+            <App />
+          </ThemeProvider>
+        </Suspense>
+      </React.StrictMode>
+    </>
+  )
+}
+
+ReactDOM.render(React.createElement(appRoot), document.getElementById('root'))
 
 // If you want to start measuring performance in your app, pass a function
 // to log results (for example: reportWebVitals(console.log))
diff --git a/frontend/src/styled.d.ts b/frontend/src/styled.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5e734c377a971d0e8620827d4dcdd09b44acecbf
--- /dev/null
+++ b/frontend/src/styled.d.ts
@@ -0,0 +1,11 @@
+import 'styled-components/macro'
+
+declare module 'styled-components' {
+  export interface DefaultTheme {
+    borderRadius: string
+    colors: {
+      main: string
+      secondary: string
+    }
+  }
+}
diff --git a/frontend/src/theme.ts b/frontend/src/theme.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ffaa284f6d07cdbb29f9683fe3bab5604d03aac0
--- /dev/null
+++ b/frontend/src/theme.ts
@@ -0,0 +1,17 @@
+import { appTheme } from 'appConfig'
+import { defaultTheme, uibTheme, uioTheme } from 'themes'
+
+const getCurrentTheme = () => {
+  switch (appTheme) {
+    case 'uib':
+      return uibTheme
+    case 'uio':
+      return uioTheme
+    case 'default':
+      return defaultTheme
+    default:
+      return defaultTheme
+  }
+}
+
+export default getCurrentTheme
diff --git a/frontend/src/themes/default.ts b/frontend/src/themes/default.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3616c5fb2a643f76747bd25931372eb7d190175a
--- /dev/null
+++ b/frontend/src/themes/default.ts
@@ -0,0 +1,14 @@
+import { DefaultTheme } from 'styled-components/macro'
+
+const white = '#FFFFFF'
+const hotPink = '#FF69B4'
+
+const defaultTheme: DefaultTheme = {
+  borderRadius: '10px',
+  colors: {
+    main: hotPink,
+    secondary: white,
+  },
+}
+
+export default defaultTheme
diff --git a/frontend/src/themes/index.ts b/frontend/src/themes/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5cb8639f9ec0052abd12645691364ae1f863ec12
--- /dev/null
+++ b/frontend/src/themes/index.ts
@@ -0,0 +1,5 @@
+import uioTheme from 'themes/uio'
+import uibTheme from 'themes/uib'
+import defaultTheme from 'themes/default'
+
+export { defaultTheme, uioTheme, uibTheme }
diff --git a/frontend/src/themes/uib.ts b/frontend/src/themes/uib.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1ca0d8fe13bce57a28ae08ce4583aae7bbd8ce66
--- /dev/null
+++ b/frontend/src/themes/uib.ts
@@ -0,0 +1,14 @@
+import { DefaultTheme } from 'styled-components'
+
+const white = '#FFFFFF'
+const hotPink = '#FF69B4'
+
+const uibTheme: DefaultTheme = {
+  borderRadius: '10px',
+  colors: {
+    main: hotPink,
+    secondary: white,
+  },
+}
+
+export default uibTheme
diff --git a/frontend/src/themes/uio.ts b/frontend/src/themes/uio.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a7df2f2b761c0b7c1aa989751b5274eabc119634
--- /dev/null
+++ b/frontend/src/themes/uio.ts
@@ -0,0 +1,14 @@
+import { DefaultTheme } from 'styled-components/macro'
+
+const white = '#FFFFFF'
+const hotPink = '#FF69B4'
+
+const uioTheme: DefaultTheme = {
+  borderRadius: '10px',
+  colors: {
+    main: hotPink,
+    secondary: white,
+  },
+}
+
+export default uioTheme