diff --git a/assets/css/common/categories.css b/assets/css/common/categories.css
new file mode 100644
index 00000000..1105e0ae
--- /dev/null
+++ b/assets/css/common/categories.css
@@ -0,0 +1,30 @@
+/* Setup grid for Categories */
+.categories {
+ display: grid;
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ gap: var(--gap);
+}
+
+/* Setup grid on mobile */
+@media (max-width: 480px) {
+ .categories {
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ }
+}
+
+/* CSS for Category Blocks */
+.category-entry {
+ position: relative;
+ background: var(--entry);
+ border-radius: var(--radius);
+ transition: transform 0.1s;
+ padding: 20px 30px;
+}
+
+/* Increase size slightly on hover */
+.category-entry:hover {
+ transform: scale(1.04);
+}
+.category-entry:active {
+ transform: scale(1);
+}
diff --git a/layouts/_default/categories.html b/layouts/_default/categories.html
new file mode 100644
index 00000000..df66b2c5
--- /dev/null
+++ b/layouts/_default/categories.html
@@ -0,0 +1,58 @@
+{{- define "main" }}
+
+{{- if .Title }}
+
+ {{ .Title }}
+ {{- if and (or (eq .Kind `taxonomy`) (eq .Kind `section`)) (.Param "ShowRssButtonInSectionTermList") }}
+
+
+
+ {{- end }}
+
+ {{- if .Description }}
+