Compare commits
11
Commits
2cf117f92b
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
76960c6b66 | ||
|
|
994aa10d3c | ||
|
|
e07c69bd29 | ||
|
|
f14939715d | ||
|
|
f3f6cfed1a | ||
|
|
364bb52db7 | ||
|
|
efbef76a88 | ||
|
|
d2dd134cee | ||
|
|
69ece5aafa | ||
|
|
cfd3a34609 | ||
|
|
50a6c29d5f |
@@ -9,30 +9,20 @@ jobs:
|
|||||||
name: Build and Deploy
|
name: Build and Deploy
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
# services:
|
|
||||||
# mermaid:
|
|
||||||
# image: yuzutech/kroki-mermaid
|
|
||||||
# kroki:
|
|
||||||
# image: yuzutech/kroki
|
|
||||||
# env:
|
|
||||||
# KROKI_MERMAID_HOST: mermaid
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v7
|
||||||
name: Checkout code
|
name: Checkout code
|
||||||
|
|
||||||
- name: Setup node and npm
|
- name: Setup node and npm
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v7
|
||||||
with:
|
with:
|
||||||
node-version: lts/*
|
node-version: lts/*
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm ci
|
||||||
|
|
||||||
- name: Check and build
|
- name: Check and build
|
||||||
run: npm run build
|
run: npm run build
|
||||||
# env:
|
|
||||||
# KROKI_SERVER: "http://kroki:8000"
|
|
||||||
|
|
||||||
- name: Copy files via ssh
|
- name: Copy files via ssh
|
||||||
uses: appleboy/scp-action@v1
|
uses: appleboy/scp-action@v1
|
||||||
@@ -41,6 +31,6 @@ jobs:
|
|||||||
username: ${{ secrets.SSH_USERNAME }}
|
username: ${{ secrets.SSH_USERNAME }}
|
||||||
key: ${{ secrets.SSH_KEY }}
|
key: ${{ secrets.SSH_KEY }}
|
||||||
source: "dist/*"
|
source: "dist/*"
|
||||||
target: /srv/website/stable
|
target: /srv/website/dev
|
||||||
overwrite: true
|
overwrite: true
|
||||||
strip_components: 1
|
strip_components: 1
|
||||||
|
|||||||
@@ -9,30 +9,20 @@ jobs:
|
|||||||
name: Build and Deploy
|
name: Build and Deploy
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
# services:
|
|
||||||
# mermaid:
|
|
||||||
# image: yuzutech/kroki-mermaid
|
|
||||||
# kroki:
|
|
||||||
# image: yuzutech/kroki
|
|
||||||
# env:
|
|
||||||
# KROKI_MERMAID_HOST: mermaid
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v7
|
||||||
name: Checkout code
|
name: Checkout code
|
||||||
|
|
||||||
- name: Setup node and npm
|
- name: Setup node and npm
|
||||||
uses: actions/setup-node@v3
|
uses: actions/setup-node@v7
|
||||||
with:
|
with:
|
||||||
node-version: lts/*
|
node-version: lts/*
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm install
|
run: npm ci
|
||||||
|
|
||||||
- name: Check and build
|
- name: Check and build
|
||||||
run: npm run build
|
run: npm run build
|
||||||
# env:
|
|
||||||
# KROKI_SERVER: "http://kroki:8000"
|
|
||||||
|
|
||||||
- name: Copy files via ssh
|
- name: Copy files via ssh
|
||||||
uses: appleboy/scp-action@v1
|
uses: appleboy/scp-action@v1
|
||||||
|
|||||||
+32
-23
@@ -1,12 +1,10 @@
|
|||||||
import { defineConfig, fontProviders } from 'astro/config';
|
import { defineConfig, fontProviders } from "astro/config";
|
||||||
import icon from 'astro-icon';
|
import { satteri } from '@astrojs/markdown-satteri';
|
||||||
import mdx from '@astrojs/mdx';
|
import icon from "astro-icon";
|
||||||
//import { remarkModifiedTime } from './src/remark-modified-time.mjs';
|
import mdx from "@astrojs/mdx";
|
||||||
import remarkMath from "remark-math";
|
import satteriCallouts from "satteri-callouts"
|
||||||
import rehypeMathjax from "rehype-mathjax"
|
import { satteriKatex } from "satteri-katex";
|
||||||
import rehypeCallouts from "rehype-callouts";
|
import mermaid from "astro-mermaid";
|
||||||
// @ts-ignore
|
|
||||||
import { remarkKroki } from "remark-kroki";
|
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
fonts: [{
|
fonts: [{
|
||||||
@@ -15,25 +13,36 @@ export default defineConfig({
|
|||||||
cssVariable: "--font-cascadia-code",
|
cssVariable: "--font-cascadia-code",
|
||||||
fallbacks: ["monospace"],
|
fallbacks: ["monospace"],
|
||||||
}],
|
}],
|
||||||
integrations: [icon(), mdx()],
|
integrations: [
|
||||||
markdown: {
|
mermaid({
|
||||||
remarkPlugins: [
|
theme: "dark",
|
||||||
// remarkModifiedTime,
|
autoTheme: false,
|
||||||
remarkMath, [
|
mermaidConfig: {
|
||||||
remarkKroki, {
|
flowchart: {curve:"linear"},
|
||||||
alias: ["mermaid", "tikz"],
|
startOnLoad: false,
|
||||||
server: process.env.KROKI_SERVER || "https://kroki.io",
|
logLevel: "error",
|
||||||
target: "mdx3",
|
securityLevel: "strict",
|
||||||
output: "inline-svg"
|
|
||||||
}
|
}
|
||||||
]],
|
}),
|
||||||
rehypePlugins: [rehypeMathjax, [rehypeCallouts, { theme: "obsidian" }]],
|
icon(),
|
||||||
|
mdx()
|
||||||
|
],
|
||||||
|
markdown: {
|
||||||
|
processor: satteri({
|
||||||
|
features: {
|
||||||
|
math: true,
|
||||||
|
rawHtml: true,
|
||||||
|
smartPunctuation: true,
|
||||||
|
},
|
||||||
|
mdastPlugins: [satteriKatex()],
|
||||||
|
hastPlugins: [satteriCallouts({theme: "obsidian"})],
|
||||||
|
}),
|
||||||
shikiConfig: {
|
shikiConfig: {
|
||||||
theme: "one-dark-pro",
|
theme: "one-dark-pro",
|
||||||
},
|
},
|
||||||
syntaxHighlight: {
|
syntaxHighlight: {
|
||||||
type: 'shiki',
|
type: "shiki",
|
||||||
excludeLangs: ['mermaid', 'math'],
|
excludeLangs: ["mermaid", "math"],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Generated
+3639
-2628
File diff suppressed because it is too large
Load Diff
+15
-8
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "website-ag",
|
"name": "c0ntroller.de",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "0.0.1",
|
"version": "1.1.0",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=22.12.0"
|
"node": ">=22.12.0"
|
||||||
},
|
},
|
||||||
@@ -12,14 +12,21 @@
|
|||||||
"astro": "astro"
|
"astro": "astro"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/mdx": "^5.0.2",
|
"@astrojs/mdx": "^8.0.0",
|
||||||
"@iconify-json/lucide": "^1.2.98",
|
"@iconify-json/lucide": "^1.2.98",
|
||||||
"@iconify-json/simple-icons": "^1.2.74",
|
"@iconify-json/simple-icons": "^1.2.74",
|
||||||
"astro": "^6.0.8",
|
"@mermaid-js/layout-elk": "^0.2.3",
|
||||||
|
"astro": "^7.3.1",
|
||||||
"astro-icon": "^1.1.5",
|
"astro-icon": "^1.1.5",
|
||||||
"rehype-callouts": "^2.1.2",
|
"astro-mermaid": "^2.1.0",
|
||||||
"rehype-mathjax": "^7.1.0",
|
"mermaid": "^11.17.2",
|
||||||
"remark-kroki": "^0.3.8",
|
"satteri-callouts": "^1.0.1",
|
||||||
"remark-math": "^6.0.0"
|
"satteri-katex": "^0.1.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"sharp": "^0.35.4"
|
||||||
|
},
|
||||||
|
"allowScripts": {
|
||||||
|
"esbuild@0.28.2": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,14 +57,14 @@ const { prevUrl, prevTitle, nextUrl, nextTitle } = Astro.props;
|
|||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
padding: 0.75rem 1.25rem;
|
padding: 0.75rem 1.25rem;
|
||||||
border-radius: 0.5rem;
|
border-radius: 0.5rem;
|
||||||
background: rgba(var(--accent-base), 0.15);
|
background: rgb(from var(--accent-base) r g b / 0.15);
|
||||||
border: 1px solid rgba(var(--accent-base), 0.3);
|
border: 1px solid rgb(from var(--accent-base) r g b / 0.3);
|
||||||
color: rgb(var(--accent-base));
|
color: var(--accent-base);
|
||||||
transition: all 0.2s ease;
|
transition: all 0.2s ease;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
.toc-label:hover {
|
.toc-label:hover {
|
||||||
background: rgba(var(--accent-base), 0.25);
|
background: rgb(from var(--accent-base) r g b / 0.25);
|
||||||
}
|
}
|
||||||
|
|
||||||
.toc-dropdown {
|
.toc-dropdown {
|
||||||
|
|||||||
@@ -68,19 +68,19 @@ import Logo from "../assets/logo.svg";
|
|||||||
transition: color 0.2s ease;
|
transition: color 0.2s ease;
|
||||||
}
|
}
|
||||||
.links a:hover {
|
.links a:hover {
|
||||||
color: rgb(var(--accent-base));
|
color: var(--accent-base);
|
||||||
}
|
}
|
||||||
.links a[href="/portfolio"]:hover {
|
.links a[href="/portfolio"]:hover {
|
||||||
color: rgb(var(--accent-base--portfolio));
|
color: var(--accent-base--portfolio);
|
||||||
}
|
}
|
||||||
.links a[href="/blog"]:hover {
|
.links a[href="/blog"]:hover {
|
||||||
color: rgb(var(--accent-base--blog));
|
color: var(--accent-base--blog);
|
||||||
}
|
}
|
||||||
.links a[href="/book"]:hover {
|
.links a[href="/book"]:hover {
|
||||||
color: rgb(var(--accent-base--book));
|
color: var(--accent-base--book);
|
||||||
}
|
}
|
||||||
.links a.active {
|
.links a.active {
|
||||||
color: rgb(var(--accent-base));
|
color: var(--accent-base);
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,7 +23,7 @@
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
white-space: break-spaces;
|
white-space: break-spaces;
|
||||||
word-wrap: break-word;
|
word-wrap: break-word;
|
||||||
color: rgb(var(--accent-base));
|
color: var(--accent-base);
|
||||||
text-shadow: 0 0 2px black, 0 0 5px black, 0 0 10px black;
|
text-shadow: 0 0 2px black, 0 0 5px black, 0 0 10px black;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
.welcome-typewriter-nostyle {
|
.welcome-typewriter-nostyle {
|
||||||
min-height: 1em;
|
min-height: 1em;
|
||||||
border-right: 2px solid rgb(var(--accent-base));
|
border-right: 2px solid var(--accent-base);
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
display: block;
|
display: block;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
height: 1em;
|
height: 1em;
|
||||||
width: 0px;
|
width: 0px;
|
||||||
border-right: 2px solid rgb(var(--accent-base));
|
border-right: 2px solid var(--accent-base);
|
||||||
animation: blink-caret 1s step-end infinite;
|
animation: blink-caret 1s step-end infinite;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
@keyframes blink-caret {
|
@keyframes blink-caret {
|
||||||
from, to { border-color: rgb(var(--accent-base)) }
|
from, to { border-color: var(--accent-base); }
|
||||||
50% { border-color: transparent; }
|
50% { border-color: transparent; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ Am Ende können wir also sagen, dass eine Addition von zwei Bits $a$ und $b$ fol
|
|||||||
Wenn wir das nun als Schaubild darstellen, sieht das so aus:
|
Wenn wir das nun als Schaubild darstellen, sieht das so aus:
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
%%{ init: { 'flowchart': { 'curve': 'linear' }, 'theme': 'dark' } }%%
|
|
||||||
flowchart TD
|
flowchart TD
|
||||||
A@{ shape: circle, label: "a" } --> XOR1[XOR]
|
A@{ shape: circle, label: "a" } --> XOR1[XOR]
|
||||||
B@{ shape: circle, label: "b" } --> XOR1
|
B@{ shape: circle, label: "b" } --> XOR1
|
||||||
@@ -72,7 +71,6 @@ Statt nur $a$ und $b$ zu addieren, addieren wir nun $a$, $b$ und den Übertrag $
|
|||||||
Unser Schaltplan, sieht dann wieder genauso aus, nur dass wir jetzt noch einen weiteren Eingang für den Übertrag haben:
|
Unser Schaltplan, sieht dann wieder genauso aus, nur dass wir jetzt noch einen weiteren Eingang für den Übertrag haben:
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
%%{ init: { 'flowchart': { 'curve': 'linear' }, 'theme': 'dark' } }%%
|
|
||||||
flowchart TD
|
flowchart TD
|
||||||
A@{ shape: circle, label: "a" } --> XOR1
|
A@{ shape: circle, label: "a" } --> XOR1
|
||||||
B@{ shape: circle, label: "b" } --> XOR1
|
B@{ shape: circle, label: "b" } --> XOR1
|
||||||
@@ -97,7 +95,6 @@ Das vorher (ohne Übertragseingang) ist ein Halbaddierer.
|
|||||||
Wir sehen hier auch, dass unser Volladdierer (FA) aus zwei Halbaddierern (HA) und einem ODER-Gatter besteht:
|
Wir sehen hier auch, dass unser Volladdierer (FA) aus zwei Halbaddierern (HA) und einem ODER-Gatter besteht:
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
%%{ init: { 'flowchart': { 'curve': 'linear' }, 'theme': 'dark' } }%%
|
|
||||||
flowchart TD
|
flowchart TD
|
||||||
A0@{ shape: circle, label: "a" } --> HA1
|
A0@{ shape: circle, label: "a" } --> HA1
|
||||||
B0@{ shape: circle, label: "b" } --> HA1
|
B0@{ shape: circle, label: "b" } --> HA1
|
||||||
@@ -123,8 +120,8 @@ Und genau so machen wir das auch im Binären.
|
|||||||
Wenn wir nun also zwei 4-Bit-Zahlen addieren wollen, brauchen wir 4 Volladdierer, die hintereinander geschaltet und deren Überträge miteinander verbunden sind:
|
Wenn wir nun also zwei 4-Bit-Zahlen addieren wollen, brauchen wir 4 Volladdierer, die hintereinander geschaltet und deren Überträge miteinander verbunden sind:
|
||||||
|
|
||||||
<div style="overflow-x: auto; width: 100%;">
|
<div style="overflow-x: auto; width: 100%;">
|
||||||
|
<div style="min-width: 700px;">
|
||||||
```mermaid
|
```mermaid
|
||||||
%%{ init: { 'flowchart': { 'curve': 'linear' }, 'theme': 'dark' } }%%
|
|
||||||
flowchart TD
|
flowchart TD
|
||||||
subgraph FA3
|
subgraph FA3
|
||||||
A3@{ shape: circle, label: "a_3" } --> FA31
|
A3@{ shape: circle, label: "a_3" } --> FA31
|
||||||
@@ -153,6 +150,7 @@ flowchart TD
|
|||||||
end
|
end
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
> [!info] Nomenklatur
|
> [!info] Nomenklatur
|
||||||
> Wie gerade schon gesehen, werden die Bits von rechts nach links durchnummeriert, beginnend mit 0.
|
> Wie gerade schon gesehen, werden die Bits von rechts nach links durchnummeriert, beginnend mit 0.
|
||||||
|
|||||||
@@ -2,7 +2,8 @@
|
|||||||
import { getCollection, render } from 'astro:content';
|
import { getCollection, render } from 'astro:content';
|
||||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||||
import "katex/dist/katex.min.css";
|
import "katex/dist/katex.min.css";
|
||||||
import "rehype-callouts/theme/obsidian"
|
// @ts-expect-error Theme is not provided as ".css"
|
||||||
|
import "satteri-callouts/theme/obsidian";
|
||||||
|
|
||||||
export async function getStaticPaths() {
|
export async function getStaticPaths() {
|
||||||
const blogEntries = await getCollection('blog');
|
const blogEntries = await getCollection('blog');
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ import { getCollection, render } from 'astro:content';
|
|||||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||||
import BookNavigation from '../../components/BookNavigation.astro';
|
import BookNavigation from '../../components/BookNavigation.astro';
|
||||||
import "katex/dist/katex.min.css";
|
import "katex/dist/katex.min.css";
|
||||||
import "rehype-callouts/theme/obsidian";
|
// @ts-expect-error Theme is not provided as ".css"
|
||||||
|
import "satteri-callouts/theme/obsidian";
|
||||||
import "../../styles/md-custom.css";
|
import "../../styles/md-custom.css";
|
||||||
|
|
||||||
export async function getStaticPaths() {
|
export async function getStaticPaths() {
|
||||||
@@ -101,12 +102,12 @@ const chapters = allPages.reduce((acc, p) => {
|
|||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
.mini-chapter a:hover {
|
.mini-chapter a:hover {
|
||||||
background: rgba(var(--accent-base), 0.1);
|
background: rgb(from var(--accent-base) r g b / 0.1);
|
||||||
color: rgb(var(--accent-base));
|
color: var(--accent-base);
|
||||||
}
|
}
|
||||||
.mini-chapter a.active {
|
.mini-chapter a.active {
|
||||||
background: rgba(var(--accent-base), 0.2);
|
background: rgb(from var(--accent-base) r g b / 0.2);
|
||||||
color: rgb(var(--accent-base));
|
color: var(--accent-base);
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
+14
-14
@@ -91,7 +91,7 @@ import socials from "../data/socials.json";
|
|||||||
}
|
}
|
||||||
|
|
||||||
.social-link {
|
.social-link {
|
||||||
color: rgb(var(--accent-base));
|
color: var(--accent-base);
|
||||||
font-size: 2rem;
|
font-size: 2rem;
|
||||||
height: 2rem;
|
height: 2rem;
|
||||||
line-height: 1;
|
line-height: 1;
|
||||||
@@ -101,7 +101,7 @@ import socials from "../data/socials.json";
|
|||||||
}
|
}
|
||||||
|
|
||||||
.social-link:hover svg {
|
.social-link:hover svg {
|
||||||
filter: drop-shadow(0px 0px 5px rgba(var(--accent-base), 0.4));
|
filter: drop-shadow(0px 0px 5px rgb(from var(--accent-base) r g b / 0.4));
|
||||||
}
|
}
|
||||||
|
|
||||||
.subtitle {
|
.subtitle {
|
||||||
@@ -192,43 +192,43 @@ import socials from "../data/socials.json";
|
|||||||
.portfolio {
|
.portfolio {
|
||||||
background: linear-gradient(
|
background: linear-gradient(
|
||||||
135deg,
|
135deg,
|
||||||
rgba(var(--accent-base--portfolio), 0.5) 0%,
|
rgb(from var(--accent-base--portfolio) r g b / 0.5) 0%,
|
||||||
rgba(var(--accent-base--portfolio), 0.15) 100%
|
rgb(from var(--accent-base--portfolio) r g b / 0.15) 100%
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
.blog {
|
.blog {
|
||||||
background: linear-gradient(
|
background: linear-gradient(
|
||||||
135deg,
|
135deg,
|
||||||
rgba(var(--accent-base--blog), 0.8) 0%,
|
rgb(from var(--accent-base--blog) r g b / 0.8) 0%,
|
||||||
rgba(var(--accent-base--blog), 0.15) 100%
|
rgb(from var(--accent-base--blog) r g b / 0.15) 100%
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
.book {
|
.book {
|
||||||
background: linear-gradient(
|
background: linear-gradient(
|
||||||
135deg,
|
135deg,
|
||||||
rgba(var(--accent-base--book), 0.8) 0%,
|
rgb(from var(--accent-base--book) r g b / 0.8) 0%,
|
||||||
rgba(var(--accent-base--book), 0.15) 100%
|
rgb(from var(--accent-base--book) r g b / 0.15) 100%
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
.portfolio:hover {
|
.portfolio:hover {
|
||||||
box-shadow: 0 10px 40px -10px rgba(var(--accent-base--portfolio), 1);
|
box-shadow: 0 10px 40px -10px rgb(from var(--accent-base--portfolio) r g b / 1);
|
||||||
}
|
}
|
||||||
.blog:hover {
|
.blog:hover {
|
||||||
box-shadow: 0 10px 40px -10px rgba(var(--accent-base--blog), 0.4);
|
box-shadow: 0 10px 40px -10px rgb(from var(--accent-base--blog) r g b / 0.4);
|
||||||
}
|
}
|
||||||
.book:hover {
|
.book:hover {
|
||||||
box-shadow: 0 10px 40px -10px rgba(var(--accent-base--book), 0.4);
|
box-shadow: 0 10px 40px -10px rgb(from var(--accent-base--book) r g b / 0.4);
|
||||||
}
|
}
|
||||||
|
|
||||||
.portfolio .icon {
|
.portfolio .icon {
|
||||||
color: rgb(var(--accent-base--portfolio));
|
color: rgb(--accent-base--portfolio);
|
||||||
}
|
}
|
||||||
.blog .icon {
|
.blog .icon {
|
||||||
color: rgb(var(--accent-base--blog));
|
color: rgb(--accent-base--blog);
|
||||||
}
|
}
|
||||||
.book .icon {
|
.book .icon {
|
||||||
color: rgb(var(--accent-base--book));
|
color: rgb(--accent-base--book);
|
||||||
}
|
}
|
||||||
|
|
||||||
@keyframes fadeUp {
|
@keyframes fadeUp {
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ import { getCollection, render } from 'astro:content';
|
|||||||
import { Icon } from "astro-icon/components";
|
import { Icon } from "astro-icon/components";
|
||||||
import BaseLayout from '../../layouts/BaseLayout.astro';
|
import BaseLayout from '../../layouts/BaseLayout.astro';
|
||||||
import "katex/dist/katex.min.css";
|
import "katex/dist/katex.min.css";
|
||||||
import "rehype-callouts/theme/obsidian"
|
// @ts-expect-error Theme is not provided as ".css"
|
||||||
|
import "satteri-callouts/theme/obsidian";
|
||||||
|
|
||||||
export async function getStaticPaths() {
|
export async function getStaticPaths() {
|
||||||
const portfolioEntries = await getCollection('portfolio');
|
const portfolioEntries = await getCollection('portfolio');
|
||||||
@@ -56,7 +57,7 @@ const { Content } = await render(entry);
|
|||||||
}
|
}
|
||||||
.tag {
|
.tag {
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
background: rgba(var(--accent-base), 0.2);
|
background: rgb(from var(--accent-base) r g b / 0.2);
|
||||||
padding: 0.25rem 0.5rem;
|
padding: 0.25rem 0.5rem;
|
||||||
border-radius: 0.25rem;
|
border-radius: 0.25rem;
|
||||||
}
|
}
|
||||||
@@ -76,7 +77,7 @@ const { Content } = await render(entry);
|
|||||||
.meta-repository {
|
.meta-repository {
|
||||||
flex-shrink: 1;
|
flex-shrink: 1;
|
||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
color: rgb(var(--accent-base));
|
color: var(--accent-base);
|
||||||
}
|
}
|
||||||
.meta-repository a {
|
.meta-repository a {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ projects.sort((a, b) => b.data.pubDate.getTime() - a.data.pubDate.getTime());
|
|||||||
}
|
}
|
||||||
.tag {
|
.tag {
|
||||||
font-size: 0.8rem;
|
font-size: 0.8rem;
|
||||||
background: rgba(var(--accent-base), 0.2);
|
background: rgb(from var(--accent-base) r g b / 0.2);
|
||||||
padding: 0.25rem 0.5rem;
|
padding: 0.25rem 0.5rem;
|
||||||
border-radius: 0.25rem;
|
border-radius: 0.25rem;
|
||||||
}
|
}
|
||||||
@@ -79,6 +79,6 @@ projects.sort((a, b) => b.data.pubDate.getTime() - a.data.pubDate.getTime());
|
|||||||
font-size: 1.2rem;
|
font-size: 1.2rem;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
color: rgb(var(--accent-base));
|
color: var(--accent-base);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
+16
-22
@@ -18,7 +18,7 @@
|
|||||||
@property --accent-base {
|
@property --accent-base {
|
||||||
syntax: '<color>';
|
syntax: '<color>';
|
||||||
inherits: true;
|
inherits: true;
|
||||||
initial-value: 214, 134, 249;
|
initial-value: rgb(214, 134, 249);
|
||||||
}
|
}
|
||||||
|
|
||||||
@property --bg-image {
|
@property --bg-image {
|
||||||
@@ -51,12 +51,6 @@
|
|||||||
initial-value: 16px;
|
initial-value: 16px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@property --glass-shadow {
|
|
||||||
syntax: '<shadow>';
|
|
||||||
inherits: true;
|
|
||||||
initial-value: 0 8px 32px 0 rgba(0, 0, 0, 0.37);
|
|
||||||
}
|
|
||||||
|
|
||||||
@property --text-main {
|
@property --text-main {
|
||||||
syntax: '<color>';
|
syntax: '<color>';
|
||||||
inherits: true;
|
inherits: true;
|
||||||
@@ -78,25 +72,25 @@
|
|||||||
@property --accent-base--default {
|
@property --accent-base--default {
|
||||||
syntax: '<color>';
|
syntax: '<color>';
|
||||||
inherits: true;
|
inherits: true;
|
||||||
initial-value: 214, 134, 249;
|
initial-value: rgb(214, 134, 249);
|
||||||
}
|
}
|
||||||
|
|
||||||
@property --accent-base--portfolio {
|
@property --accent-base--portfolio {
|
||||||
syntax: '<color>';
|
syntax: '<color>';
|
||||||
inherits: true;
|
inherits: true;
|
||||||
initial-value: 255, 181, 102;
|
initial-value: rgb(255, 181, 102);
|
||||||
}
|
}
|
||||||
|
|
||||||
@property --accent-base--blog {
|
@property --accent-base--blog {
|
||||||
syntax: '<color>';
|
syntax: '<color>';
|
||||||
inherits: true;
|
inherits: true;
|
||||||
initial-value: 111, 221, 246;
|
initial-value: rgb(111, 221, 246);
|
||||||
}
|
}
|
||||||
|
|
||||||
@property --accent-base--book {
|
@property --accent-base--book {
|
||||||
syntax: '<color>';
|
syntax: '<color>';
|
||||||
inherits: true;
|
inherits: true;
|
||||||
initial-value: 247, 110, 138;
|
initial-value: rgb(247, 110, 138);
|
||||||
}
|
}
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
@@ -110,10 +104,10 @@
|
|||||||
--glass-blur: 16px;
|
--glass-blur: 16px;
|
||||||
--glass-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37);
|
--glass-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.37);
|
||||||
|
|
||||||
--accent-base--default: 214, 134, 249;
|
--accent-base--default: rgb(214, 134, 249);
|
||||||
--accent-base--portfolio: 255, 181, 102;
|
--accent-base--portfolio: rgb(255, 181, 102);
|
||||||
--accent-base--blog: 111, 221, 246;
|
--accent-base--blog: rgb(111, 221, 246);
|
||||||
--accent-base--book: 247, 110, 138;
|
--accent-base--book: rgb(247, 110, 138);
|
||||||
--accent-base: var(--accent-base--default);
|
--accent-base: var(--accent-base--default);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,7 +165,7 @@ body {
|
|||||||
padding: 0;
|
padding: 0;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
min-height: 100vh;
|
min-height: 100vh;
|
||||||
background-image: var(--bg-image), radial-gradient(circle at 50% 0%, rgba(var(--accent-base), 0.15), transparent 60%);
|
background-image: var(--bg-image), radial-gradient(circle at 50% 0%, rgba(from var(--accent-base) r g b / 0.15), transparent 60%);
|
||||||
background-size: cover, auto;
|
background-size: cover, auto;
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-attachment: fixed;
|
background-attachment: fixed;
|
||||||
@@ -180,7 +174,7 @@ body {
|
|||||||
|
|
||||||
@media (prefers-reduced-motion: reduce) {
|
@media (prefers-reduced-motion: reduce) {
|
||||||
body {
|
body {
|
||||||
background-image: var(--bg-image-static), radial-gradient(circle at 50% 0%, rgba(var(--accent-base), 0.15), transparent 60%);
|
background-image: var(--bg-image-static), radial-gradient(circle at 50% 0%, rgba(from var(--accent-base) r g b / 0.15), transparent 60%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,7 +184,7 @@ h3,
|
|||||||
h4,
|
h4,
|
||||||
h5,
|
h5,
|
||||||
h6 {
|
h6 {
|
||||||
color: rgb(var(--accent-base));
|
color: var(--accent-base);
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
margin-top: 2rem;
|
margin-top: 2rem;
|
||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
@@ -203,7 +197,7 @@ a {
|
|||||||
}
|
}
|
||||||
|
|
||||||
a:hover {
|
a:hover {
|
||||||
text-shadow: 0 0 8px rgba(var(--accent-base), 0.6);
|
text-shadow: 0 0 8px rgba(from var(--accent-base) r g b / 0.6);
|
||||||
}
|
}
|
||||||
|
|
||||||
.glass-container {
|
.glass-container {
|
||||||
@@ -218,8 +212,8 @@ a:hover {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.glass-container:hover {
|
.glass-container:hover {
|
||||||
border-color: rgba(var(--accent-base), 0.3);
|
border-color: rgba(from var(--accent-base) r g b / 0.3);
|
||||||
box-shadow: 0 8px 32px 0 rgba(var(--accent-base), 0.1);
|
box-shadow: 0 8px 32px 0 rgba(from var(--accent-base) r g b / 0.1);
|
||||||
}
|
}
|
||||||
|
|
||||||
.container {
|
.container {
|
||||||
@@ -231,7 +225,7 @@ a:hover {
|
|||||||
/* Typography styles for markdown content */
|
/* Typography styles for markdown content */
|
||||||
.prose code {
|
.prose code {
|
||||||
font-family: var(--font-cascadia-code);
|
font-family: var(--font-cascadia-code);
|
||||||
background: rgba(255, 255, 255, 0.1);
|
background: rgba(from var(--accent-base) r g b / 0.1);
|
||||||
padding: 0.2em 0.4em;
|
padding: 0.2em 0.4em;
|
||||||
border-radius: 0.25rem;
|
border-radius: 0.25rem;
|
||||||
font-size: 0.9em;
|
font-size: 0.9em;
|
||||||
|
|||||||
Reference in New Issue
Block a user