www: Port the color scheme from forum stylehseet

Change-Id: I9bbd2f57d94529a5f0fcacbea7c1925eb2e76960
diff --git a/components/footer.html.twig b/components/footer.html.twig
index 9581e9f..52b636e 100644
--- a/components/footer.html.twig
+++ b/components/footer.html.twig
@@ -1,3 +1,10 @@
 <footer>
-  © 2022-2023 The LeafOS Project
-</footer>
\ No newline at end of file
+  <div class="container">
+    <h2>The LeafOS Project</h2>
+    <p>Open-source, AOSP-based Android custom ROM</p>
+    <p>© 2022-2023 The LeafOS Project</p>
+  </div>
+  <p class="footnote">
+    Website designed and developed by <a href="http://rlazarotto.pages.dev" target="_blank">Firehawk</a>.
+  </p>
+</footer>
diff --git a/components/navbar.html.twig b/components/navbar.html.twig
index ba37e7a..e4e5ead 100644
--- a/components/navbar.html.twig
+++ b/components/navbar.html.twig
@@ -1,7 +1,7 @@
 <input type="checkbox" id="toggle-aside" />
 <nav class="navbar">
   <input type="checkbox" id="toggle-navbar" />
-  <div style="display: flex;">
+  <div>
     {% if showSidenav %}
       <label for="toggle-aside" class="label-aside">
         <span class="icon-bar top-bar"></span>
@@ -10,24 +10,24 @@
       </label>
     {% endif %}
     <a href="{{ path('leaf_home') }}" class="logo">
-      <svg id="vector" xmlns="http://www.w3.org/2000/svg" height="30px" viewBox="0 0 140.2 76.8">
+      <svg id="vector" xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 0 140.2 76.8">
         <path fill="#90ee90" d="M28.88 31.84C35.54 40 45.19 48.78 51 58.5c5.14 10.73 14.22 25.34 -3.33 13.65 -13.43 -6.58 -29.21 -10 -38.22 -22.22C0.3 42.26 -2.77 -3.82 2.74 0.25 24.46 11 48 9.35 60.23 23.48a40.75 40.75 0 0 1 8.15 14.85c2.81 7.88 5.2 -7.21 7.53 -9.22C79.66 22.69 85.58 18 92.06 14.8c14.06 -5.15 29.14 -7 42.88 -13.31 2.26 -1 4.25 -1.55 4.8 -0.43 1.28 18.32 0.77 39.76 -12.86 53.37C114.91 65.51 98 67.91 84.12 76.7c-3.83 1 -0.62 -5.45 0.17 -8 5.56 -16 17.39 -24.86 29.34 -37.27C85.69 39.75 77.73 81 73.41 67.29c-1.25 -2 -0.53 -7.12 -3.5 -7.3 -3.17 0.58 -2.27 13.27 -8.27 7.83C53.88 54 43.86 37.9 28.88 31.84Z" id="path_0"></path>
       </svg>
-    </a> 
+    </a>
   </div>
   <ul>
     <li class="nav-logo"></li>
     <li>
-      <a href="{{ path('leaf_about') }}" class="{{ route == 'leaf_about' ? 'active' : '' }} nav-link">About</a>
+      <a href="{{ path('leaf_about') }}" class="nav-link {{ route == 'leaf_about' ? 'active' : '' }}">About</a>
     </li>
     <li>
-      <a href="{{ path('leaf_gallery') }}" class="{{ route == 'leaf_gallery' ? 'active' : '' }} nav-link">Gallery</a>
+      <a href="{{ path('leaf_gallery') }}" class="nav-link {{ route == 'leaf_gallery' ? 'active' : '' }}">Gallery</a>
     </li>
     <li>
-      <a href="{{ path('leaf_wiki') }}" class="{{ route == 'leaf_wiki' ? 'active' : '' }} nav-link">Wiki</a>
+      <a href="{{ path('leaf_wiki') }}" class="nav-link {{ route == 'leaf_wiki' ? 'active' : '' }}">Wiki</a>
     </li>
     <li>
-      <a href="{{ path('leaf_community') }}" class="{{ route == 'leaf_community' ? 'active' : '' }} nav-link">Community</a>
+      <a href="{{ path('leaf_community') }}" class="nav-link {{ route == 'leaf_community' ? 'active' : '' }}">Community</a>
     </li>
   </ul>
   <label for="toggle-navbar" class="label-navbar">
