feat: updates
This commit is contained in:
@@ -68,5 +68,4 @@ jobs:
|
||||
done
|
||||
else
|
||||
echo "No registry credentials provided; skipping push."
|
||||
fi
|
||||
|
||||
fi
|
||||
4
.gitignore
vendored
4
.gitignore
vendored
@@ -1,3 +1,5 @@
|
||||
*.lock
|
||||
|
||||
public/
|
||||
public/
|
||||
|
||||
node_modules/
|
||||
|
||||
13
assets/css/input.css
Normal file
13
assets/css/input.css
Normal file
@@ -0,0 +1,13 @@
|
||||
@import "tailwindcss";
|
||||
@import "@catppuccin/tailwindcss/mocha.css";
|
||||
|
||||
@source "./layouts/**/*.{html,htm}";
|
||||
@source "./content/**/*.{md,html}";
|
||||
@source "./static/**/*.{html,js}";
|
||||
|
||||
@layer base {
|
||||
html { @apply antialiased; }
|
||||
body { @apply bg-ctp-base text-ctp-text font-sans; }
|
||||
}
|
||||
|
||||
|
||||
10
hugo.toml
10
hugo.toml
@@ -8,14 +8,10 @@ title = 'My personal blog'
|
||||
|
||||
[menu]
|
||||
[[menu.main]]
|
||||
name = 'Home'
|
||||
url = '/'
|
||||
weight = 1
|
||||
[[menu.main]]
|
||||
name = 'Posts'
|
||||
name = 'All posts'
|
||||
url = '/posts/'
|
||||
weight = 2
|
||||
weight = 1
|
||||
[[menu.main]]
|
||||
name = 'About'
|
||||
url = '/about/'
|
||||
weight = 3
|
||||
weight = 2
|
||||
@@ -4,15 +4,37 @@
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} · {{ .Site.Title }}{{ end }}</title>
|
||||
<link rel="stylesheet" href="/css/theme.css">
|
||||
<link id="chroma-latte" rel="stylesheet" href="/css/latte-chroma-style.css">
|
||||
<link id="chroma-mocha" rel="stylesheet" href="/css/mocha-chroma-style.css" disabled>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Rubik:wght@300..900&display=swap" rel="stylesheet">
|
||||
<script>
|
||||
window.tailwind = { config: { darkMode: 'class', theme: { extend: { fontFamily: { sans: ['Rubik','ui-sans-serif','system-ui','-apple-system','Segoe UI','Roboto','Helvetica Neue','Arial','Noto Sans'] } } } } };
|
||||
(function() {
|
||||
var root = document.documentElement;
|
||||
try {
|
||||
var stored = localStorage.getItem('theme');
|
||||
var prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
|
||||
var initial = stored || (prefersDark ? 'mocha' : 'latte');
|
||||
root.setAttribute('data-theme', initial);
|
||||
if (initial === 'mocha') root.classList.add('dark'); else root.classList.remove('dark');
|
||||
} catch (e) {
|
||||
root.setAttribute('data-theme', 'mocha');
|
||||
root.classList.add('dark');
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
<link rel="stylesheet" href="/css/app.css">
|
||||
<script defer src="/theme.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<body class="{{ if .IsHome }}is-home {{ end }}font-sans">
|
||||
{{ partial "header.html" . }}
|
||||
<main>
|
||||
<main class="container main-container max-w-prose mx-auto px-4 py-8 md:py-12">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</main>
|
||||
<footer class="site-footer">
|
||||
<div class="container max-w-prose mx-auto px-4 py-4 text-sm text-ctp-subtext0">
|
||||
<small>© {{ now.Year }} {{ .Site.Title }} | Powered by <a class="underline" href="https://gohugo.io">Hugo</a></small>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,18 +1,16 @@
|
||||
{{ define "main" }}
|
||||
<section>
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ range .Pages.ByDate.Reverse }}
|
||||
<article class="post-card">
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
|
||||
<div class="post-meta">
|
||||
<time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "Jan 2, 2006" }}</time>
|
||||
{{ with .Params.tags }}
|
||||
· {{ range . }}<span class="tag">#{{ . }}</span>{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
{{ with .Summary }}<p>{{ . }}</p>{{ end }}
|
||||
</article>
|
||||
{{ end }}
|
||||
<h1 class="sr-only">{{ .Title }}</h1>
|
||||
<ul class="grid grid-cols-1 gap-4">
|
||||
{{ range .Pages.ByDate.Reverse }}
|
||||
<li class="border border-ctp-surface1 rounded-xl bg-ctp-base/70 px-4 py-3">
|
||||
<a class="flex items-baseline justify-between gap-4 no-underline text-inherit" href="{{ .RelPermalink }}">
|
||||
<span class="font-semibold">{{ .Title }}</span>
|
||||
<time class="text-sm text-ctp-subtext0" datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "2006-01-02" }}</time>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</section>
|
||||
{{ end }}
|
||||
|
||||
|
||||
@@ -1,15 +1,23 @@
|
||||
{{ define "main" }}
|
||||
<article class="with-sidenotes">
|
||||
<header>
|
||||
<h1>{{ .Title }}</h1>
|
||||
<article class="post">
|
||||
<header class="post-header">
|
||||
<h1 class="post-title">{{ .Title }}</h1>
|
||||
<div class="post-meta">
|
||||
<time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "Jan 2, 2006" }}</time>
|
||||
<time datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "2006-01-02" }}</time>
|
||||
{{ with .Params.tags }}
|
||||
· {{ range . }}<span class="tag">#{{ . }}</span>{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</header>
|
||||
<div class="content">{{ .Content }}</div>
|
||||
<nav class="post-nav">
|
||||
{{ with .PrevInSection }}
|
||||
<a class="post-nav__prev" href="{{ .RelPermalink }}">← {{ .Title }}</a>
|
||||
{{ end }}
|
||||
{{ with .NextInSection }}
|
||||
<a class="post-nav__next" href="{{ .RelPermalink }}">{{ .Title }} →</a>
|
||||
{{ end }}
|
||||
</nav>
|
||||
</article>
|
||||
{{ end }}
|
||||
|
||||
|
||||
@@ -1,18 +1,12 @@
|
||||
<header class="site-header">
|
||||
<div class="container header-inner">
|
||||
<a class="site-logo" href="/">{{ .Site.Title }}</a>
|
||||
<nav class="site-nav" aria-label="Main">
|
||||
{{ $p := . }}
|
||||
{{ with .Site.Menus.main }}
|
||||
{{ range . }}
|
||||
{{ $active := or ($p.IsMenuCurrent "main" .) ($p.HasMenuCurrent "main" .) }}
|
||||
<a class="site-nav__link {{ if $active }}is-active{{ end }}" href="{{ .URL }}">{{ .Name }}</a>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
<header class="site-header sticky top-0 backdrop-blur supports-[backdrop-filter]:bg-ctp-base/80 dark:supports-[backdrop-filter]:bg-ctp-base/70 border-b border-ctp-surface1 dark:border-ctp-surface1">
|
||||
<div class="container header-inner max-w-prose mx-auto flex items-center gap-3 px-4 py-3">
|
||||
<a class="site-logo font-semibold mr-auto no-underline text-inherit" href="/">{{ .Site.Title }}</a>
|
||||
<nav class="site-nav flex gap-2 flex-wrap" aria-label="Main">
|
||||
<a class="site-nav__link no-underline text-inherit border border-transparent rounded-md px-2 py-1 hover:bg-ctp-surface0/70" href="/posts/">All posts</a>
|
||||
<a class="site-nav__link no-underline text-inherit border border-transparent rounded-md px-2 py-1 hover:bg-ctp-surface0/70" href="/about/">About</a>
|
||||
</nav>
|
||||
<button id="theme-toggle" class="theme-toggle" aria-label="Toggle theme">🌙</button>
|
||||
</div>
|
||||
<div class="progress" id="progress"></div>
|
||||
<div class="progress fixed left-0 top-0 h-0.5 bg-ctp-teal w-0" id="progress"></div>
|
||||
</header>
|
||||
|
||||
|
||||
|
||||
22
layouts/index.html
Normal file
22
layouts/index.html
Normal file
@@ -0,0 +1,22 @@
|
||||
{{ define "main" }}
|
||||
<section id="home-post-list">
|
||||
<h1 class="sr-only">Latest posts</h1>
|
||||
<ul class="grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4" id="home-post-items">
|
||||
{{ $posts := where .Site.RegularPages "Section" "posts" }}
|
||||
{{ range sort $posts "Date" "desc" }}
|
||||
<li class="home-post-item hidden border border-ctp-surface1 rounded-xl bg-ctp-base/70 shadow-sm hover:shadow-xl hover:-translate-y-1 transition px-4 py-3">
|
||||
<a class="grid gap-1 no-underline text-inherit" href="{{ .RelPermalink }}">
|
||||
<span>
|
||||
<span class="font-semibold">{{ .Title }}</span>
|
||||
{{ $subtitle := or .Params.subtitle (or .Params.summary .Summary) }}
|
||||
{{ with $subtitle }}<span class="block text-ctp-subtext0 text-sm">{{ . | plainify }}</span>{{ end }}
|
||||
</span>
|
||||
<time class="justify-self-end text-sm text-ctp-subtext0" datetime="{{ .Date.Format "2006-01-02" }}">{{ .Date.Format "2006-01-02" }}</time>
|
||||
</a>
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</section>
|
||||
{{ end }}
|
||||
|
||||
|
||||
16
package.json
Normal file
16
package.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "blog",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build:css": "pnpx @tailwindcss/cli -i ./assets/css/input.css -o ./static/css/app.css --minify",
|
||||
"watch:css": "pnpx @tailwindcss/cli -i ./assets/css/input.css -o ./static/css/app.css --watch"
|
||||
},
|
||||
"packageManager": "pnpm@9.12.0",
|
||||
"devDependencies": {
|
||||
"@tailwindcss/cli": "^4.0.7",
|
||||
"tailwindcss": "^4.1.12",
|
||||
"@catppuccin/tailwindcss": "1.0.0"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
664
pnpm-lock.yaml
generated
Normal file
664
pnpm-lock.yaml
generated
Normal file
@@ -0,0 +1,664 @@
|
||||
lockfileVersion: '9.0'
|
||||
|
||||
settings:
|
||||
autoInstallPeers: true
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
importers:
|
||||
|
||||
.:
|
||||
devDependencies:
|
||||
'@catppuccin/tailwindcss':
|
||||
specifier: 1.0.0
|
||||
version: 1.0.0
|
||||
'@tailwindcss/cli':
|
||||
specifier: ^4.0.7
|
||||
version: 4.1.12
|
||||
tailwindcss:
|
||||
specifier: ^4.1.12
|
||||
version: 4.1.12
|
||||
|
||||
packages:
|
||||
|
||||
'@catppuccin/tailwindcss@1.0.0':
|
||||
resolution: {integrity: sha512-l8pOlcYe2ncGd8a1gUmL5AHmKlxR2+CHuG5kt4Me6IZwzntW1DoLmj89BH+DcsPHBsdDGLrTSv35emlYyU3FeQ==}
|
||||
engines: {node: '>=22.0.0'}
|
||||
|
||||
'@isaacs/fs-minipass@4.0.1':
|
||||
resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
|
||||
engines: {node: '>=18.0.0'}
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.13':
|
||||
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
|
||||
|
||||
'@jridgewell/remapping@2.3.5':
|
||||
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
|
||||
|
||||
'@jridgewell/resolve-uri@3.1.2':
|
||||
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.5':
|
||||
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
|
||||
|
||||
'@jridgewell/trace-mapping@0.3.30':
|
||||
resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==}
|
||||
|
||||
'@parcel/watcher-android-arm64@2.5.1':
|
||||
resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@parcel/watcher-darwin-arm64@2.5.1':
|
||||
resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@parcel/watcher-darwin-x64@2.5.1':
|
||||
resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@parcel/watcher-freebsd-x64@2.5.1':
|
||||
resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@parcel/watcher-linux-arm-glibc@2.5.1':
|
||||
resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@parcel/watcher-linux-arm-musl@2.5.1':
|
||||
resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@parcel/watcher-linux-arm64-glibc@2.5.1':
|
||||
resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@parcel/watcher-linux-arm64-musl@2.5.1':
|
||||
resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@parcel/watcher-linux-x64-glibc@2.5.1':
|
||||
resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@parcel/watcher-linux-x64-musl@2.5.1':
|
||||
resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@parcel/watcher-win32-arm64@2.5.1':
|
||||
resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@parcel/watcher-win32-ia32@2.5.1':
|
||||
resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [ia32]
|
||||
os: [win32]
|
||||
|
||||
'@parcel/watcher-win32-x64@2.5.1':
|
||||
resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@parcel/watcher@2.5.1':
|
||||
resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
|
||||
engines: {node: '>= 10.0.0'}
|
||||
|
||||
'@tailwindcss/cli@4.1.12':
|
||||
resolution: {integrity: sha512-2PyJ5MGh/6JPS+cEaAq6MGDx3UemkX/mJt+/phm7/VOpycpecwNnHuFZbbgx6TNK/aIjvFOhhTVlappM7tmqvQ==}
|
||||
hasBin: true
|
||||
|
||||
'@tailwindcss/node@4.1.12':
|
||||
resolution: {integrity: sha512-3hm9brwvQkZFe++SBt+oLjo4OLDtkvlE8q2WalaD/7QWaeM7KEJbAiY/LJZUaCs7Xa8aUu4xy3uoyX4q54UVdQ==}
|
||||
|
||||
'@tailwindcss/oxide-android-arm64@4.1.12':
|
||||
resolution: {integrity: sha512-oNY5pq+1gc4T6QVTsZKwZaGpBb2N1H1fsc1GD4o7yinFySqIuRZ2E4NvGasWc6PhYJwGK2+5YT1f9Tp80zUQZQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [android]
|
||||
|
||||
'@tailwindcss/oxide-darwin-arm64@4.1.12':
|
||||
resolution: {integrity: sha512-cq1qmq2HEtDV9HvZlTtrj671mCdGB93bVY6J29mwCyaMYCP/JaUBXxrQQQm7Qn33AXXASPUb2HFZlWiiHWFytw==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
'@tailwindcss/oxide-darwin-x64@4.1.12':
|
||||
resolution: {integrity: sha512-6UCsIeFUcBfpangqlXay9Ffty9XhFH1QuUFn0WV83W8lGdX8cD5/+2ONLluALJD5+yJ7k8mVtwy3zMZmzEfbLg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
'@tailwindcss/oxide-freebsd-x64@4.1.12':
|
||||
resolution: {integrity: sha512-JOH/f7j6+nYXIrHobRYCtoArJdMJh5zy5lr0FV0Qu47MID/vqJAY3r/OElPzx1C/wdT1uS7cPq+xdYYelny1ww==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12':
|
||||
resolution: {integrity: sha512-v4Ghvi9AU1SYgGr3/j38PD8PEe6bRfTnNSUE3YCMIRrrNigCFtHZ2TCm8142X8fcSqHBZBceDx+JlFJEfNg5zQ==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-linux-arm64-gnu@4.1.12':
|
||||
resolution: {integrity: sha512-YP5s1LmetL9UsvVAKusHSyPlzSRqYyRB0f+Kl/xcYQSPLEw/BvGfxzbH+ihUciePDjiXwHh+p+qbSP3SlJw+6g==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-linux-arm64-musl@4.1.12':
|
||||
resolution: {integrity: sha512-V8pAM3s8gsrXcCv6kCHSuwyb/gPsd863iT+v1PGXC4fSL/OJqsKhfK//v8P+w9ThKIoqNbEnsZqNy+WDnwQqCA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-linux-x64-gnu@4.1.12':
|
||||
resolution: {integrity: sha512-xYfqYLjvm2UQ3TZggTGrwxjYaLB62b1Wiysw/YE3Yqbh86sOMoTn0feF98PonP7LtjsWOWcXEbGqDL7zv0uW8Q==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-linux-x64-musl@4.1.12':
|
||||
resolution: {integrity: sha512-ha0pHPamN+fWZY7GCzz5rKunlv9L5R8kdh+YNvP5awe3LtuXb5nRi/H27GeL2U+TdhDOptU7T6Is7mdwh5Ar3A==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
'@tailwindcss/oxide-wasm32-wasi@4.1.12':
|
||||
resolution: {integrity: sha512-4tSyu3dW+ktzdEpuk6g49KdEangu3eCYoqPhWNsZgUhyegEda3M9rG0/j1GV/JjVVsj+lG7jWAyrTlLzd/WEBg==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
cpu: [wasm32]
|
||||
bundledDependencies:
|
||||
- '@napi-rs/wasm-runtime'
|
||||
- '@emnapi/core'
|
||||
- '@emnapi/runtime'
|
||||
- '@tybys/wasm-util'
|
||||
- '@emnapi/wasi-threads'
|
||||
- tslib
|
||||
|
||||
'@tailwindcss/oxide-win32-arm64-msvc@4.1.12':
|
||||
resolution: {integrity: sha512-iGLyD/cVP724+FGtMWslhcFyg4xyYyM+5F4hGvKA7eifPkXHRAUDFaimu53fpNg9X8dfP75pXx/zFt/jlNF+lg==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
'@tailwindcss/oxide-win32-x64-msvc@4.1.12':
|
||||
resolution: {integrity: sha512-NKIh5rzw6CpEodv/++r0hGLlfgT/gFN+5WNdZtvh6wpU2BpGNgdjvj6H2oFc8nCM839QM1YOhjpgbAONUb4IxA==}
|
||||
engines: {node: '>= 10'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
'@tailwindcss/oxide@4.1.12':
|
||||
resolution: {integrity: sha512-gM5EoKHW/ukmlEtphNwaGx45fGoEmP10v51t9unv55voWh6WrOL19hfuIdo2FjxIaZzw776/BUQg7Pck++cIVw==}
|
||||
engines: {node: '>= 10'}
|
||||
|
||||
braces@3.0.3:
|
||||
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
chownr@3.0.0:
|
||||
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
detect-libc@1.0.3:
|
||||
resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
|
||||
engines: {node: '>=0.10'}
|
||||
hasBin: true
|
||||
|
||||
detect-libc@2.0.4:
|
||||
resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
enhanced-resolve@5.18.3:
|
||||
resolution: {integrity: sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==}
|
||||
engines: {node: '>=10.13.0'}
|
||||
|
||||
fill-range@7.1.1:
|
||||
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
|
||||
engines: {node: '>=8'}
|
||||
|
||||
graceful-fs@4.2.11:
|
||||
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
|
||||
|
||||
is-extglob@2.1.1:
|
||||
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
is-glob@4.0.3:
|
||||
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
is-number@7.0.0:
|
||||
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
|
||||
engines: {node: '>=0.12.0'}
|
||||
|
||||
jiti@2.5.1:
|
||||
resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==}
|
||||
hasBin: true
|
||||
|
||||
lightningcss-darwin-arm64@1.30.1:
|
||||
resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [darwin]
|
||||
|
||||
lightningcss-darwin-x64@1.30.1:
|
||||
resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [x64]
|
||||
os: [darwin]
|
||||
|
||||
lightningcss-freebsd-x64@1.30.1:
|
||||
resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [x64]
|
||||
os: [freebsd]
|
||||
|
||||
lightningcss-linux-arm-gnueabihf@1.30.1:
|
||||
resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm]
|
||||
os: [linux]
|
||||
|
||||
lightningcss-linux-arm64-gnu@1.30.1:
|
||||
resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
lightningcss-linux-arm64-musl@1.30.1:
|
||||
resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [linux]
|
||||
|
||||
lightningcss-linux-x64-gnu@1.30.1:
|
||||
resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
lightningcss-linux-x64-musl@1.30.1:
|
||||
resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [x64]
|
||||
os: [linux]
|
||||
|
||||
lightningcss-win32-arm64-msvc@1.30.1:
|
||||
resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [arm64]
|
||||
os: [win32]
|
||||
|
||||
lightningcss-win32-x64-msvc@1.30.1:
|
||||
resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
cpu: [x64]
|
||||
os: [win32]
|
||||
|
||||
lightningcss@1.30.1:
|
||||
resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==}
|
||||
engines: {node: '>= 12.0.0'}
|
||||
|
||||
magic-string@0.30.17:
|
||||
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
|
||||
|
||||
micromatch@4.0.8:
|
||||
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
|
||||
engines: {node: '>=8.6'}
|
||||
|
||||
minipass@7.1.2:
|
||||
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
|
||||
engines: {node: '>=16 || 14 >=14.17'}
|
||||
|
||||
minizlib@3.0.2:
|
||||
resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==}
|
||||
engines: {node: '>= 18'}
|
||||
|
||||
mkdirp@3.0.1:
|
||||
resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
|
||||
engines: {node: '>=10'}
|
||||
hasBin: true
|
||||
|
||||
mri@1.2.0:
|
||||
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
|
||||
engines: {node: '>=4'}
|
||||
|
||||
node-addon-api@7.1.1:
|
||||
resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
|
||||
|
||||
picocolors@1.1.1:
|
||||
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
|
||||
|
||||
picomatch@2.3.1:
|
||||
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
|
||||
engines: {node: '>=8.6'}
|
||||
|
||||
source-map-js@1.2.1:
|
||||
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
|
||||
engines: {node: '>=0.10.0'}
|
||||
|
||||
tailwindcss@4.1.12:
|
||||
resolution: {integrity: sha512-DzFtxOi+7NsFf7DBtI3BJsynR+0Yp6etH+nRPTbpWnS2pZBaSksv/JGctNwSWzbFjp0vxSqknaUylseZqMDGrA==}
|
||||
|
||||
tapable@2.2.2:
|
||||
resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
tar@7.4.3:
|
||||
resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
to-regex-range@5.0.1:
|
||||
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
|
||||
engines: {node: '>=8.0'}
|
||||
|
||||
yallist@5.0.0:
|
||||
resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
|
||||
engines: {node: '>=18'}
|
||||
|
||||
snapshots:
|
||||
|
||||
'@catppuccin/tailwindcss@1.0.0': {}
|
||||
|
||||
'@isaacs/fs-minipass@4.0.1':
|
||||
dependencies:
|
||||
minipass: 7.1.2
|
||||
|
||||
'@jridgewell/gen-mapping@0.3.13':
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
'@jridgewell/trace-mapping': 0.3.30
|
||||
|
||||
'@jridgewell/remapping@2.3.5':
|
||||
dependencies:
|
||||
'@jridgewell/gen-mapping': 0.3.13
|
||||
'@jridgewell/trace-mapping': 0.3.30
|
||||
|
||||
'@jridgewell/resolve-uri@3.1.2': {}
|
||||
|
||||
'@jridgewell/sourcemap-codec@1.5.5': {}
|
||||
|
||||
'@jridgewell/trace-mapping@0.3.30':
|
||||
dependencies:
|
||||
'@jridgewell/resolve-uri': 3.1.2
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
|
||||
'@parcel/watcher-android-arm64@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-darwin-arm64@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-darwin-x64@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-freebsd-x64@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-linux-arm-glibc@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-linux-arm-musl@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-linux-arm64-glibc@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-linux-arm64-musl@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-linux-x64-glibc@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-linux-x64-musl@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-win32-arm64@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-win32-ia32@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher-win32-x64@2.5.1':
|
||||
optional: true
|
||||
|
||||
'@parcel/watcher@2.5.1':
|
||||
dependencies:
|
||||
detect-libc: 1.0.3
|
||||
is-glob: 4.0.3
|
||||
micromatch: 4.0.8
|
||||
node-addon-api: 7.1.1
|
||||
optionalDependencies:
|
||||
'@parcel/watcher-android-arm64': 2.5.1
|
||||
'@parcel/watcher-darwin-arm64': 2.5.1
|
||||
'@parcel/watcher-darwin-x64': 2.5.1
|
||||
'@parcel/watcher-freebsd-x64': 2.5.1
|
||||
'@parcel/watcher-linux-arm-glibc': 2.5.1
|
||||
'@parcel/watcher-linux-arm-musl': 2.5.1
|
||||
'@parcel/watcher-linux-arm64-glibc': 2.5.1
|
||||
'@parcel/watcher-linux-arm64-musl': 2.5.1
|
||||
'@parcel/watcher-linux-x64-glibc': 2.5.1
|
||||
'@parcel/watcher-linux-x64-musl': 2.5.1
|
||||
'@parcel/watcher-win32-arm64': 2.5.1
|
||||
'@parcel/watcher-win32-ia32': 2.5.1
|
||||
'@parcel/watcher-win32-x64': 2.5.1
|
||||
|
||||
'@tailwindcss/cli@4.1.12':
|
||||
dependencies:
|
||||
'@parcel/watcher': 2.5.1
|
||||
'@tailwindcss/node': 4.1.12
|
||||
'@tailwindcss/oxide': 4.1.12
|
||||
enhanced-resolve: 5.18.3
|
||||
mri: 1.2.0
|
||||
picocolors: 1.1.1
|
||||
tailwindcss: 4.1.12
|
||||
|
||||
'@tailwindcss/node@4.1.12':
|
||||
dependencies:
|
||||
'@jridgewell/remapping': 2.3.5
|
||||
enhanced-resolve: 5.18.3
|
||||
jiti: 2.5.1
|
||||
lightningcss: 1.30.1
|
||||
magic-string: 0.30.17
|
||||
source-map-js: 1.2.1
|
||||
tailwindcss: 4.1.12
|
||||
|
||||
'@tailwindcss/oxide-android-arm64@4.1.12':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-darwin-arm64@4.1.12':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-darwin-x64@4.1.12':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-freebsd-x64@4.1.12':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-arm-gnueabihf@4.1.12':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-arm64-gnu@4.1.12':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-arm64-musl@4.1.12':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-x64-gnu@4.1.12':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-linux-x64-musl@4.1.12':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-wasm32-wasi@4.1.12':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-win32-arm64-msvc@4.1.12':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide-win32-x64-msvc@4.1.12':
|
||||
optional: true
|
||||
|
||||
'@tailwindcss/oxide@4.1.12':
|
||||
dependencies:
|
||||
detect-libc: 2.0.4
|
||||
tar: 7.4.3
|
||||
optionalDependencies:
|
||||
'@tailwindcss/oxide-android-arm64': 4.1.12
|
||||
'@tailwindcss/oxide-darwin-arm64': 4.1.12
|
||||
'@tailwindcss/oxide-darwin-x64': 4.1.12
|
||||
'@tailwindcss/oxide-freebsd-x64': 4.1.12
|
||||
'@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.12
|
||||
'@tailwindcss/oxide-linux-arm64-gnu': 4.1.12
|
||||
'@tailwindcss/oxide-linux-arm64-musl': 4.1.12
|
||||
'@tailwindcss/oxide-linux-x64-gnu': 4.1.12
|
||||
'@tailwindcss/oxide-linux-x64-musl': 4.1.12
|
||||
'@tailwindcss/oxide-wasm32-wasi': 4.1.12
|
||||
'@tailwindcss/oxide-win32-arm64-msvc': 4.1.12
|
||||
'@tailwindcss/oxide-win32-x64-msvc': 4.1.12
|
||||
|
||||
braces@3.0.3:
|
||||
dependencies:
|
||||
fill-range: 7.1.1
|
||||
|
||||
chownr@3.0.0: {}
|
||||
|
||||
detect-libc@1.0.3: {}
|
||||
|
||||
detect-libc@2.0.4: {}
|
||||
|
||||
enhanced-resolve@5.18.3:
|
||||
dependencies:
|
||||
graceful-fs: 4.2.11
|
||||
tapable: 2.2.2
|
||||
|
||||
fill-range@7.1.1:
|
||||
dependencies:
|
||||
to-regex-range: 5.0.1
|
||||
|
||||
graceful-fs@4.2.11: {}
|
||||
|
||||
is-extglob@2.1.1: {}
|
||||
|
||||
is-glob@4.0.3:
|
||||
dependencies:
|
||||
is-extglob: 2.1.1
|
||||
|
||||
is-number@7.0.0: {}
|
||||
|
||||
jiti@2.5.1: {}
|
||||
|
||||
lightningcss-darwin-arm64@1.30.1:
|
||||
optional: true
|
||||
|
||||
lightningcss-darwin-x64@1.30.1:
|
||||
optional: true
|
||||
|
||||
lightningcss-freebsd-x64@1.30.1:
|
||||
optional: true
|
||||
|
||||
lightningcss-linux-arm-gnueabihf@1.30.1:
|
||||
optional: true
|
||||
|
||||
lightningcss-linux-arm64-gnu@1.30.1:
|
||||
optional: true
|
||||
|
||||
lightningcss-linux-arm64-musl@1.30.1:
|
||||
optional: true
|
||||
|
||||
lightningcss-linux-x64-gnu@1.30.1:
|
||||
optional: true
|
||||
|
||||
lightningcss-linux-x64-musl@1.30.1:
|
||||
optional: true
|
||||
|
||||
lightningcss-win32-arm64-msvc@1.30.1:
|
||||
optional: true
|
||||
|
||||
lightningcss-win32-x64-msvc@1.30.1:
|
||||
optional: true
|
||||
|
||||
lightningcss@1.30.1:
|
||||
dependencies:
|
||||
detect-libc: 2.0.4
|
||||
optionalDependencies:
|
||||
lightningcss-darwin-arm64: 1.30.1
|
||||
lightningcss-darwin-x64: 1.30.1
|
||||
lightningcss-freebsd-x64: 1.30.1
|
||||
lightningcss-linux-arm-gnueabihf: 1.30.1
|
||||
lightningcss-linux-arm64-gnu: 1.30.1
|
||||
lightningcss-linux-arm64-musl: 1.30.1
|
||||
lightningcss-linux-x64-gnu: 1.30.1
|
||||
lightningcss-linux-x64-musl: 1.30.1
|
||||
lightningcss-win32-arm64-msvc: 1.30.1
|
||||
lightningcss-win32-x64-msvc: 1.30.1
|
||||
|
||||
magic-string@0.30.17:
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.5.5
|
||||
|
||||
micromatch@4.0.8:
|
||||
dependencies:
|
||||
braces: 3.0.3
|
||||
picomatch: 2.3.1
|
||||
|
||||
minipass@7.1.2: {}
|
||||
|
||||
minizlib@3.0.2:
|
||||
dependencies:
|
||||
minipass: 7.1.2
|
||||
|
||||
mkdirp@3.0.1: {}
|
||||
|
||||
mri@1.2.0: {}
|
||||
|
||||
node-addon-api@7.1.1: {}
|
||||
|
||||
picocolors@1.1.1: {}
|
||||
|
||||
picomatch@2.3.1: {}
|
||||
|
||||
source-map-js@1.2.1: {}
|
||||
|
||||
tailwindcss@4.1.12: {}
|
||||
|
||||
tapable@2.2.2: {}
|
||||
|
||||
tar@7.4.3:
|
||||
dependencies:
|
||||
'@isaacs/fs-minipass': 4.0.1
|
||||
chownr: 3.0.0
|
||||
minipass: 7.1.2
|
||||
minizlib: 3.0.2
|
||||
mkdirp: 3.0.1
|
||||
yallist: 5.0.0
|
||||
|
||||
to-regex-range@5.0.1:
|
||||
dependencies:
|
||||
is-number: 7.0.0
|
||||
|
||||
yallist@5.0.0: {}
|
||||
2
static/css/app.css
Normal file
2
static/css/app.css
Normal file
File diff suppressed because one or more lines are too long
@@ -1,256 +0,0 @@
|
||||
.chroma {
|
||||
color: #4c4f69;
|
||||
background-color: #eff1f5;
|
||||
}
|
||||
.chroma .cl {
|
||||
color: #4c4f69;
|
||||
}
|
||||
.chroma .err {
|
||||
color: #d20f39;
|
||||
}
|
||||
.chroma .x {
|
||||
color: #4c4f69;
|
||||
}
|
||||
.chroma .hl {
|
||||
background-color: #bcc0cc;
|
||||
}
|
||||
.chroma .lnt {
|
||||
color: #8c8fa1;
|
||||
}
|
||||
.chroma .ln {
|
||||
color: #8c8fa1;
|
||||
}
|
||||
.chroma .k {
|
||||
color: #8839ef;
|
||||
}
|
||||
.chroma .kr {
|
||||
color: #8839ef;
|
||||
}
|
||||
.chroma .kp {
|
||||
color: #8839ef;
|
||||
}
|
||||
.chroma .kc {
|
||||
color: #fe640b;
|
||||
}
|
||||
.chroma .kd {
|
||||
color: #d20f39;
|
||||
}
|
||||
.chroma .kn {
|
||||
color: #179299;
|
||||
}
|
||||
.chroma .kt {
|
||||
color: #d20f39;
|
||||
}
|
||||
.chroma .n {
|
||||
color: #4c4f69;
|
||||
}
|
||||
.chroma .nc {
|
||||
color: #df8e1d;
|
||||
}
|
||||
.chroma .no {
|
||||
color: #df8e1d;
|
||||
}
|
||||
.chroma .nd {
|
||||
color: #1e66f5;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .ni {
|
||||
color: #179299;
|
||||
}
|
||||
.chroma .ne {
|
||||
color: #fe640b;
|
||||
}
|
||||
.chroma .nf {
|
||||
color: #1e66f5;
|
||||
}
|
||||
.chroma .fm {
|
||||
color: #1e66f5;
|
||||
}
|
||||
.chroma .nl {
|
||||
color: #04a5e5;
|
||||
}
|
||||
.chroma .nn {
|
||||
color: #fe640b;
|
||||
}
|
||||
.chroma .py {
|
||||
color: #fe640b;
|
||||
}
|
||||
.chroma .nt {
|
||||
color: #8839ef;
|
||||
}
|
||||
.chroma .nv {
|
||||
color: #dc8a78;
|
||||
}
|
||||
.chroma .vc {
|
||||
color: #dc8a78;
|
||||
}
|
||||
.chroma .vg {
|
||||
color: #dc8a78;
|
||||
}
|
||||
.chroma .vi {
|
||||
color: #dc8a78;
|
||||
}
|
||||
.chroma .vm {
|
||||
color: #dc8a78;
|
||||
}
|
||||
.chroma .na {
|
||||
color: #1e66f5;
|
||||
}
|
||||
.chroma .nb {
|
||||
color: #04a5e5;
|
||||
}
|
||||
.chroma .bp {
|
||||
color: #04a5e5;
|
||||
}
|
||||
.chroma .nx {
|
||||
color: #4c4f69;
|
||||
}
|
||||
.chroma .l {
|
||||
color: #4c4f69;
|
||||
}
|
||||
.chroma .ld {
|
||||
color: #4c4f69;
|
||||
}
|
||||
.chroma .s {
|
||||
color: #40a02b;
|
||||
}
|
||||
.chroma .sc {
|
||||
color: #40a02b;
|
||||
}
|
||||
.chroma .s1 {
|
||||
color: #40a02b;
|
||||
}
|
||||
.chroma .s2 {
|
||||
color: #40a02b;
|
||||
}
|
||||
.chroma .sb {
|
||||
color: #40a02b;
|
||||
}
|
||||
.chroma .sx {
|
||||
color: #40a02b;
|
||||
}
|
||||
.chroma .ss {
|
||||
color: #40a02b;
|
||||
}
|
||||
.chroma .si {
|
||||
color: #40a02b;
|
||||
}
|
||||
.chroma .sa {
|
||||
color: #d20f39;
|
||||
}
|
||||
.chroma .dl {
|
||||
color: #1e66f5;
|
||||
}
|
||||
.chroma .se {
|
||||
color: #1e66f5;
|
||||
}
|
||||
.chroma .sr {
|
||||
color: #179299;
|
||||
}
|
||||
.chroma .sd {
|
||||
color: #9ca0b0;
|
||||
}
|
||||
.chroma .sh {
|
||||
color: #9ca0b0;
|
||||
}
|
||||
.chroma .m {
|
||||
color: #fe640b;
|
||||
}
|
||||
.chroma .mb {
|
||||
color: #fe640b;
|
||||
}
|
||||
.chroma .mh {
|
||||
color: #fe640b;
|
||||
}
|
||||
.chroma .mi {
|
||||
color: #fe640b;
|
||||
}
|
||||
.chroma .mf {
|
||||
color: #fe640b;
|
||||
}
|
||||
.chroma .il {
|
||||
color: #fe640b;
|
||||
}
|
||||
.chroma .mo {
|
||||
color: #fe640b;
|
||||
}
|
||||
.chroma .o {
|
||||
color: #04a5e5;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .ow {
|
||||
color: #04a5e5;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .c {
|
||||
color: #9ca0b0;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .c1 {
|
||||
color: #9ca0b0;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .cm {
|
||||
color: #9ca0b0;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .cs {
|
||||
color: #9ca0b0;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .ch {
|
||||
color: #acb0be;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .cp {
|
||||
color: #9ca0b0;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .cpf {
|
||||
color: #9ca0b0;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .g {
|
||||
color: #4c4f69;
|
||||
}
|
||||
.chroma .gi {
|
||||
color: #40a02b;
|
||||
background-color: #ccd0da;
|
||||
}
|
||||
.chroma .gd {
|
||||
color: #d20f39;
|
||||
background-color: #ccd0da;
|
||||
}
|
||||
.chroma .ge {
|
||||
color: #4c4f69;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .gs {
|
||||
color: #4c4f69;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .gl {
|
||||
color: #4c4f69;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.chroma .gh {
|
||||
color: #fe640b;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .gu {
|
||||
color: #fe640b;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .go {
|
||||
color: #4c4f69;
|
||||
}
|
||||
.chroma .gp {
|
||||
color: #4c4f69;
|
||||
}
|
||||
.chroma .gr {
|
||||
color: #d20f39;
|
||||
}
|
||||
.chroma .gt {
|
||||
color: #d20f39;
|
||||
}
|
||||
|
||||
@@ -1,256 +0,0 @@
|
||||
.chroma {
|
||||
color: #cdd6f4;
|
||||
background-color: #1e1e2e;
|
||||
}
|
||||
.chroma .cl {
|
||||
color: #cdd6f4;
|
||||
}
|
||||
.chroma .err {
|
||||
color: #f38ba8;
|
||||
}
|
||||
.chroma .x {
|
||||
color: #cdd6f4;
|
||||
}
|
||||
.chroma .hl {
|
||||
background-color: #45475a;
|
||||
}
|
||||
.chroma .lnt {
|
||||
color: #7f849c;
|
||||
}
|
||||
.chroma .ln {
|
||||
color: #7f849c;
|
||||
}
|
||||
.chroma .k {
|
||||
color: #cba6f7;
|
||||
}
|
||||
.chroma .kr {
|
||||
color: #cba6f7;
|
||||
}
|
||||
.chroma .kp {
|
||||
color: #cba6f7;
|
||||
}
|
||||
.chroma .kc {
|
||||
color: #fab387;
|
||||
}
|
||||
.chroma .kd {
|
||||
color: #f38ba8;
|
||||
}
|
||||
.chroma .kn {
|
||||
color: #94e2d5;
|
||||
}
|
||||
.chroma .kt {
|
||||
color: #f38ba8;
|
||||
}
|
||||
.chroma .n {
|
||||
color: #cdd6f4;
|
||||
}
|
||||
.chroma .nc {
|
||||
color: #f9e2af;
|
||||
}
|
||||
.chroma .no {
|
||||
color: #f9e2af;
|
||||
}
|
||||
.chroma .nd {
|
||||
color: #89b4fa;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .ni {
|
||||
color: #94e2d5;
|
||||
}
|
||||
.chroma .ne {
|
||||
color: #fab387;
|
||||
}
|
||||
.chroma .nf {
|
||||
color: #89b4fa;
|
||||
}
|
||||
.chroma .fm {
|
||||
color: #89b4fa;
|
||||
}
|
||||
.chroma .nl {
|
||||
color: #89dceb;
|
||||
}
|
||||
.chroma .nn {
|
||||
color: #fab387;
|
||||
}
|
||||
.chroma .py {
|
||||
color: #fab387;
|
||||
}
|
||||
.chroma .nt {
|
||||
color: #cba6f7;
|
||||
}
|
||||
.chroma .nv {
|
||||
color: #f5e0dc;
|
||||
}
|
||||
.chroma .vc {
|
||||
color: #f5e0dc;
|
||||
}
|
||||
.chroma .vg {
|
||||
color: #f5e0dc;
|
||||
}
|
||||
.chroma .vi {
|
||||
color: #f5e0dc;
|
||||
}
|
||||
.chroma .vm {
|
||||
color: #f5e0dc;
|
||||
}
|
||||
.chroma .na {
|
||||
color: #89b4fa;
|
||||
}
|
||||
.chroma .nb {
|
||||
color: #89dceb;
|
||||
}
|
||||
.chroma .bp {
|
||||
color: #89dceb;
|
||||
}
|
||||
.chroma .nx {
|
||||
color: #cdd6f4;
|
||||
}
|
||||
.chroma .l {
|
||||
color: #cdd6f4;
|
||||
}
|
||||
.chroma .ld {
|
||||
color: #cdd6f4;
|
||||
}
|
||||
.chroma .s {
|
||||
color: #a6e3a1;
|
||||
}
|
||||
.chroma .sc {
|
||||
color: #a6e3a1;
|
||||
}
|
||||
.chroma .s1 {
|
||||
color: #a6e3a1;
|
||||
}
|
||||
.chroma .s2 {
|
||||
color: #a6e3a1;
|
||||
}
|
||||
.chroma .sb {
|
||||
color: #a6e3a1;
|
||||
}
|
||||
.chroma .sx {
|
||||
color: #a6e3a1;
|
||||
}
|
||||
.chroma .ss {
|
||||
color: #a6e3a1;
|
||||
}
|
||||
.chroma .si {
|
||||
color: #a6e3a1;
|
||||
}
|
||||
.chroma .sa {
|
||||
color: #f38ba8;
|
||||
}
|
||||
.chroma .dl {
|
||||
color: #89b4fa;
|
||||
}
|
||||
.chroma .se {
|
||||
color: #89b4fa;
|
||||
}
|
||||
.chroma .sr {
|
||||
color: #94e2d5;
|
||||
}
|
||||
.chroma .sd {
|
||||
color: #6c7086;
|
||||
}
|
||||
.chroma .sh {
|
||||
color: #6c7086;
|
||||
}
|
||||
.chroma .m {
|
||||
color: #fab387;
|
||||
}
|
||||
.chroma .mb {
|
||||
color: #fab387;
|
||||
}
|
||||
.chroma .mh {
|
||||
color: #fab387;
|
||||
}
|
||||
.chroma .mi {
|
||||
color: #fab387;
|
||||
}
|
||||
.chroma .mf {
|
||||
color: #fab387;
|
||||
}
|
||||
.chroma .il {
|
||||
color: #fab387;
|
||||
}
|
||||
.chroma .mo {
|
||||
color: #fab387;
|
||||
}
|
||||
.chroma .o {
|
||||
color: #89dceb;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .ow {
|
||||
color: #89dceb;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .c {
|
||||
color: #6c7086;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .c1 {
|
||||
color: #6c7086;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .cm {
|
||||
color: #6c7086;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .cs {
|
||||
color: #6c7086;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .ch {
|
||||
color: #585b70;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .cp {
|
||||
color: #6c7086;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .cpf {
|
||||
color: #6c7086;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .g {
|
||||
color: #cdd6f4;
|
||||
}
|
||||
.chroma .gi {
|
||||
color: #a6e3a1;
|
||||
background-color: #313244;
|
||||
}
|
||||
.chroma .gd {
|
||||
color: #f38ba8;
|
||||
background-color: #313244;
|
||||
}
|
||||
.chroma .ge {
|
||||
color: #cdd6f4;
|
||||
font-style: italic;
|
||||
}
|
||||
.chroma .gs {
|
||||
color: #cdd6f4;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .gl {
|
||||
color: #cdd6f4;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.chroma .gh {
|
||||
color: #fab387;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .gu {
|
||||
color: #fab387;
|
||||
font-weight: bold;
|
||||
}
|
||||
.chroma .go {
|
||||
color: #cdd6f4;
|
||||
}
|
||||
.chroma .gp {
|
||||
color: #cdd6f4;
|
||||
}
|
||||
.chroma .gr {
|
||||
color: #f38ba8;
|
||||
}
|
||||
.chroma .gt {
|
||||
color: #f38ba8;
|
||||
}
|
||||
|
||||
@@ -1,173 +0,0 @@
|
||||
:root[data-theme="latte"] {
|
||||
--bg: #eff1f5;
|
||||
--fg: #4c4f69;
|
||||
--muted: #8c8fa1;
|
||||
--card: #ffffffcc;
|
||||
--accent: #7287fd;
|
||||
--accent-2: #179299;
|
||||
--code-bg: color-mix(in srgb, var(--bg) 88%, transparent);
|
||||
--border: #ccd0da;
|
||||
}
|
||||
|
||||
:root[data-theme="mocha"] {
|
||||
--bg: #1e1e2e;
|
||||
--fg: #cdd6f4;
|
||||
--muted: #a6adc8;
|
||||
--card: #1e1e2ecc;
|
||||
--accent: #b4befe;
|
||||
--accent-2: #94e2d5;
|
||||
--code-bg: color-mix(in srgb, var(--bg) 70%, transparent);
|
||||
--border: #313244;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
background: var(--bg);
|
||||
color: var(--fg);
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--accent);
|
||||
text-decoration: underline;
|
||||
text-decoration-color: color-mix(in srgb, var(--accent) 40%, transparent);
|
||||
}
|
||||
|
||||
pre,
|
||||
code {
|
||||
background: var(--code-bg);
|
||||
}
|
||||
|
||||
.post-card {
|
||||
background: var(--card);
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 8px 20px rgba(0, 0, 0, .05);
|
||||
}
|
||||
|
||||
.progress {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
height: 2px;
|
||||
width: 0;
|
||||
background: var(--accent-2);
|
||||
z-index: 50;
|
||||
}
|
||||
|
||||
@media (min-width: 1100px) {
|
||||
.with-sidenotes {
|
||||
max-width: 70ch;
|
||||
margin-right: 22ch;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.sidenote {
|
||||
position: absolute;
|
||||
right: -20ch;
|
||||
width: 18ch;
|
||||
color: var(--muted);
|
||||
}
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
html {
|
||||
font-family: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||
line-height: 1.7;
|
||||
}
|
||||
pre, code, kbd, samp {
|
||||
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
|
||||
}
|
||||
|
||||
main {
|
||||
max-width: 70ch;
|
||||
padding: 2rem 1rem 4rem;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.post-card {
|
||||
padding: 1rem 1.25rem;
|
||||
transition: transform .15s ease, box-shadow .15s ease;
|
||||
}
|
||||
|
||||
.post-card:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: 0 10px 24px rgba(0, 0, 0, .08);
|
||||
}
|
||||
|
||||
.post-meta {
|
||||
color: var(--muted);
|
||||
font-size: .9rem;
|
||||
}
|
||||
|
||||
.tag {
|
||||
display: inline-block;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 999px;
|
||||
padding: .1rem .5rem;
|
||||
margin-right: .25rem;
|
||||
color: var(--muted);
|
||||
}
|
||||
|
||||
/* Minimal header and navigation */
|
||||
.site-header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
backdrop-filter: saturate(180%) blur(8px);
|
||||
background: color-mix(in srgb, var(--bg) 85%, transparent);
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
|
||||
.container {
|
||||
max-width: 70ch;
|
||||
margin: 0 auto;
|
||||
padding: .75rem 1rem;
|
||||
}
|
||||
|
||||
.header-inner {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: .75rem;
|
||||
}
|
||||
|
||||
.site-logo {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
font-weight: 600;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.site-nav {
|
||||
display: flex;
|
||||
gap: .5rem;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.site-nav__link {
|
||||
text-decoration: none;
|
||||
color: var(--fg);
|
||||
border: 1px solid transparent;
|
||||
border-radius: 8px;
|
||||
padding: .25rem .5rem;
|
||||
}
|
||||
|
||||
.site-nav__link:hover {
|
||||
background: var(--card);
|
||||
border-color: var(--border);
|
||||
}
|
||||
|
||||
.site-nav__link.is-active {
|
||||
background: color-mix(in srgb, var(--accent) 12%, var(--bg));
|
||||
border-color: color-mix(in srgb, var(--accent) 30%, var(--border));
|
||||
}
|
||||
|
||||
.theme-toggle {
|
||||
background: transparent;
|
||||
border: 1px solid var(--border);
|
||||
border-radius: 999px;
|
||||
padding: .25rem .5rem;
|
||||
color: var(--fg);
|
||||
}
|
||||
@@ -1,51 +1,43 @@
|
||||
(function () {
|
||||
const root = document.documentElement;
|
||||
const key = "theme";
|
||||
const stored = localStorage.getItem(key);
|
||||
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
||||
const initial = stored || (prefersDark ? "mocha" : "latte");
|
||||
root.setAttribute("data-theme", initial);
|
||||
toggleChroma(initial);
|
||||
|
||||
const btn = document.getElementById("theme-toggle");
|
||||
function updateToggleIcon(theme) {
|
||||
if (!btn) return;
|
||||
const isDark = theme === "mocha";
|
||||
btn.textContent = isDark ? "☀️" : "🌙";
|
||||
btn.setAttribute("aria-label", isDark ? "Switch to light theme" : "Switch to dark theme");
|
||||
btn.setAttribute("title", isDark ? "Light theme" : "Dark theme");
|
||||
// Home: show as many posts as fit the viewport height
|
||||
(function () {
|
||||
if (!document.body.classList.contains('is-home')) return;
|
||||
const list = document.getElementById('home-post-items');
|
||||
if (!list) return;
|
||||
const items = Array.from(list.querySelectorAll('.home-post-item'));
|
||||
const header = document.querySelector('.site-header');
|
||||
const footer = document.querySelector('.site-footer');
|
||||
function availableHeight() {
|
||||
const vh = window.innerHeight;
|
||||
const headerH = header ? header.getBoundingClientRect().height : 0;
|
||||
const footerH = footer ? footer.getBoundingClientRect().height : 0;
|
||||
const mainPadding = 48; // approx padding in main
|
||||
return Math.max(0, vh - headerH - footerH - mainPadding);
|
||||
}
|
||||
function setTheme(next) {
|
||||
root.setAttribute("data-theme", next);
|
||||
localStorage.setItem(key, next);
|
||||
toggleChroma(next);
|
||||
updateToggleIcon(next);
|
||||
}
|
||||
function toggleChroma(theme) {
|
||||
const latte = document.getElementById("chroma-latte");
|
||||
const mocha = document.getElementById("chroma-mocha");
|
||||
if (latte && mocha) {
|
||||
if (theme === "mocha") {
|
||||
mocha.removeAttribute("disabled");
|
||||
latte.setAttribute("disabled", "disabled");
|
||||
} else {
|
||||
latte.removeAttribute("disabled");
|
||||
mocha.setAttribute("disabled", "disabled");
|
||||
function relayout() {
|
||||
items.forEach(el => el.classList.add('hidden'));
|
||||
let shown = 0;
|
||||
let used = 0;
|
||||
const gap = (() => {
|
||||
const ul = list;
|
||||
const styles = window.getComputedStyle(ul);
|
||||
const rowGap = parseFloat(styles.rowGap || styles.gap || '0');
|
||||
return isNaN(rowGap) ? 0 : rowGap;
|
||||
})();
|
||||
for (const el of items) {
|
||||
el.classList.remove('hidden');
|
||||
const h = el.getBoundingClientRect().height;
|
||||
if (used + h + (shown > 0 ? gap : 0) > availableHeight()) {
|
||||
el.classList.add('hidden');
|
||||
break;
|
||||
}
|
||||
used += h + (shown > 0 ? gap : 0);
|
||||
shown++;
|
||||
}
|
||||
}
|
||||
updateToggleIcon(initial);
|
||||
btn && btn.addEventListener("click", () => {
|
||||
setTheme(root.getAttribute("data-theme") === "latte" ? "mocha" : "latte");
|
||||
});
|
||||
|
||||
// Reading progress
|
||||
const bar = document.getElementById("progress");
|
||||
function onScroll() {
|
||||
const t = document.documentElement;
|
||||
const scrolled = (t.scrollTop / (t.scrollHeight - t.clientHeight)) * 100;
|
||||
bar && (bar.style.width = scrolled + "%");
|
||||
}
|
||||
document.addEventListener("scroll", onScroll, { passive: true });
|
||||
onScroll();
|
||||
const ro = new ResizeObserver(relayout);
|
||||
ro.observe(document.documentElement);
|
||||
header && ro.observe(header);
|
||||
footer && ro.observe(footer);
|
||||
window.addEventListener('load', relayout);
|
||||
window.addEventListener('orientationchange', relayout);
|
||||
})();
|
||||
25
tailwind.config.js
Normal file
25
tailwind.config.js
Normal file
@@ -0,0 +1,25 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
module.exports = {
|
||||
darkMode: 'class',
|
||||
content: [
|
||||
'./layouts/**/*.{html,htm}',
|
||||
'./content/**/*.{md,html}',
|
||||
'./static/theme.js'
|
||||
],
|
||||
theme: {
|
||||
extend: {
|
||||
fontFamily: {
|
||||
sans: ['Rubik', 'ui-sans-serif', 'system-ui', '-apple-system', 'Segoe UI', 'Roboto', 'Helvetica Neue', 'Arial', 'Noto Sans']
|
||||
}
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
require('@tailwindcss/typography'),
|
||||
require('@catppuccin/tailwindcss').catppuccin({
|
||||
prefix: 'ctp',
|
||||
defaultFlavor: 'mocha'
|
||||
})
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
25
tailwind.config.mjs
Normal file
25
tailwind.config.mjs
Normal file
@@ -0,0 +1,25 @@
|
||||
import typography from '@tailwindcss/typography'
|
||||
import { catppuccin } from '@catppuccin/tailwindcss'
|
||||
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
export default {
|
||||
darkMode: 'class',
|
||||
content: [
|
||||
'./layouts/**/*.{html,htm}',
|
||||
'./content/**/*.{md,html}',
|
||||
'./static/theme.js'
|
||||
],
|
||||
theme: {
|
||||
extend: {
|
||||
fontFamily: {
|
||||
sans: ['Rubik', 'ui-sans-serif', 'system-ui', '-apple-system', 'Segoe UI', 'Roboto', 'Helvetica Neue', 'Arial', 'Noto Sans']
|
||||
}
|
||||
}
|
||||
},
|
||||
plugins: [
|
||||
typography,
|
||||
catppuccin({ prefix: 'ctp', defaultFlavor: 'mocha' })
|
||||
]
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user