diff --git a/opentech/static_src/package.json b/opentech/static_src/package.json
index db77b290e966c978ffcfa757115a71c56573f4bf..44baaff128e2a57e3ed984c55b13427561676a22 100755
--- a/opentech/static_src/package.json
+++ b/opentech/static_src/package.json
@@ -16,9 +16,11 @@
     "src_js": "src/javascript",
     "src_css": "src/sass",
     "src_img": "src/images",
+    "src_font": "src/fonts",
     "dest_js": "../static_compiled/js",
     "dest_css": "../static_compiled/css",
     "dest_img": "../static_compiled/images",
+    "dest_font": "../static_compiled/fonts",
     "dist": "../static_compiled"
   },
   "scripts": {
@@ -30,6 +32,7 @@
     "create_dirs:dest_js": "mkdir -p $npm_package_config_dest_js",
     "create_dirs:dest_css": "mkdir -p $npm_package_config_dest_css",
     "create_dirs:dest_img": "mkdir -p $npm_package_config_dest_img",
+    "create_dirs:dest_font": "mkdir -p $npm_package_config_dest_font",
     "create_dirs": "npm-run-all -p create_dirs:*",
     "clean:dist": "rm -rf $npm_package_config_dist/{js/**,css/**,images/**}",
     "clean": "npm-run-all -p clean:*",
@@ -56,6 +59,8 @@
     "lint": "npm-run-all -p lint:js lint:css",
 
     "//[ Watches ]//": "",
+    "watch:font": "onchange $npm_package_config_src_font'/**/**' -- npm-run-all sync:font reload",
+    "watch:font:debug": "onchange $npm_package_config_src_font'/**/**' -- npm-run-all sync:font",
     "watch:img": "onchange $npm_package_config_src_img'/**/**' -- npm-run-all sync:img reload",
     "watch:img:debug": "onchange $npm_package_config_src_img'/**/**' -- npm-run-all sync:img",
     "watch:js": "onchange $npm_package_config_dest_js'/**/**' -- npm-run-all -p reload lint:js",
@@ -64,6 +69,7 @@
     "watch": "npm-run-all -p watch:*",
 
     "//[ Syncs ]//": "",
+    "sync:fonts": "rsync -rtvu --delete $npm_package_config_src_font/ $npm_package_config_dest_font/",
     "sync:img": "rsync -rtvu --delete $npm_package_config_src_img/ $npm_package_config_dest_img/",
     "sync": "npm-run-all -p sync:*",
 
diff --git a/opentech/static_src/src/fonts/proxima-nova/proxima-nova-black.woff b/opentech/static_src/src/fonts/proxima-nova/proxima-nova-black.woff
new file mode 100755
index 0000000000000000000000000000000000000000..7b147d6a86ee1580be6ab7ff771b4cb4e767a1c4
Binary files /dev/null and b/opentech/static_src/src/fonts/proxima-nova/proxima-nova-black.woff differ
diff --git a/opentech/static_src/src/fonts/proxima-nova/proxima-nova-bold.woff b/opentech/static_src/src/fonts/proxima-nova/proxima-nova-bold.woff
new file mode 100755
index 0000000000000000000000000000000000000000..9de6cca826816417c78df4ab3bb01b07d6bb6a92
Binary files /dev/null and b/opentech/static_src/src/fonts/proxima-nova/proxima-nova-bold.woff differ
diff --git a/opentech/static_src/src/fonts/proxima-nova/proxima-nova-regular.woff b/opentech/static_src/src/fonts/proxima-nova/proxima-nova-regular.woff
new file mode 100755
index 0000000000000000000000000000000000000000..3563df1c41e92bea70e2b2ce050c8bd4c365ba77
Binary files /dev/null and b/opentech/static_src/src/fonts/proxima-nova/proxima-nova-regular.woff differ
diff --git a/opentech/static_src/src/fonts/proxima-nova/proxima-nova-semibold.woff b/opentech/static_src/src/fonts/proxima-nova/proxima-nova-semibold.woff
new file mode 100644
index 0000000000000000000000000000000000000000..6b1a817bcb289baefcc5b617725eeaabe2afedd2
Binary files /dev/null and b/opentech/static_src/src/fonts/proxima-nova/proxima-nova-semibold.woff differ
diff --git a/opentech/static_src/src/fonts/proxima-nova/proxima-nova-thin.woff b/opentech/static_src/src/fonts/proxima-nova/proxima-nova-thin.woff
new file mode 100755
index 0000000000000000000000000000000000000000..27183b3628dadf08f801558e306241089d59224b
Binary files /dev/null and b/opentech/static_src/src/fonts/proxima-nova/proxima-nova-thin.woff differ
diff --git a/opentech/static_src/src/sass/abstracts/_mixins.scss b/opentech/static_src/src/sass/abstracts/_mixins.scss
index 199de35c9a587d95b3737727042ccfd53e04ed90..ec2c41c0b41b1d6729e8a571e504a80365127f3c 100755
--- a/opentech/static_src/src/sass/abstracts/_mixins.scss
+++ b/opentech/static_src/src/sass/abstracts/_mixins.scss
@@ -1,11 +1,4 @@
-/*------------------------------------*\
-    $MIXINS
-\*------------------------------------*/
-
-
-/* ============================================
-    Media queries
-*/
+// Media queries
 @mixin media-query($queries...) {
     @each $query in $queries {
         @each $breakpoint in $breakpoints {
@@ -21,10 +14,7 @@
     }
 }
 
-
-/* ============================================
-  Placeholder text
-*/
+//   Placeholder text
 @mixin placeholder-text {
     // sass-lint:disable no-vendor-prefixes
     &.placeholder { @content; }
@@ -35,10 +25,7 @@
     // sass-lint:enddisable
 }
 
-
-/* ============================================
-  Hide text
-*/
+// Hide text
 @mixin hidden {
     position: absolute;
     width: 1px;
@@ -47,20 +34,14 @@
     clip: rect(1px, 1px, 1px, 1px);
 }
 
-
-/* ============================================
-  iOS Native vertical scroll
-*/
+// iOS Native vertical scroll
 @mixin native-vertical-scroll {
     overflow-x: hidden;
     overflow-y: scroll;
     -webkit-overflow-scrolling: touch; // sass-lint:disable-line no-misspelled-properties
 }
 
-
-/* ============================================
-    Output a rem and px fallback value for the given property
-*/
+// Output a rem and px fallback value for the given property
 @mixin rem($property, $values) {
 
     $px:  ();
@@ -81,18 +62,12 @@
     // sass-lint:enddisable
 }
 
-
-/* ============================================
-    Output a `font-size: [x]rem;` declaration for the given px value
-*/
+// Output a `font-size: [x]rem;` declaration for the given px value
 @mixin rem-font-size($font-size) {
     @include rem(font-size, $font-size);
 }
 
-
-/* ============================================
-    Font sizes
-*/
+// Font sizes
 @mixin font-size($keyword) {
     $size: map-get($font-sizes, $keyword);
 
@@ -102,3 +77,20 @@
         @include rem-font-size($size);
     }
 }
+
+// button mixin
+@mixin button($bg) {
+    padding: 10px 60px;
+    background: $bg;
+    border: 1px solid $color--white;
+    transition: background $transition;
+
+    &:hover {
+        background: darken($bg, 8%);
+        transition: background $transition;
+    }
+
+    &:active {
+        background: darken($bg, 25%);
+    }
+}
diff --git a/opentech/static_src/src/sass/abstracts/_variables.scss b/opentech/static_src/src/sass/abstracts/_variables.scss
index a8f2537c50220ea532735a09b5a247df32681281..1bb4eb1642f1be7157545f6e922a1781f2d04065 100755
--- a/opentech/static_src/src/sass/abstracts/_variables.scss
+++ b/opentech/static_src/src/sass/abstracts/_variables.scss
@@ -1,11 +1,12 @@
-$color--primary: #6a737c;
-$color--secondary: #eaeaea;
-$color--tertiary: #f9f9f9;
-
 $color--white: #fff;
 $color--black: #141414;
+$color--light-blue: #43bbf1;
+$color--dark-blue: #25aae1;
 
 $color--default: $color--black;
+$color--primary: $color--light-blue;
+$color--secondary: #eaeaea;
+$color--tertiary: #f9f9f9;
 
 // Button colours
 $button-colours: (
@@ -15,13 +16,13 @@ $button-colours: (
 );
 
 // Fonts
-$font--primary: Sans-Serif;
+$font--primary: 'proxima-nova';
 $font--secondary: Sans-Serif;
 
 // Font weights
+$weight--black: 800;
 $weight--bold: 700;
 $weight--semibold: 600;
-$weight--medium: 500;
 $weight--normal: 400;
 $weight--light: 200;
 
@@ -36,15 +37,15 @@ $font-sizes: (
     kilo:    48px,
 
     // standard sizes
-    alpha:   38px,
-    beta:    30px,
-    gamma:   28px,
-    delta:   22px,
-    epsilon: 20px,
-    zeta:    16px,
+    alpha:   72px,
+    beta:    42px,
+    gamma:   36px,
+    delta:   24px,
+    epsilon: 17px,
+    zeta:    15px,
 
     // non-standard small sizes
-    milli:   14px
+    milli:   13px
 );
 
 // Wrappers
diff --git a/opentech/static_src/src/sass/base/_base.scss b/opentech/static_src/src/sass/base/_base.scss
index f70346dce13c3f091f299009c20b9d5be70dd70b..010b745f8461fbde64b3f299541cb2774068b832 100755
--- a/opentech/static_src/src/sass/base/_base.scss
+++ b/opentech/static_src/src/sass/base/_base.scss
@@ -20,7 +20,6 @@ html {
 
 body {
     overflow-x: hidden;
-    background-color: $color--tertiary;
 
     &.no-scroll {
         overflow-y: hidden;
@@ -62,3 +61,27 @@ ol {
     margin: 0;
     list-style: none;
 }
+
+.is-invisible,
+%is-invisible {
+    z-index: -1;
+    opacity: 0;
+    transition: opacity, z-index, $transition;
+}
+
+.is-visible,
+%is-visible {
+    z-index: 5;
+    opacity: 1;
+    transition: opacity, z-index, $transition;
+}
+
+.is-hidden,
+%is-hidden {
+    display: none;
+}
+
+.is-unhidden,
+%is-unhidden {
+    display: block;
+}
diff --git a/opentech/static_src/src/sass/base/_typography.scss b/opentech/static_src/src/sass/base/_typography.scss
index 5c24ba65448cb5278bc053379b4410574c13008c..f69ab26e1ec9aab4c4350c19be8248a0a284d7d7 100755
--- a/opentech/static_src/src/sass/base/_typography.scss
+++ b/opentech/static_src/src/sass/base/_typography.scss
@@ -59,14 +59,82 @@ blockquote {
 }
 
 // Default sizes
-h1, .alpha   { @include font-size(alpha); }
-h2, .beta    { @include font-size(beta); }
-h3, .gamma   { @include font-size(gamma); }
-h4, .delta   { @include font-size(delta); }
-h5, .epsilon { @include font-size(epsilon); }
-h6, .zeta    { @include font-size(zeta); }
+h1, .alpha   {
+    @include font-size(alpha);
+    font-weight: $weight--black;
+}
+
+h2, .beta    {
+    @include font-size(beta);
+    font-weight: $weight--bold;
+}
+
+h3, .gamma   {
+    @include font-size(gamma);
+    font-weight: $weight--light;
+}
+
+h4, .delta   {
+    @include font-size(delta);
+    font-weight: $weight--bold;
+}
+
+h5, .epsilon {
+    @include font-size(epsilon);
+    font-weight: $weight--bold;
+}
+
+h6, .zeta    {
+    @include font-size(zeta);
+    font-weight: $weight--bold;
+}
 
 .giga { @include font-size(giga); }
 .mega { @include font-size(mega); }
 .kilo { @include font-size(kilo); }
 small, .milli { @include font-size(milli); }
+
+// thin
+@font-face {
+    font-family: 'proxima-nova';
+    font-style: normal;
+    font-weight: 200;
+    src: url('./../fonts/proxima-nova/proxima-nova-thin.woff') format('woff');
+    text-rendering: optimizeLegibility;
+}
+
+// regular
+@font-face {
+    font-family: 'proxima-nova';
+    font-style: normal;
+    font-weight: 400;
+    src: url('./../fonts/proxima-nova/proxima-nova-regular.woff') format('woff');
+    text-rendering: optimizeLegibility;
+}
+
+// semibold
+@font-face {
+    font-family: 'proxima-nova';
+    font-style: normal;
+    font-weight: 600;
+    src: url('./../fonts/proxima-nova/proxima-nova-semibold.woff') format('woff');
+    text-rendering: optimizeLegibility;
+}
+
+// bold
+@font-face {
+    font-family: 'proxima-nova';
+    font-style: normal;
+    font-weight: 700;
+    src: url('./../fonts/proxima-nova/proxima-nova-bold.woff') format('woff');
+    text-rendering: optimizeLegibility;
+}
+
+// black
+@font-face {
+    font-family: 'proxima-nova';
+    font-style: normal;
+    font-weight: 800;
+    src: url('./../fonts/proxima-nova/proxima-nova-black.woff') format('woff');
+    text-rendering: optimizeLegibility;
+}