diff --git a/composer.json b/composer.json
index 3307015..4099f23 100644
--- a/composer.json
+++ b/composer.json
@@ -1,76 +1,80 @@
 {
-    "type": "project",
-    "license": "proprietary",
-    "minimum-stability": "stable",
-    "prefer-stable": true,
-    "require": {
-        "php": ">=8.1",
-        "ext-ctype": "*",
-        "ext-iconv": "*",
-        "doctrine/doctrine-bundle": "^2.9",
-        "doctrine/doctrine-migrations-bundle": "^3.2",
-        "doctrine/orm": "^2.14",
-        "symfony/asset": "6.2.*",
-        "symfony/console": "6.2.*",
-        "symfony/dotenv": "6.2.*",
-        "symfony/flex": "^2",
-        "symfony/framework-bundle": "6.2.*",
-        "symfony/runtime": "6.2.*",
-        "symfony/twig-bundle": "6.2.*",
-        "symfony/yaml": "6.2.*",
-        "twig/extra-bundle": "^2.12|^3.0",
-        "twig/twig": "^2.12|^3.0"
+  "type": "project",
+  "license": "proprietary",
+  "minimum-stability": "stable",
+  "prefer-stable": true,
+  "require": {
+    "php": ">=8.1",
+    "ext-ctype": "*",
+    "ext-iconv": "*",
+    "doctrine/doctrine-bundle": "^2.9",
+    "doctrine/doctrine-migrations-bundle": "^3.2",
+    "doctrine/orm": "^2.14",
+    "symfony/asset": "6.2.*",
+    "symfony/console": "6.2.*",
+    "symfony/dotenv": "6.2.*",
+    "symfony/flex": "^2",
+    "symfony/framework-bundle": "6.2.*",
+    "symfony/runtime": "6.2.*",
+    "symfony/twig-bundle": "6.2.*",
+    "symfony/yaml": "6.2.*",
+    "twig/extra-bundle": "^2.12|^3.0",
+    "twig/twig": "^2.12|^3.0"
+  },
+  "config": {
+    "allow-plugins": {
+      "php-http/discovery": true,
+      "symfony/flex": true,
+      "symfony/runtime": true
     },
-    "config": {
-        "allow-plugins": {
-            "php-http/discovery": true,
-            "symfony/flex": true,
-            "symfony/runtime": true
-        },
-        "sort-packages": true
-    },
-    "autoload": {
-        "psr-4": {
-            "App\\": "src/"
-        }
-    },
-    "autoload-dev": {
-        "psr-4": {
-            "App\\Tests\\": "tests/"
-        }
-    },
-    "replace": {
-        "symfony/polyfill-ctype": "*",
-        "symfony/polyfill-iconv": "*",
-        "symfony/polyfill-php72": "*",
-        "symfony/polyfill-php73": "*",
-        "symfony/polyfill-php74": "*",
-        "symfony/polyfill-php80": "*",
-        "symfony/polyfill-php81": "*"
-    },
-    "scripts": {
-        "auto-scripts": {
-            "cache:clear": "symfony-cmd",
-            "assets:install %PUBLIC_DIR%": "symfony-cmd"
-        },
-        "post-install-cmd": [
-            "@auto-scripts"
-        ],
-        "post-update-cmd": [
-            "@auto-scripts"
-        ]
-    },
-    "conflict": {
-        "symfony/symfony": "*"
-    },
-    "extra": {
-        "symfony": {
-            "allow-contrib": false,
-            "require": "6.2.*"
-        }
-    },
-    "require-dev": {
-        "symfony/maker-bundle": "^1.48",
-        "symfony/var-dumper": "6.2.*"
+    "sort-packages": true
+  },
+  "autoload": {
+    "psr-4": {
+      "App\\": "src/"
     }
+  },
+  "autoload-dev": {
+    "psr-4": {
+      "App\\Tests\\": "tests/"
+    }
+  },
+  "replace": {
+    "symfony/polyfill-ctype": "*",
+    "symfony/polyfill-iconv": "*",
+    "symfony/polyfill-php72": "*",
+    "symfony/polyfill-php73": "*",
+    "symfony/polyfill-php74": "*",
+    "symfony/polyfill-php80": "*",
+    "symfony/polyfill-php81": "*"
+  },
+  "scripts": {
+    "auto-scripts": {
+      "cache:clear": "symfony-cmd",
+      "assets:install %PUBLIC_DIR%": "symfony-cmd"
+    },
+    "post-install-cmd": [
+      "@auto-scripts"
+    ],
+    "post-update-cmd": [
+      "@auto-scripts"
+    ],
+    "dev": [
+      "Composer\\Config::disableProcessTimeout",
+      "php -S localhost:8000 -t public"
+    ]
+  },
+  "conflict": {
+    "symfony/symfony": "*"
+  },
+  "extra": {
+    "symfony": {
+      "allow-contrib": false,
+      "require": "6.2.*"
+    }
+  },
+  "require-dev": {
+    "symfony/maker-bundle": "^1.48",
+    "symfony/var-dumper": "6.2.*"
+  }
 }
diff --git a/public/assets/app.css b/public/assets/app.css
index 46546cf..6652a18 100644
--- a/public/assets/app.css
+++ b/public/assets/app.css
@@ -1,470 +1,555 @@
-@import url('https://fonts.cdnfonts.com/css/century-gothic');
+@import url("https://fonts.cdnfonts.com/css/inter");
 
 :root {
-    --color-leaf: #90ee90;
-    --color-leaf-text: #202124;
+  --transition: color 200ms ease-in-out, border-color 200ms ease-in-out;
+
+  /* H3 to h6 and text color */
+  --text-color: #111;
+
+  /* H1 and H2 */
+  --heading-color: #669982;
+
+  --background-color: #fff;
+  --hero-bg-color: #e4f6ee;
+  --hero-text-color: #669982;
+
+  /* Buttons */
+  --button-color: #fff;
+  --button-bg: #109c5c;
+  --button-bg-hover: #0e854e;
+  --button-bg-active: #0b6e41;
+
+  /* Links */
+  --link-color: #07a55d;
+
+  --control-bg: #e4f6ee;
+  --control-color: #669982;
+
+  --control-hover: #f2fbf7;
+  --control-active: #bee9d6;
+  --control-text-active: #669982;
 }
 
-*, *:before, *:after {
-    box-sizing: inherit;
+@media (prefers-color-scheme: dark) {
+  :root {
+    /* H3 to h6 and text color */
+    --text-color: #ddd;
+
+    /* H1 and H2 */
+    --heading-color: #6c9381;
+
+    --background-color: #141f1a;
+    --hero-bg-color: #1b2822;
+    --hero-text-color: #6c9381;
+
+    /* Buttons */
+    --button-color: #141f1a;
+    --button-bg: #109c5c;
+    --button-bg-hover: #0e854e;
+    --button-bg-active: #0b6e41;
+
+    /* Links */
+    --link-color: #07a55d;
+
+    --control-color: #6c9381;
+    --control-bg: #1b2822;
+    --control-hover: #17231e;
+    --control-active: #060908;
+    --control-text-active: #6c9381;
+  }
 }
 
 html {
-    box-sizing: border-box;
-    font-family: 'Century Gothic', sans-serif;
-    color-scheme: only light;
+  box-sizing: border-box;
+  font-family: "Inter", sans-serif;
 }
 
 body {
-    margin: 0;
+  background-color: var(--background-color);
+  color: var(--text-color);
 }
 
-h1, h2, h3, h4, h5, h6 {
-    font-weight: 300;
+h1,
+h2 {
+  font-weight: 600;
+  margin: 0;
+  color: var(--heading-color);
+}
+
+h3,
+h4,
+h5,
+h6 {
+  font-weight: 600;
+  margin: 0;
+  color: var(--text-color);
 }
 
 a {
-    text-decoration: none;
+  text-decoration: none;
+  color: var(--link-color);
+  border-bottom: 1px solid var(--control-bg);
+  transition: var(--transition);
+}
+
+a:hover {
+  border-color: var(--link-color);
 }
 
 .layout {
-    display: flex;
-    flex-direction: column;
+  display: flex;
+  flex-direction: column;
 }
 
 .layout main {
-    flex-grow: 1;
-    display: flex;
-    flex-direction: row;
+  flex-grow: 1;
+  display: flex;
+  flex-direction: row;
 }
 
 main aside {
-    width: 220px;
-    box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3 px 6px rgba(0, 0, 0, 0.23);
-    min-height: 100vh;
-    background-color: #e7e9eb;
+  width: 220px;
+  min-width: 220px;
+  box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);
+  min-height: 100vh;
+  background-color: var(--background-color);
 }
 
 aside h2 {
-    font-size: 21px;
-    padding-left: 16px;
-    width: 204px;
+  font-size: 21px;
+  padding: 20px 16px;
 }
 
 aside ul {
-    list-style: none;
-    padding: 0;
-    margin: 0;
+  list-style: none;
+  padding: 0;
+  margin: 0;
 }
 
 aside a {
-    text-decoration: none;
-    display: block;
-    padding: 10px 16px;
-    color: inherit;
+  display: block;
+  padding: 10px 16px;
+  border: 0;
+  color: var(--text-color);
 }
 
 aside a:hover {
-    color: #000000;
-    background-color: #cccccc;
+  color: var(--link-color);
+  background-color: var(--control-hover);
 }
 
 aside a.active {
-    background-color: #90ee90;
-    color: #202124;
-    font-weight: 700;
+  background-color: var(--control-active);
+  color: var(--control-text-active);
 }
 
 main article {
-    flex-grow: 1;
-    min-height: calc(100vh - (64px) - (40px * 2 + 21px));
+  flex-grow: 1;
+  min-height: calc(100vh - (64px) - (40px * 2 + 21px));
 }
 
 footer {
-    font-size: 16px;
-    text-align: center;
-    padding: 40px;
-    background-color: #f8f9fa;
+  background-color: var(--hero-bg-color);
+  padding: 20px 0;
+}
+
+footer div {
+  padding-bottom: 20px;
+}
+
+footer p {
+  margin: 0;
+  padding: 0;
+  color: var(--control-color);
+}
+
+footer .footnote {
+  text-align: center;
+  padding: 15px 0;
+  font-size: 10px;
+  font-weight: 600;
+  text-transform: uppercase;
+}
+
+table.center thead th,
+table.center tbody td {
+  text-align: center;
 }
 
 #toggle-aside,
 #toggle-navbar {
-    display: none;
+  display: none;
 }
 
 nav.navbar {
-    background-color: #333;
-    position: sticky;
-    top: 0;
-    z-index: 999;
-    box-shadow: 1px 1px 8px black;
-    display: flex;
+  background-color: var(--background-color);
+  position: sticky;
+  top: 0;
+  z-index: 999;
+  box-shadow: 0 2px 6px rgb(0 0 0 / 50%);
+  display: flex;
+  justify-items: center;
+}
+
+.navbar div {
+  display: flex;
+  align-items: center;
 }
 
 .navbar a.logo {
-    padding: 14px 16px;
+  padding: 14px 16px;
+  border: 0;
 }
 
 .navbar ul {
-    list-style-type: none;
-    margin: 0;
-    padding: 0;
-    display: flex;
+  list-style-type: none;
+  margin: 0;
+  padding: 0;
+  display: flex;
 }
 
 .navbar ul li a {
-    display: block;
-    color: white;
-    text-align: center;
-    padding: 21px 16px;
-    text-decoration: none;
+  background-color: var(--background-color);
+  display: block;
+  color: var(--control-color);
+  text-align: center;
+  padding: 21px 16px;
+  border: 0;
+  transition: var(--transition);
 }
 
 .navbar ul li a:hover:not(.active) {
-    background-color: #111;
+  background-color: var(--control-hover);
+  color: var(--link-color);
 }
 
 .navbar ul li a.active {
-    background-color: #90ee90;
-    color: #202124;
+  background-color: var(--control-active);
+  color: var(--control-text-active);
 }
 
 .container {
-    width: 100%;
-    margin-right: auto;
-    margin-left: auto;
-    padding-right: 15px;
-    padding-left: 15px;
+  margin-right: auto;
+  margin-left: auto;
+  padding: 30px 20px;
+}
+
+.container h2 {
+  margin-bottom: 15px;
 }
 
 .button {
-    padding: 8px 12px;
-    background-color: #1ec71e;
-    color: white;
-    font-weight: 400;
-    display: inline-block;
+  padding: 10px 20px;
+  background-color: var(--button-bg);
+  color: var(--button-color);
+  font-weight: 600;
+  display: inline-block;
+  transition: all 200ms ease-in-out;
+  border-radius: 4px;
+  border: 0;
+}
+
+.button:hover {
+  background-color: var(--button-bg-hover);
+}
+
+.button:active {
+  background-color: var(--button-bg-active);
 }
 
 .banner {
-    background-color: #90ee90;
-    color: #202124;
-    padding: 2.125rem 0;
-    margin-bottom: 2rem;
-    border-radius: 0;
+  background-color: var(--hero-bg-color);
+  color: var(--hero-text-color);
 }
 
-article.gallery {
-    background-color: #129b5ad5;
+.features {
+  display: grid;
+  grid-template-columns: repeat(2, minmax(0, 1fr));
+  column-gap: 30px;
+  row-gap: 25px;
 }
 
 .screenshot-gallery {
-    display: grid;
-    margin-left: auto;
-    margin-right: auto;
-    row-gap: 25px;
-    padding-bottom: 20px;
-    width: 90vw;
-    column-gap: 30px;
+  display: flex;
+  flex-direction: row;
+  flex-wrap: wrap;
+  gap: 30px;
+  margin-left: auto;
+  margin-right: auto;
+  justify-content: center;
+  align-items: center;
+  padding: 10vw;
+  padding: 30px 0;
 }
 
 .screenshot-gallery img {
-    border-radius: 20px;
-    width: 200px;
-    justify-self: center;
-    box-shadow: 1px 1px 8px black;
+  border-radius: 8px;
+  flex-basis: 25%;
+  width: 200px;
+  box-shadow: 0 2px 8px black;
 }
 
 .device-info {
-    display: flex;
-    gap: 8px;
+  display: flex;
+  gap: 8px;
 }
 
 .instructions {
-    flex: 2;
+  flex: 2;
 }
 
 .latest-builds {
-    display: grid;
-    gap: 10px;
+  display: grid;
+  gap: 10px;
 }
 
 .build-card {
-    border: 1px solid grey;
+  border: 1px solid var(--control-bg);
+  border-radius: 4px;
 }
 
 .build-card .title {
-    background-color: grey;
-    padding: 8px;
-
+  background-color: var(--control-bg);
+  padding: 8px;
 }
 
 .specs {
-    flex: 1;
-    display: flex;
-    flex-direction: column;
+  flex: 1;
+  display: flex;
+  flex-direction: column;
 }
 
 .specs .heading h2,
 .specs .heading p {
-    text-align: center;
-    margin: 0;
+  text-align: center;
+  margin: 0;
 }
 
 .specs .heading p {
-    font-size: small;
+  font-size: small;
 }
 
 .specs img {
-    max-width: 200px;
-    object-fit: contain;
-    align-self: center;
-    padding: 1rem 0;
+  max-width: 200px;
+  object-fit: contain;
+  align-self: center;
+  padding: 1rem 0;
 }
 
 .device-info table {
-    border-collapse: collapse;
-    width: 100%;
+  border-collapse: collapse;
+  width: 100%;
 }
 
-.device-info th, td {
-    padding: 12px;
+.device-info th,
+td {
+  padding: 12px;
 }
 
 .device-info tr:not(:last-of-type) {
-    border-bottom: 1px solid #888;
-
+  border-bottom: 1px solid var(--control-bg);
 }
 
 .device-info tbody {
-    font-size: small
+  font-size: small;
 }
 
 .device-info tbody p {
-    padding: 0;
-    margin: 0;
+  padding: 0;
+  margin: 0;
 }
 
 .device-info tbody ul {
-    list-style: none;
-    margin: 0;
-    padding: 0;
+  list-style: none;
+  margin: 0;
+  padding: 0;
 }
 
 .device-info tbody td:nth-child(1) {
-    font-weight: bold;
+  font-weight: bold;
 }
 
 .device-info tbody td:nth-child(2) {
-    text-align: right;
+  text-align: right;
 }
 
 .contribute {
-    column-gap: 30px;
-    display: grid;
-    row-gap: 25px;
-}
-
-.contribute a {
-    color: #1ec71e;
-    text-shadow: 1px 1px 2px #989898, -1px -1px 2px #ffffff;
+  column-gap: 30px;
+  display: grid;
+  row-gap: 25px;
 }
 
 /* Media queries */
 @media (min-width: 576px) {
-    .screenshot-gallery {
-        grid-template-columns: repeat(2, minmax(0, 1fr));
-    }
+  .contribute {
+    grid-template-columns: repeat(1, minmax(0, 1fr));
+  }
 
-    .contribute {
-        grid-template-columns: repeat(1, minmax(0, 1fr));
-    }
+  .latest-builds {
+    grid-template-columns: repeat(1, minmax(0, 1fr));
+  }
 
-    .latest-builds {
-        grid-template-columns: repeat(1, minmax(0, 1fr));
-    }
-
-    .container {
-        max-width: 540px;
-    }
+  .container {
+    max-width: 540px;
+  }
 }
 
 @media (min-width: 768px) {
-    .screenshot-gallery {
-        grid-template-columns: repeat(3, minmax(0, 1fr));
-    }
+  .contribute {
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+  }
 
-    .contribute {
-        grid-template-columns: repeat(2, minmax(0, 1fr));
-    }
-
-    .container {
-        max-width: 720px;
-    }
+  .container {
+    max-width: 720px;
+  }
 }
 
 @media (min-width: 992px) {
-    .screenshot-gallery {
-        grid-template-columns: repeat(4, minmax(0, 1fr));
-    }
+  .latest-builds {
+    grid-template-columns: repeat(2, minmax(0, 1fr));
+  }
 
-    .latest-builds {
-        grid-template-columns: repeat(2, minmax(0, 1fr));
-    }
-
-    .container {
-        max-width: 960px;
-    }
+  .container {
+    max-width: 960px;
+  }
 }
 
 @media (min-width: 1200px) {
-    .screenshot-gallery {
-        grid-template-columns: repeat(5, minmax(0, 1fr));
-    }
+  .latest-builds {
+    grid-template-columns: repeat(3, minmax(0, 1fr));
+  }
 
-    .latest-builds {
-        grid-template-columns: repeat(3, minmax(0, 1fr));
-    }
-
-    .container {
-        max-width: 1140px;
-    }
+  .container {
+    max-width: 1140px;
+  }
 }
 
 @media (min-width: 1400px) {
-    .screenshot-gallery {
-        grid-template-columns: repeat(6, minmax(0, 1fr));
-    }
-
-    .container {
-        max-width: 1320px;
-    }
+  .container {
+    max-width: 1320px;
+  }
 }
 
+/* Mobile overrides */
 @media (max-width: 600px) {
-    main aside {
-        display: none;
-        position: fixed;
-    }
+  main aside {
+    display: none;
+    position: fixed;
+  }
 
-    .navbar {
-        justify-content: space-between;
-    }
+  .navbar {
+    justify-content: space-between;
+  }
 
-    .navbar ul {
-        flex-direction: column;
-        display: none;
-        position: absolute;
-        background-color: #333;
-        margin-top: 63px;
-    }
+  .navbar ul {
+    flex-direction: column;
+    display: none;
+    position: absolute;
+    margin-top: 63px;
+  }
 
-    .navbar ul li {
-        width: 100vw;
-    }
+  .navbar ul li {
+    width: 100vw;
+  }
 
-    .navbar .label-aside,
-    .navbar .label-navbar {
-        display: block;
-        cursor: pointer;
-    }
+  .navbar .label-aside,
+  .navbar .label-navbar {
+    display: block;
+    cursor: pointer;
+  }
 
-    .navbar .label-aside .icon-bar {
-        display: block;
-        height: 6px;
-        background-color: #cccccc;
-        margin: 10px;
-        transition: all 0.2s;
-    }
+  .navbar .label-aside .icon-bar {
+    display: block;
+    height: 6px;
+    background-color: var(--control-color);
+    margin: 10px;
+    transition: all 0.2s;
+  }
 
-    .navbar .label-aside .top-bar {
-        width: 24px;
-        transform: translateY(9px) rotate(45deg);
-    }
+  .navbar .label-aside .top-bar {
+    width: 24px;
+    transform: translateY(9px) rotate(45deg);
+  }
 
-    .navbar .label-aside .middle-bar {
-        opacity: 0;
-    }
+  .navbar .label-aside .middle-bar {
+    opacity: 0;
+  }
 
-    .navbar .label-aside .bottom-bar {
-        width: 24px;
-        transform: translateY(-9px) rotate(-45deg);
-    }
+  .navbar .label-aside .bottom-bar {
+    width: 24px;
+    transform: translateY(-9px) rotate(-45deg);
+  }
 
-    #toggle-aside:checked~.navbar .label-aside .top-bar {
-        transform: translateY(9px) rotate(-45deg);
-    }
+  #toggle-aside:checked ~ .navbar .label-aside .top-bar {
+    transform: translateY(9px) rotate(-45deg);
+  }
 
-    #toggle-aside:checked~.navbar .label-aside .middle-bar {
-        opacity: 0;
-    }
+  #toggle-aside:checked ~ .navbar .label-aside .middle-bar {
+    opacity: 0;
+  }
 
-    #toggle-aside:checked~.navbar .label-aside .bottom-bar {
-        transform: translateY(-9px) rotate(45deg);
-    }
+  #toggle-aside:checked ~ .navbar .label-aside .bottom-bar {
+    transform: translateY(-9px) rotate(45deg);
+  }
 
