diff --git a/.vitepress/theme/components/ArticleMasonry.vue b/.vitepress/theme/components/ArticleMasonry.vue
new file mode 100644
index 0000000..1cd0f46
--- /dev/null
+++ b/.vitepress/theme/components/ArticleMasonry.vue
@@ -0,0 +1,88 @@
+
+
+
+
+
+
+
diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts
index 3bc7daf..9834663 100644
--- a/.vitepress/theme/index.ts
+++ b/.vitepress/theme/index.ts
@@ -3,6 +3,7 @@ import { createPinia } from "pinia";
import Layout from "./layouts/Default.vue";
import AppBar from "./components/AppBar.vue";
+import ArticleMasonry from "./components/ArticleMasonry.vue";
import Button from "./components/Button.vue";
import Card from "./components/Card.vue";
import Footer from "./components/Footer.vue";
@@ -23,6 +24,7 @@ export default {
app.use(pinia);
app.component("AppBar", AppBar);
+ app.component("ArticleMasonry", ArticleMasonry);
app.component("Footer", Footer);
app.component("Header", Header);
app.component("ImageViewer", ImageViewer);
diff --git a/.vitepress/theme/styles/components/ArticleMasonry.scss b/.vitepress/theme/styles/components/ArticleMasonry.scss
new file mode 100644
index 0000000..134defe
--- /dev/null
+++ b/.vitepress/theme/styles/components/ArticleMasonry.scss
@@ -0,0 +1,24 @@
+#articleMasonry {
+ display: flex;
+ align-items: flex-start;
+ flex-direction: row;
+ gap: 12px;
+
+ width: 100%;
+
+ .masonry-column {
+ display: flex;
+ flex-direction: column;
+ flex: 1;
+ gap: 12px;
+
+ min-width: 0px;
+
+ .MaterialCard {
+ width: 100%;
+ }
+ }
+}
+
+@media screen and (max-width: 840px) {
+}