-    #toggle-aside:checked~main aside {
-        display: block;
-    }
+  #toggle-aside:checked ~ main aside {
+    display: block;
+  }
 
-    .navbar .label-navbar {
-        display: flex;
-        flex-direction: column;
-        align-items: flex-end;
-        justify-content: center;
-        margin-right: 5px;
-    }
+  .navbar .label-navbar {
+    display: flex;
+    flex-direction: column;
+    align-items: flex-end;
+    justify-content: center;
+    margin-right: 5px;
+  }
 
-    .navbar .label-navbar .icon-bar {
-        display: block;
-        width: 48px;
-        height: 6px;
-        background-color: #cccccc;
-        margin: 5px;
-        transition: all 0.2s;
-    }
+  .navbar .label-navbar .icon-bar {
+    display: block;
+    width: 48px;
+    height: 6px;
+    background-color: var(--control-color);
+    margin: 5px;
+    transition: all 0.2s;
+  }
 
-    .navbar .label-navbar .top-bar {
-        transform: rotate(0);
-    }
+  .navbar .label-navbar .top-bar {
+    transform: rotate(0);
+  }
 
-    .navbar .label-navbar .middle-bar {
-        opacity: 1;
-    }
+  .navbar .label-navbar .middle-bar {
+    opacity: 1;
+  }
 
-    #toggle-navbar:checked~.label-navbar .top-bar {
-        transform: translateY(16px) rotate(45deg);
-    }
+  #toggle-navbar:checked ~ .label-navbar .top-bar {
+    transform: translateY(16px) rotate(45deg);
+  }
 
-    #toggle-navbar:checked~.label-navbar .middle-bar {
-        opacity: 0;
-    }
+  #toggle-navbar:checked ~ .label-navbar .middle-bar {
+    opacity: 0;
+  }
 
-    #toggle-navbar:checked~.label-navbar .bottom-bar {
-        transform: translateY(-16px) rotate(-45deg);
-    }
+  #toggle-navbar:checked ~ .label-navbar .bottom-bar {
+    transform: translateY(-16px) rotate(-45deg);
+  }
 
-    #toggle-navbar:checked~ul {
-        display: flex;
-    }
+  #toggle-navbar:checked ~ ul {
+    display: flex;
+  }
 
-    .container {
-        padding: 0;
-    }
+  .features {
+    grid-template-columns: repeat(1, minmax(0, 1fr));
+  }
+
+  .screenshot-gallery {
+    flex-direction: column;
+  }
+
+  .banner svg {
+    right: 5%;
+  }
+
+  footer p:not(.footnote) {
+    font-size: 12px;
+  }
 }
-
-/* Darkmode overrides */
-@media (prefers-color-scheme: dark) {
-    html {
-        background-color: #1c1b22;
-        color: white;
-    }
-
-    .contribute a {
-        text-shadow: 1px 1px 2px #989898, -1px -1px 2px #000000;
-    }
-
-    footer,
-    main aside {
-        background-color: #0e0d11;
-    }
-}
\ No newline at end of file
diff --git a/public/assets/images/header.webp b/public/assets/images/header.webp
new file mode 100644
index 0000000..d993c00
--- /dev/null
+++ b/public/assets/images/header.webp
Binary files differ
diff --git a/public/assets/images/screenshots/1.webp b/public/assets/images/screenshots/1.webp
deleted file mode 100644
index 27cbe51..0000000
--- a/public/assets/images/screenshots/1.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/10.webp b/public/assets/images/screenshots/10.webp
deleted file mode 100644
index 6fa96d8..0000000
--- a/public/assets/images/screenshots/10.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/11.webp b/public/assets/images/screenshots/11.webp
deleted file mode 100644
index 89ca565..0000000
--- a/public/assets/images/screenshots/11.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/12.webp b/public/assets/images/screenshots/12.webp
deleted file mode 100644
index 8d748b0..0000000
--- a/public/assets/images/screenshots/12.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/13.webp b/public/assets/images/screenshots/13.webp
deleted file mode 100644
index c2dd354..0000000
--- a/public/assets/images/screenshots/13.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/14.webp b/public/assets/images/screenshots/14.webp
deleted file mode 100644
index 486b061..0000000
--- a/public/assets/images/screenshots/14.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/15.webp b/public/assets/images/screenshots/15.webp
deleted file mode 100644
index 6f5c285..0000000
--- a/public/assets/images/screenshots/15.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/16.webp b/public/assets/images/screenshots/16.webp
deleted file mode 100644
index abbf38d..0000000
--- a/public/assets/images/screenshots/16.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/17.webp b/public/assets/images/screenshots/17.webp
deleted file mode 100644
index 95411e7..0000000
--- a/public/assets/images/screenshots/17.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/19.webp b/public/assets/images/screenshots/19.webp
deleted file mode 100644
index 6f17582..0000000
--- a/public/assets/images/screenshots/19.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/2.webp b/public/assets/images/screenshots/2.webp
deleted file mode 100644
index 5680144..0000000
--- a/public/assets/images/screenshots/2.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/20.webp b/public/assets/images/screenshots/20.webp
deleted file mode 100644
index aa0747f..0000000
--- a/public/assets/images/screenshots/20.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/21.webp b/public/assets/images/screenshots/21.webp
deleted file mode 100644
index ce3da1c..0000000
--- a/public/assets/images/screenshots/21.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/22.webp b/public/assets/images/screenshots/22.webp
deleted file mode 100644
index 27d0930..0000000
--- a/public/assets/images/screenshots/22.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/23.webp b/public/assets/images/screenshots/23.webp
deleted file mode 100644
index a13adb3..0000000
--- a/public/assets/images/screenshots/23.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/25.webp b/public/assets/images/screenshots/25.webp
deleted file mode 100644
index b650c7f..0000000
--- a/public/assets/images/screenshots/25.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/26.webp b/public/assets/images/screenshots/26.webp
deleted file mode 100644
index 00be060..0000000
--- a/public/assets/images/screenshots/26.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/27.webp b/public/assets/images/screenshots/27.webp
deleted file mode 100644
index 22935d9..0000000
--- a/public/assets/images/screenshots/27.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/28.webp b/public/assets/images/screenshots/28.webp
deleted file mode 100644
index da39b65..0000000
--- a/public/assets/images/screenshots/28.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/3.webp b/public/assets/images/screenshots/3.webp
deleted file mode 100644
index 3732ddb..0000000
--- a/public/assets/images/screenshots/3.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/4.webp b/public/assets/images/screenshots/4.webp
deleted file mode 100644
index 92e9e38..0000000
--- a/public/assets/images/screenshots/4.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/6.webp b/public/assets/images/screenshots/6.webp
deleted file mode 100644
index 98a8945..0000000
--- a/public/assets/images/screenshots/6.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/8.webp b/public/assets/images/screenshots/8.webp
deleted file mode 100644
index a27a9fa..0000000
--- a/public/assets/images/screenshots/8.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/images/screenshots/9.webp b/public/assets/images/screenshots/9.webp
deleted file mode 100644
index 2b56b4b..0000000
--- a/public/assets/images/screenshots/9.webp
+++ /dev/null
Binary files differ
diff --git a/public/assets/normalize.css b/public/assets/normalize.css
new file mode 100644
index 0000000..dc13b8a
--- /dev/null
+++ b/public/assets/normalize.css
@@ -0,0 +1,351 @@
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+   ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
+ */
+
+html {
+  line-height: 1.15; /* 1 */
+  -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/* Sections
+     ========================================================================== */
+
+/**
+   * Remove the margin in all browsers.
+   */
+
+body {
+  margin: 0;
+}
+
+/**
+   * Render the `main` element consistently in IE.
+   */
+
+main {
+  display: block;
+}
+
+/**
+   * Correct the font size and margin on `h1` elements within `section` and
+   * `article` contexts in Chrome, Firefox, and Safari.
+   */
+
+h1 {
+  font-size: 2em;
+  margin: 0.67em 0;
+}
+
+/* Grouping content
+     ========================================================================== */
+
+/**
+   * 1. Add the correct box sizing in Firefox.
+   * 2. Show the overflow in Edge and IE.
+   */
+
+hr {
+  box-sizing: content-box; /* 1 */
+  height: 0; /* 1 */
+  overflow: visible; /* 2 */
+}
+
+/**
+   * 1. Correct the inheritance and scaling of font size in all browsers.
+   * 2. Correct the odd `em` font sizing in all browsers.
+   */
+
+pre {
+  font-family: monospace, monospace; /* 1 */
+  font-size: 1em; /* 2 */
+}
+
+/* Text-level semantics
+     ========================================================================== */
+
+/**
+   * Remove the gray background on active links in IE 10.
+   */
+
+a {
+  background-color: transparent;
+}
+
+/**
+   * 1. Remove the bottom border in Chrome 57-
+   * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+   */
+
+abbr[title] {
+  border-bottom: none; /* 1 */
+  text-decoration: underline; /* 2 */
+  text-decoration: underline dotted; /* 2 */
+}
+
+/**
+   * Add the correct font weight in Chrome, Edge, and Safari.
+   */
+
+b,
+strong {
+  font-weight: bolder;
+}
+
+/**
+   * 1. Correct the inheritance and scaling of font size in all browsers.
+   * 2. Correct the odd `em` font sizing in all browsers.
+   */
+
+code,
+kbd,
+samp {
+  font-family: monospace, monospace; /* 1 */
+  font-size: 1em; /* 2 */
+}
+
+/**
+   * Add the correct font size in all browsers.
+   */
+
+small {
+  font-size: 80%;
+}
+
+/**
+   * Prevent `sub` and `sup` elements from affecting the line height in
+   * all browsers.
+   */
+
+sub,
+sup {
+  font-size: 75%;
+  line-height: 0;
+  position: relative;
+  vertical-align: baseline;
+}
+
+sub {
+  bottom: -0.25em;
+}
+
+sup {
+  top: -0.5em;
+}
+
+/* Embedded content
+     ========================================================================== */
+
+/**
+   * Remove the border on images inside links in IE 10.
+   */
+
+img {
+  border-style: none;
+}
+
+/* Forms
+     ========================================================================== */
+
+/**
+   * 1. Change the font styles in all browsers.
+   * 2. Remove the margin in Firefox and Safari.
+   */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+  font-family: inherit; /* 1 */
+  font-size: 100%; /* 1 */
+  line-height: 1.15; /* 1 */
+  margin: 0; /* 2 */
+}
+
+/**
+   * Show the overflow in IE.
+   * 1. Show the overflow in Edge.
+   */
+
+button,
+input {
+  /* 1 */
+  overflow: visible;
+}
+
+/**
+   * Remove the inheritance of text transform in Edge, Firefox, and IE.
+   * 1. Remove the inheritance of text transform in Firefox.
+   */
+
+button,
+select {
+  /* 1 */
+  text-transform: none;
+}
+
+/**
+   * Correct the inability to style clickable types in iOS and Safari.
+   */
+
+button,
+[type="button"],
+[type="reset"],
+[type="submit"] {
+  -webkit-appearance: button;
+}
+
+/**
+   * Remove the inner border and padding in Firefox.
+   */
+
+button::-moz-focus-inner,
+[type="button"]::-moz-focus-inner,
+[type="reset"]::-moz-focus-inner,
+[type="submit"]::-moz-focus-inner {
+  border-style: none;
+  padding: 0;
+}
+
+/**
+   * Restore the focus styles unset by the previous rule.
+   */
+
+button:-moz-focusring,
+[type="button"]:-moz-focusring,
+[type="reset"]:-moz-focusring,
+[type="submit"]:-moz-focusring {
+  outline: 1px dotted ButtonText;
+}
+
+/**
+   * Correct the padding in Firefox.
+   */
+
+fieldset {
+  padding: 0.35em 0.75em 0.625em;
+}
+
+/**
+   * 1. Correct the text wrapping in Edge and IE.
+   * 2. Correct the color inheritance from `fieldset` elements in IE.
+   * 3. Remove the padding so developers are not caught out when they zero out
+   *    `fieldset` elements in all browsers.
+   */
+
+legend {
+  box-sizing: border-box; /* 1 */
+  color: inherit; /* 2 */
+  display: table; /* 1 */
+  max-width: 100%; /* 1 */
+  padding: 0; /* 3 */
+  white-space: normal; /* 1 */
+}
+
+/**
+   * Add the correct vertical alignment in Chrome, Firefox, and Opera.
+   */
+
+progress {
+  vertical-align: baseline;
+}
+
+/**
+   * Remove the default vertical scrollbar in IE 10+.
+   */
+
+textarea {
+  overflow: auto;
+}
+
+/**
+   * 1. Add the correct box sizing in IE 10.
+   * 2. Remove the padding in IE 10.
+   */
+
+[type="checkbox"],
+[type="radio"] {
+  box-sizing: border-box; /* 1 */
+  padding: 0; /* 2 */
+}
+
+/**
+   * Correct the cursor style of increment and decrement buttons in Chrome.
+   */
+
+[type="number"]::-webkit-inner-spin-button,
+[type="number"]::-webkit-outer-spin-button {
+  height: auto;
+}
+
+/**
+   * 1. Correct the odd appearance in Chrome and Safari.
+   * 2. Correct the outline style in Safari.
+   */
+
+[type="search"] {
+  -webkit-appearance: textfield; /* 1 */
+  outline-offset: -2px; /* 2 */
+}
+
+/**
+   * Remove the inner padding in Chrome and Safari on macOS.
+   */
+
+[type="search"]::-webkit-search-decoration {
+  -webkit-appearance: none;
+}
+
+/**
+   * 1. Correct the inability to style clickable types in iOS and Safari.
+   * 2. Change font properties to `inherit` in Safari.
+   */
+
+::-webkit-file-upload-button {
+  -webkit-appearance: button; /* 1 */
+  font: inherit; /* 2 */
+}
+
+/* Interactive
+     ========================================================================== */
+
+/*
+   * Add the correct display in Edge, IE 10+, and Firefox.
+   */
+
+details {
+  display: block;
+}
+
+/*
+   * Add the correct display in all browsers.
+   */
+
+summary {
+  display: list-item;
+}
+
+/* Misc
+     ========================================================================== */
+
+/**
+   * Add the correct display in IE 10+.
+   */
+
+template {
+  display: none;
+}
+
+/**
+   * Add the correct display in IE 10.
+   */
+
+[hidden] {
+  display: none;
+}
diff --git a/src/Controller/HomeController.php b/src/Controller/HomeController.php
index 879b239..e6276e8 100644
--- a/src/Controller/HomeController.php
+++ b/src/Controller/HomeController.php
@@ -6,11 +6,14 @@
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\Routing\Annotation\Route;
 
-class HomeController extends AbstractController
-{
+class HomeController extends AbstractController {
     #[Route('/', name: 'leaf_home')]
-    public function index(): Response
-    {
+    public function index(): Response {
         return $this->render('home/index.html.twig');
     }
+
+    #[Route('/stack', name: 'leaf_stack')]
+    public function stack(): Response {
+        return $this->render('stack/index.html.twig');
+    }
 }
diff --git a/templates/base.html.twig b/templates/base.html.twig
index 034ac74..ba1ec92 100644
--- a/templates/base.html.twig
+++ b/templates/base.html.twig
@@ -6,10 +6,14 @@
     <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     <meta name="description" content="LeafOS is an AOSP-based custom ROM for select Android devices." />
-    <title>{% block title %}{% endblock %}</title>
+    <title>
+      {% block title %}
+      {% endblock %}
+    </title>
     {# Favicon same as navbar logo #}
     <link rel="icon" href="data:image/svg+xml, %3Csvg id='vector' xmlns='http://www.w3.org/2000/svg' height='30px' viewBox='0 0 140.2 76.8'%3E%3Cpath fill='%2390ee90' d='M28.88 31.84C35.54 40 45.19 48.78 51 58.5c5.14 10.73 14.22 25.34 -3.33 13.65 -13.43 -6.58 -29.21 -10 -38.22 -22.22C0.3 42.26 -2.77 -3.82 2.74 0.25 24.46 11 48 9.35 60.23 23.48a40.75 40.75 0 0 1 8.15 14.85c2.81 7.88 5.2 -7.21 7.53 -9.22C79.66 22.69 85.58 18 92.06 14.8c14.06 -5.15 29.14 -7 42.88 -13.31 2.26 -1 4.25 -1.55 4.8 -0.43 1.28 18.32 0.77 39.76 -12.86 53.37C114.91 65.51 98 67.91 84.12 76.7c-3.83 1 -0.62 -5.45 0.17 -8 5.56 -16 17.39 -24.86 29.34 -37.27C85.69 39.75 77.73 81 73.41 67.29c-1.25 -2 -0.53 -7.12 -3.5 -7.3 -3.17 0.58 -2.27 13.27 -8.27 7.83C53.88 54 43.86 37.9 28.88 31.84Z' id='path_0'%3E%3C/path%3E%3C/svg%3E" />
     {# Site CSS #}
+    <link rel="stylesheet" href="{{ asset('assets/normalize.css') }}" />
     <link rel="stylesheet" href="{{ asset('assets/app.css') }}" />
     <link rel="canonical" href="{{ path('leaf_home') }}" />
     <meta property="og:title" content="{{ block('title') }}" />
@@ -21,8 +25,8 @@
       {% include '@components/navbar.html.twig' %}
       <main>
         {% block body %}
+
         {% endblock %}
-        
       </main>
       {% include '@components/footer.html.twig' %}
     </div>
diff --git a/templates/home/index.html.twig b/templates/home/index.html.twig
index 3579522..bd8cb94 100644
--- a/templates/home/index.html.twig
+++ b/templates/home/index.html.twig
@@ -1,17 +1,53 @@
 {% extends 'base.html.twig' %}
-
 {% block title %}
   LeafOS ROM
 {% endblock %}
-
 {% block body %}
-  <article>
+  <article class="home">
     <div class="banner">
       <div class="container">
         <h1>Welcome to the LeafOS!</h1>
         <p>LeafOS is an AOSP-based ROM, focused on stability.</p>
+        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque rhoncus aliquam ante sed convallis. Nullam vitae vestibulum nunc. Donec vehicula leo elementum odio suscipit mollis. Vivamus facilisis magna.</p>
         <a href="{{ path('leaf_wiki') }}" class="button">Get LeafOS</a>
       </div>
     </div>
+    <div class="container">
+      <h2>Leaf Features</h2>
+      <div class="features">
+        <div class="card">
+          <h3>Secure</h3>
+          <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam viverra, urna vel ultricies efficitur, odio tellus feugiat arcu, in facilisis.</p>
+        </div>
+        <div class="card">
+          <h3>Stable</h3>
+          <p>Integer lacus diam, gravida ac rutrum eget, ultricies eget ligula. Donec rhoncus at mi et pharetra. Donec sed eros ut.</p>
+        </div>
+        <div class="card">
+          <h3>Personalizable</h3>
+          <p>Aenean placerat rhoncus scelerisque. Nunc quis nisi sed arcu volutpat lobortis. Praesent ullamcorper aliquam interdum. Maecenas aliquam ipsum at orci.</p>
+        </div>
+        <div class="card">
+          <h3>Constantly Updated</h3>
+          <p>Aenean nec ullamcorper orci. Vestibulum volutpat magna sit amet metus commodo tempor. Nunc lacinia velit sollicitudin nulla rutrum, eget venenatis.</p>
+        </div>
+      </div>
+    </div>
+    <div class="container">
+      <h2>Keep your device for longer</h2>
+      <p>With Leaf OS, you're not limited to your device's OEM upgrade range. Not only you can extend its lifespan, you can get more performance out of your device with a clean and lightweight OS.</p>
+    </div>
+    <div class="container">
+      <div class="features">
+        <div>
+          <h2>Open-source, by default</h2>
+          <p>You are in control. Everything is open-sourced, you can check for yourself what every app is doing, anytime.</p>
+        </div>
+        <div>
+          <h2>Device not yet supported?</h2>
+          <p>No problem! You can build the ROM for your device, and apply to be a maintainer for it.</p>
+        </div>
+      </div>
+    </div>
   </article>
 {% endblock %}