fixed site
@@ -1,202 +1,385 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" dir="auto">
|
||||
|
||||
<head><meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="robots" content="index, follow">
|
||||
<title>404 Page not found | PyteDev Blog</title>
|
||||
<meta name="keywords" content="">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
<link rel="canonical" href="https://pyte.dev/404.html">
|
||||
<link crossorigin="anonymous" href="/assets/css/stylesheet.f49d66caae9ea0fd43f21f29e71a8d3e284517ed770f2aa86fa012953ad3c9ef.css" integrity="sha256-9J1myq6eoP1D8h8p5xqNPihFF+13Dyqob6ASlTrTye8=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="https://pyte.dev/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="https://pyte.dev/favicon-16x16.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="https://pyte.dev/favicon-32x32.png">
|
||||
<link rel="apple-touch-icon" href="https://pyte.dev/apple-touch-icon.png">
|
||||
<link rel="mask-icon" href="https://pyte.dev/safari-pinned-tab.svg">
|
||||
<meta name="theme-color" content="#2e2e33">
|
||||
<meta name="msapplication-TileColor" content="#2e2e33">
|
||||
<link rel="alternate" hreflang="en" href="https://pyte.dev/404.html">
|
||||
<noscript>
|
||||
<style>
|
||||
#theme-toggle,
|
||||
.top-link {
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--theme: rgb(29, 30, 32);
|
||||
--entry: rgb(46, 46, 51);
|
||||
--primary: rgb(218, 218, 219);
|
||||
--secondary: rgb(155, 156, 157);
|
||||
--tertiary: rgb(65, 66, 68);
|
||||
--content: rgb(196, 196, 197);
|
||||
--code-block-bg: rgb(46, 46, 51);
|
||||
--code-bg: rgb(55, 56, 62);
|
||||
--border: rgb(51, 51, 51);
|
||||
}
|
||||
|
||||
.list {
|
||||
background: var(--theme);
|
||||
}
|
||||
|
||||
.list:not(.dark)::-webkit-scrollbar-track {
|
||||
background: 0 0;
|
||||
}
|
||||
|
||||
.list:not(.dark)::-webkit-scrollbar-thumb {
|
||||
border-color: var(--theme);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
</noscript><meta property="og:url" content="https://pyte.dev/404.html">
|
||||
<meta property="og:site_name" content="PyteDev Blog">
|
||||
<meta property="og:title" content="404 Page not found">
|
||||
<meta property="og:locale" content="en-us">
|
||||
<meta property="og:type" content="website">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:title" content="404 Page not found">
|
||||
<meta name="twitter:description" content="">
|
||||
|
||||
</head>
|
||||
|
||||
<body class="list" id="top">
|
||||
<!doctype html>
|
||||
<html
|
||||
lang="de-DE"
|
||||
dir="ltr"
|
||||
class="h-full">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta name="language" content="de-DE">
|
||||
<script>
|
||||
if (localStorage.getItem("pref-theme") === "dark") {
|
||||
document.body.classList.add('dark');
|
||||
} else if (localStorage.getItem("pref-theme") === "light") {
|
||||
document.body.classList.remove('dark')
|
||||
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
document.body.classList.add('dark');
|
||||
}
|
||||
|
||||
|
||||
(function () {
|
||||
const storedTheme = localStorage.getItem("theme");
|
||||
const systemPrefersLight = window.matchMedia("(prefers-color-scheme: light)").matches;
|
||||
const theme = storedTheme || (systemPrefersLight ? "light" : "dark");
|
||||
document.documentElement.setAttribute("data-theme", theme);
|
||||
})();
|
||||
</script>
|
||||
|
||||
<header class="header">
|
||||
<nav class="nav">
|
||||
<div class="logo">
|
||||
<a href="https://pyte.dev/" accesskey="h" title="PyteDev Blog (Alt + H)">PyteDev Blog</a>
|
||||
<div class="logo-switches">
|
||||
<button id="theme-toggle" accesskey="t" title="(Alt + T)" aria-label="Toggle theme">
|
||||
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
|
||||
</svg>
|
||||
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="menu">
|
||||
<li>
|
||||
<a href="https://pyte.dev/" title="Home">
|
||||
<span>Home</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://pyte.dev/posts/" title="Blog">
|
||||
<span>Blog</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://pyte.dev/search/" title="Search">
|
||||
<span>Search</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<main class="main">
|
||||
<div class="not-found">404</div>
|
||||
</main>
|
||||
<title>404 Page not found | Demians Blog</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="
|
||||
|
||||
<footer class="footer">
|
||||
<span>© 2025 <a href="https://pyte.dev/">PyteDev Blog</a></span> ·
|
||||
|
||||
">
|
||||
|
||||
<span>
|
||||
Powered by
|
||||
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
|
||||
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
|
||||
</span>
|
||||
</footer>
|
||||
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
|
||||
<path d="M12 6H0l6-6z" />
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<script>
|
||||
let menu = document.getElementById('menu')
|
||||
if (menu) {
|
||||
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
|
||||
menu.onscroll = function () {
|
||||
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://pyte.dev/404.html">
|
||||
|
||||
<meta name="robots" content="index, follow">
|
||||
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="404 Page not found | Demians Blog">
|
||||
<meta property="og:description" content="">
|
||||
<meta property="og:url" content="https://pyte.dev/404.html">
|
||||
<meta property="og:site_name" content="Demians Blog"><meta property="og:image" content="https://pyte.dev/assets/patrick.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="404 Page not found | Demians Blog">
|
||||
<meta name="twitter:description" content=""><meta name="twitter:image" content="https://pyte.dev/assets/patrick.png">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<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=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&family=Outfit:wght@400;500;600;700;800;900&family=Space+Grotesk:wght@400;500;600;700&display=swap"
|
||||
rel="stylesheet">
|
||||
|
||||
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/css/theme.min.86a32b729f656fc6c119ed69193950db815a3ad9fdc967b32c76d602f11449a4.css"
|
||||
integrity="sha256-hqMrcp9lb8bBGe1pGTlQ24FaOtn9yWezLHbWAvEUSaQ=">
|
||||
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/css/syntax-dark.min.3e403a03e3af837b3829e9b6f01fc7792bda7cb7f5056f5e9786109545c6b2e1.css"
|
||||
integrity="sha256-PkA6A+Ovg3s4Kem28B/HeSvafLf1BW9el4YQlUXGsuE="
|
||||
id="syntax-dark-theme"
|
||||
class="syntax-theme"><link
|
||||
rel="stylesheet"
|
||||
href="/css/syntax-light.min.d0d33b879698595e6b2c0f75f0cea95a8517fb0150570cd0ee4dc42e25c8d147.css"
|
||||
integrity="sha256-0NM7h5aYWV5rLA918M6pWoUX+wFQVwzQ7k3ELiXI0Uc="
|
||||
id="syntax-light-theme"
|
||||
class="syntax-theme"
|
||||
disabled><script>
|
||||
|
||||
(function () {
|
||||
const storedTheme = localStorage.getItem("theme");
|
||||
const systemPrefersLight = window.matchMedia("(prefers-color-scheme: light)").matches;
|
||||
const theme = storedTheme || (systemPrefersLight ? "light" : "dark");
|
||||
|
||||
const syntaxDark = document.getElementById("syntax-dark-theme");
|
||||
const syntaxLight = document.getElementById("syntax-light-theme");
|
||||
|
||||
if (theme === "light") {
|
||||
if (syntaxDark) syntaxDark.disabled = true;
|
||||
if (syntaxLight) syntaxLight.disabled = false;
|
||||
} else {
|
||||
if (syntaxDark) syntaxDark.disabled = false;
|
||||
if (syntaxLight) syntaxLight.disabled = true;
|
||||
}
|
||||
|
||||
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||||
anchor.addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
var id = this.getAttribute("href").substr(1);
|
||||
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
||||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
|
||||
behavior: "smooth"
|
||||
});
|
||||
} else {
|
||||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
|
||||
}
|
||||
if (id === "top") {
|
||||
history.replaceState(null, null, " ");
|
||||
} else {
|
||||
history.pushState(null, null, `#${id}`);
|
||||
}
|
||||
});
|
||||
|
||||
const observer = new MutationObserver(() => {
|
||||
const currentTheme = document.documentElement.getAttribute("data-theme");
|
||||
if (currentTheme === "light") {
|
||||
if (syntaxDark) syntaxDark.disabled = true;
|
||||
if (syntaxLight) syntaxLight.disabled = false;
|
||||
} else {
|
||||
if (syntaxDark) syntaxDark.disabled = false;
|
||||
if (syntaxLight) syntaxLight.disabled = true;
|
||||
}
|
||||
});
|
||||
|
||||
observer.observe(document.documentElement, {
|
||||
attributes: true,
|
||||
attributeFilter: ["data-theme"],
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<script>
|
||||
var mybutton = document.getElementById("top-link");
|
||||
window.onscroll = function () {
|
||||
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
|
||||
mybutton.style.visibility = "visible";
|
||||
mybutton.style.opacity = "1";
|
||||
} else {
|
||||
mybutton.style.visibility = "hidden";
|
||||
mybutton.style.opacity = "0";
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
<script>
|
||||
document.getElementById("theme-toggle").addEventListener("click", () => {
|
||||
if (document.body.className.includes("dark")) {
|
||||
document.body.classList.remove('dark');
|
||||
localStorage.setItem("pref-theme", 'light');
|
||||
} else {
|
||||
document.body.classList.add('dark');
|
||||
localStorage.setItem("pref-theme", 'dark');
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
||||
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/css/bundle.min.783a79746a859af9be598cbc33fba2a1087434b23768524277b07ef28336f113.css"
|
||||
integrity="sha256-eDp5dGqFmvm+WYy8M/uioQh0NLI3aFJCd7B+8oM28RM=">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
|
||||
|
||||
<link rel="icon" type="image/png" href="/favicon.png">
|
||||
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon/logo-transparent/favicon-32x32.png">
|
||||
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon/logo-transparent/favicon-16x16.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/favicon/logo-transparent/apple-touch-icon.png">
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="192x192"
|
||||
href="/favicon/logo-transparent/android-chrome-192x192.png">
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="512x512"
|
||||
href="/favicon/logo-transparent/android-chrome-512x512.png">
|
||||
<link rel="manifest" href="/favicon/logo-transparent/site.webmanifest">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body class="flex flex-col min-h-screen">
|
||||
<a href="#main-content" class="skip-to-main" aria-label="Skip to main content"
|
||||
>Skip to main content</a
|
||||
>
|
||||
<header class="sticky-header">
|
||||
<div class="header-container">
|
||||
<nav class="header-nav" role="navigation" aria-label="Main navigation">
|
||||
<div class="header-content">
|
||||
<div class="header-logo">
|
||||
<a href="/" class="logo-link" aria-label="Home - Demians Blog">
|
||||
Demians Blog
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="header-menu">
|
||||
<ul class="menu-list">
|
||||
|
||||
<li class="menu-item">
|
||||
<a
|
||||
href="/"
|
||||
class="menu-link ">
|
||||
Home
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="menu-item">
|
||||
<a
|
||||
href="/posts/"
|
||||
class="menu-link ">
|
||||
Blog
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<button id="search-toggle" class="search-toggle" aria-label="Search" type="button">
|
||||
<svg class="search-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<button id="theme-toggle" class="theme-toggle" aria-label="Toggle theme" type="button">
|
||||
<svg class="icon-sun" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"></path>
|
||||
</svg>
|
||||
<svg class="icon-moon" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"></path>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main-content" class="flex-1" role="main">
|
||||
|
||||
|
||||
<section class="hero-section">
|
||||
<div class="hero-container">
|
||||
<div class="hero-content">
|
||||
<div class="hero-text">
|
||||
<h1 class="hero-title">
|
||||
<span class="hero-title-line2">404</span>
|
||||
<span class="hero-title-line1">This Page Does Not Exist</span>
|
||||
</h1>
|
||||
<p class="hero-subtitle">
|
||||
>
|
||||
|
||||
Sorry, the page you are looking for could not be found.
|
||||
|
||||
</p>
|
||||
<div class="hero-social" style="margin-top: var(--spacing-lg);">
|
||||
<a href="/" class="post-tag"> Return to the home page </a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hero-image">
|
||||
<img
|
||||
src="/favicon/logo-transparent/android-chrome-512x512.png"
|
||||
alt="Demians Blog"
|
||||
class="hero-logo">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<footer class="site-footer">
|
||||
<div class="footer-content">
|
||||
<p class="footer-text">
|
||||
©
|
||||
|
||||
2026
|
||||
|
||||
Demians Blog.
|
||||
|
||||
Built with Hugo and Mana ❤️
|
||||
|
||||
</p>
|
||||
|
||||
<div class="footer-social">
|
||||
<div class="social-links">
|
||||
|
||||
<a
|
||||
href="https://github.com/pyte1"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="social-link"
|
||||
aria-label="GitHub">
|
||||
<svg fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
|
||||
clip-rule="evenodd"></path>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="mailto:demian%20%28at%29%20pyte%20%28dot%29%20dev" class="social-link" aria-label="Email">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</footer>
|
||||
|
||||
<div id="search-modal" class="search-modal" aria-hidden="true" role="dialog" aria-label="Search">
|
||||
<div class="search-modal-backdrop" id="search-modal-backdrop"></div>
|
||||
<div class="search-modal-container">
|
||||
<div class="search-input-wrapper">
|
||||
<svg class="search-input-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
|
||||
</svg>
|
||||
<input
|
||||
type="search"
|
||||
id="search-input"
|
||||
class="search-input"
|
||||
placeholder="Search..."
|
||||
autocomplete="off"
|
||||
aria-label="Search input">
|
||||
<button class="search-input-clear" id="search-input-clear" aria-label="Clear search">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path>
|
||||
</svg>
|
||||
</button>
|
||||
<button class="search-modal-close" id="search-modal-close" aria-label="Close search">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M6 18L18 6M6 6l12 12"></path>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div id="search-results" class="search-results"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<button id="scroll-to-top" class="scroll-to-top" aria-label="Scroll to top" type="button">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M5 10l7-7m0 0l7 7m-7-7v18"></path>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/js/main.min.e60ab79dca7b920b4dc5cf3163ad5ce8794839b60f27778db65782f087be3e27.js" defer></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,6 @@
|
||||
--2026-01-13 18:39:18-- https://i.redd.it/characters-who-are-dumb-but-dont-have-a-heart-to-make-up-v0-46o9rs25apke1.png?width=864
|
||||
Resolving i.redd.it (i.redd.it)... 146.75.121.140, 2a04:4e42:8e::396
|
||||
Connecting to i.redd.it (i.redd.it)|146.75.121.140|:443... connected.
|
||||
HTTP request sent, awaiting response... 403 Forbidden
|
||||
2026-01-13 18:39:18 ERROR 403: Forbidden.
|
||||
|
||||
@@ -1,208 +1,501 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" dir="auto">
|
||||
|
||||
<head><meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<meta name="robots" content="index, follow">
|
||||
<title>Categories | PyteDev Blog</title>
|
||||
<meta name="keywords" content="">
|
||||
<meta name="description" content="">
|
||||
<meta name="author" content="">
|
||||
<link rel="canonical" href="https://pyte.dev/categories/">
|
||||
<link crossorigin="anonymous" href="/assets/css/stylesheet.f49d66caae9ea0fd43f21f29e71a8d3e284517ed770f2aa86fa012953ad3c9ef.css" integrity="sha256-9J1myq6eoP1D8h8p5xqNPihFF+13Dyqob6ASlTrTye8=" rel="preload stylesheet" as="style">
|
||||
<link rel="icon" href="https://pyte.dev/favicon.ico">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="https://pyte.dev/favicon-16x16.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="https://pyte.dev/favicon-32x32.png">
|
||||
<link rel="apple-touch-icon" href="https://pyte.dev/apple-touch-icon.png">
|
||||
<link rel="mask-icon" href="https://pyte.dev/safari-pinned-tab.svg">
|
||||
<meta name="theme-color" content="#2e2e33">
|
||||
<meta name="msapplication-TileColor" content="#2e2e33">
|
||||
<link rel="alternate" type="application/rss+xml" href="https://pyte.dev/categories/index.xml">
|
||||
<link rel="alternate" hreflang="en" href="https://pyte.dev/categories/">
|
||||
<noscript>
|
||||
<style>
|
||||
#theme-toggle,
|
||||
.top-link {
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
<style>
|
||||
@media (prefers-color-scheme: dark) {
|
||||
:root {
|
||||
--theme: rgb(29, 30, 32);
|
||||
--entry: rgb(46, 46, 51);
|
||||
--primary: rgb(218, 218, 219);
|
||||
--secondary: rgb(155, 156, 157);
|
||||
--tertiary: rgb(65, 66, 68);
|
||||
--content: rgb(196, 196, 197);
|
||||
--code-block-bg: rgb(46, 46, 51);
|
||||
--code-bg: rgb(55, 56, 62);
|
||||
--border: rgb(51, 51, 51);
|
||||
}
|
||||
|
||||
.list {
|
||||
background: var(--theme);
|
||||
}
|
||||
|
||||
.list:not(.dark)::-webkit-scrollbar-track {
|
||||
background: 0 0;
|
||||
}
|
||||
|
||||
.list:not(.dark)::-webkit-scrollbar-thumb {
|
||||
border-color: var(--theme);
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
</noscript><meta property="og:url" content="https://pyte.dev/categories/">
|
||||
<meta property="og:site_name" content="PyteDev Blog">
|
||||
<meta property="og:title" content="Categories">
|
||||
<meta property="og:locale" content="en-us">
|
||||
<meta property="og:type" content="website">
|
||||
<meta name="twitter:card" content="summary">
|
||||
<meta name="twitter:title" content="Categories">
|
||||
<meta name="twitter:description" content="">
|
||||
|
||||
</head>
|
||||
|
||||
<body class="list" id="top">
|
||||
<!doctype html>
|
||||
<html
|
||||
lang="de-DE"
|
||||
dir="ltr"
|
||||
class="h-full">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta name="language" content="de-DE">
|
||||
<script>
|
||||
if (localStorage.getItem("pref-theme") === "dark") {
|
||||
document.body.classList.add('dark');
|
||||
} else if (localStorage.getItem("pref-theme") === "light") {
|
||||
document.body.classList.remove('dark')
|
||||
} else if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||
document.body.classList.add('dark');
|
||||
}
|
||||
|
||||
|
||||
(function () {
|
||||
const storedTheme = localStorage.getItem("theme");
|
||||
const systemPrefersLight = window.matchMedia("(prefers-color-scheme: light)").matches;
|
||||
const theme = storedTheme || (systemPrefersLight ? "light" : "dark");
|
||||
document.documentElement.setAttribute("data-theme", theme);
|
||||
})();
|
||||
</script>
|
||||
|
||||
<header class="header">
|
||||
<nav class="nav">
|
||||
<div class="logo">
|
||||
<a href="https://pyte.dev/" accesskey="h" title="PyteDev Blog (Alt + H)">PyteDev Blog</a>
|
||||
<div class="logo-switches">
|
||||
<button id="theme-toggle" accesskey="t" title="(Alt + T)" aria-label="Toggle theme">
|
||||
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
|
||||
</svg>
|
||||
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="18" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round">
|
||||
<circle cx="12" cy="12" r="5"></circle>
|
||||
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<ul id="menu">
|
||||
<li>
|
||||
<a href="https://pyte.dev/" title="Home">
|
||||
<span>Home</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://pyte.dev/posts/" title="Blog">
|
||||
<span>Blog</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="https://pyte.dev/search/" title="Search">
|
||||
<span>Search</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
</header>
|
||||
<main class="main">
|
||||
<header class="page-header">
|
||||
<h1>Categories</h1>
|
||||
</header>
|
||||
|
||||
<ul class="terms-tags">
|
||||
</ul>
|
||||
</main>
|
||||
<title>Categories | Demians Blog</title>
|
||||
<meta
|
||||
name="description"
|
||||
content="
|
||||
|
||||
<footer class="footer">
|
||||
<span>© 2025 <a href="https://pyte.dev/">PyteDev Blog</a></span> ·
|
||||
|
||||
">
|
||||
|
||||
<span>
|
||||
Powered by
|
||||
<a href="https://gohugo.io/" rel="noopener noreferrer" target="_blank">Hugo</a> &
|
||||
<a href="https://github.com/adityatelange/hugo-PaperMod/" rel="noopener" target="_blank">PaperMod</a>
|
||||
</span>
|
||||
</footer>
|
||||
<a href="#top" aria-label="go to top" title="Go to Top (Alt + G)" class="top-link" id="top-link" accesskey="g">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 12 6" fill="currentColor">
|
||||
<path d="M12 6H0l6-6z" />
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
<script>
|
||||
let menu = document.getElementById('menu')
|
||||
if (menu) {
|
||||
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
|
||||
menu.onscroll = function () {
|
||||
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="canonical" href="https://pyte.dev/categories/">
|
||||
|
||||
<meta name="robots" content="index, follow">
|
||||
|
||||
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:title" content="Categories | Demians Blog">
|
||||
<meta property="og:description" content="">
|
||||
<meta property="og:url" content="https://pyte.dev/categories/">
|
||||
<meta property="og:site_name" content="Demians Blog"><meta property="og:image" content="https://pyte.dev/assets/patrick.png">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="Categories | Demians Blog">
|
||||
<meta name="twitter:description" content=""><meta name="twitter:image" content="https://pyte.dev/assets/patrick.png">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<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=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&family=Outfit:wght@400;500;600;700;800;900&family=Space+Grotesk:wght@400;500;600;700&display=swap"
|
||||
rel="stylesheet">
|
||||
|
||||
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/css/theme.min.86a32b729f656fc6c119ed69193950db815a3ad9fdc967b32c76d602f11449a4.css"
|
||||
integrity="sha256-hqMrcp9lb8bBGe1pGTlQ24FaOtn9yWezLHbWAvEUSaQ=">
|
||||
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/css/syntax-dark.min.3e403a03e3af837b3829e9b6f01fc7792bda7cb7f5056f5e9786109545c6b2e1.css"
|
||||
integrity="sha256-PkA6A+Ovg3s4Kem28B/HeSvafLf1BW9el4YQlUXGsuE="
|
||||
id="syntax-dark-theme"
|
||||
class="syntax-theme"><link
|
||||
rel="stylesheet"
|
||||
href="/css/syntax-light.min.d0d33b879698595e6b2c0f75f0cea95a8517fb0150570cd0ee4dc42e25c8d147.css"
|
||||
integrity="sha256-0NM7h5aYWV5rLA918M6pWoUX+wFQVwzQ7k3ELiXI0Uc="
|
||||
id="syntax-light-theme"
|
||||
class="syntax-theme"
|
||||
disabled><script>
|
||||
|
||||
(function () {
|
||||
const storedTheme = localStorage.getItem("theme");
|
||||
const systemPrefersLight = window.matchMedia("(prefers-color-scheme: light)").matches;
|
||||
const theme = storedTheme || (systemPrefersLight ? "light" : "dark");
|
||||
|
||||
const syntaxDark = document.getElementById("syntax-dark-theme");
|
||||
const syntaxLight = document.getElementById("syntax-light-theme");
|
||||
|
||||
if (theme === "light") {
|
||||
if (syntaxDark) syntaxDark.disabled = true;
|
||||
if (syntaxLight) syntaxLight.disabled = false;
|
||||
} else {
|
||||
if (syntaxDark) syntaxDark.disabled = false;
|
||||
if (syntaxLight) syntaxLight.disabled = true;
|
||||
}
|
||||
|
||||
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
||||
anchor.addEventListener("click", function (e) {
|
||||
e.preventDefault();
|
||||
var id = this.getAttribute("href").substr(1);
|
||||
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
||||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
|
||||
behavior: "smooth"
|
||||
});
|
||||
} else {
|
||||
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
|
||||
}
|
||||
if (id === "top") {
|
||||
history.replaceState(null, null, " ");
|
||||
} else {
|
||||
history.pushState(null, null, `#${id}`);
|
||||
}
|
||||
});
|
||||
|
||||
const observer = new MutationObserver(() => {
|
||||
const currentTheme = document.documentElement.getAttribute("data-theme");
|
||||
if (currentTheme === "light") {
|
||||
if (syntaxDark) syntaxDark.disabled = true;
|
||||
if (syntaxLight) syntaxLight.disabled = false;
|
||||
} else {
|
||||
if (syntaxDark) syntaxDark.disabled = false;
|
||||
if (syntaxLight) syntaxLight.disabled = true;
|
||||
}
|
||||
});
|
||||
|
||||
observer.observe(document.documentElement, {
|
||||
attributes: true,
|
||||
attributeFilter: ["data-theme"],
|
||||
});
|
||||
})();
|
||||
</script>
|
||||
<script>
|
||||
var mybutton = document.getElementById("top-link");
|
||||
window.onscroll = function () {
|
||||
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
|
||||
mybutton.style.visibility = "visible";
|
||||
mybutton.style.opacity = "1";
|
||||
} else {
|
||||
mybutton.style.visibility = "hidden";
|
||||
mybutton.style.opacity = "0";
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
<script>
|
||||
document.getElementById("theme-toggle").addEventListener("click", () => {
|
||||
if (document.body.className.includes("dark")) {
|
||||
document.body.classList.remove('dark');
|
||||
localStorage.setItem("pref-theme", 'light');
|
||||
} else {
|
||||
document.body.classList.add('dark');
|
||||
localStorage.setItem("pref-theme", 'dark');
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
||||
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="/css/bundle.min.783a79746a859af9be598cbc33fba2a1087434b23768524277b07ef28336f113.css"
|
||||
integrity="sha256-eDp5dGqFmvm+WYy8M/uioQh0NLI3aFJCd7B+8oM28RM=">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<link rel="icon" type="image/x-icon" href="/favicon.ico">
|
||||
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">
|
||||
|
||||
<link rel="icon" type="image/png" href="/favicon.png">
|
||||
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="/favicon/logo-transparent/favicon-32x32.png">
|
||||
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="/favicon/logo-transparent/favicon-16x16.png">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="/favicon/logo-transparent/apple-touch-icon.png">
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="192x192"
|
||||
href="/favicon/logo-transparent/android-chrome-192x192.png">
|
||||
<link
|
||||
rel="icon"
|
||||
type="image/png"
|
||||
sizes="512x512"
|
||||
href="/favicon/logo-transparent/android-chrome-512x512.png">
|
||||
<link rel="manifest" href="/favicon/logo-transparent/site.webmanifest">
|
||||
|
||||
|
||||
<link rel="alternate" type="application/rss+xml" href="https://pyte.dev/categories/index.xml">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body class="flex flex-col min-h-screen">
|
||||
<a href="#main-content" class="skip-to-main" aria-label="Skip to main content"
|
||||
>Skip to main content</a
|
||||
>
|
||||
<header class="sticky-header">
|
||||
<div class="header-container">
|
||||
<nav class="header-nav" role="navigation" aria-label="Main navigation">
|
||||
<div class="header-content">
|
||||
<div class="header-logo">
|
||||
<a href="/" class="logo-link" aria-label="Home - Demians Blog">
|
||||
Demians Blog
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="header-menu">
|
||||
<ul class="menu-list">
|
||||
|
||||
<li class="menu-item">
|
||||
<a
|
||||
href="/"
|
||||
class="menu-link ">
|
||||
Home
|
||||
</a>
|
||||
</li>
|
||||
|
||||
<li class="menu-item">
|
||||
<a
|
||||
href="/posts/"
|
||||
class="menu-link ">
|
||||
Blog
|
||||
</a>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<button id="search-toggle" class="search-toggle" aria-label="Search" type="button">
|
||||
<svg class="search-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
<button id="theme-toggle" class="theme-toggle" aria-label="Toggle theme" type="button">
|
||||
<svg class="icon-sun" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"></path>
|
||||
</svg>
|
||||
<svg class="icon-moon" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"></path>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="main-content" class="flex-1" role="main">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="list-container">
|
||||
<header class="list-header">
|
||||
<h1 class="list-title">
|
||||
<span class="list-title-line2">POSTS</span>
|
||||
</h1>
|
||||
|
||||
<div class="list-count">
|
||||
<span id="filtered-count">0</span>
|
||||
posts
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</header>
|
||||
|
||||
|
||||
<div class="filter-accordion">
|
||||
<button
|
||||
class="filter-toggle-btn"
|
||||
id="filter-toggle-btn"
|
||||
aria-expanded="false"
|
||||
aria-label="Toggle filters"
|
||||
aria-controls="posts-filter-content">
|
||||
<span class="filter-toggle-text">Filters</span>
|
||||
<svg
|
||||
class="filter-toggle-icon"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
viewBox="0 0 24 24"
|
||||
aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M19 9l-7 7-7-7"></path>
|
||||
</svg>
|
||||
</button>
|
||||
<div class="posts-filter" id="posts-filter-content">
|
||||
<div class="filter-group filter-group-tags">
|
||||
<label class="filter-label" for="tag-search-input">Tags</label>
|
||||
<div class="tag-search-container">
|
||||
<input
|
||||
type="text"
|
||||
id="tag-search-input"
|
||||
class="tag-search-input"
|
||||
placeholder="Search for tags..."
|
||||
aria-label="Search for tags">
|
||||
<div
|
||||
id="tag-search-results"
|
||||
class="tag-search-results"
|
||||
role="listbox"
|
||||
aria-label="Tag search results"></div>
|
||||
</div>
|
||||
<div class="filter-tags" id="selected-tags-container">
|
||||
|
||||
</div>
|
||||
<div id="all-tags-data" style="display: none;">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="filter-group">
|
||||
<label for="filter-year-month" class="filter-label">Year & Month</label>
|
||||
<select
|
||||
id="filter-year-month"
|
||||
class="filter-select"
|
||||
aria-label="Filter by year and month">
|
||||
<option value="">All Dates</option>
|
||||
|
||||
<option value="2025 August">2025 August</option>
|
||||
|
||||
<option value="2025 May">2025 May</option>
|
||||
|
||||
<option value="2025 October">2025 October</option>
|
||||
|
||||
<option value="2026 January">2026 January</option>
|
||||
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<button id="clear-filters" class="filter-clear-btn" aria-label="Clear all filters">
|
||||
Clear Filters
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="posts-list" id="posts-container">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</nav>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="tag-nav-links">
|
||||
<a href="/" class="tag-nav-link">Back to Home</a>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</main>
|
||||
|
||||
<footer>
|
||||
<footer class="site-footer">
|
||||
<div class="footer-content">
|
||||
<p class="footer-text">
|
||||
©
|
||||
|
||||
2026
|
||||
|
||||
Demians Blog.
|
||||
|
||||
Built with Hugo and Mana ❤️
|
||||
|
||||
</p>
|
||||
|
||||
<div class="footer-social">
|
||||
<div class="social-links">
|
||||
|
||||
<a
|
||||
href="https://github.com/pyte1"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="social-link"
|
||||
aria-label="GitHub">
|
||||
<svg fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
|
||||
clip-rule="evenodd"></path>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a href="mailto:demian%20%28at%29%20pyte%20%28dot%29%20dev" class="social-link" aria-label="Email">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"></path>
|
||||
</svg>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</footer>
|
||||
|
||||
<div id="search-modal" class="search-modal" aria-hidden="true" role="dialog" aria-label="Search">
|
||||
<div class="search-modal-backdrop" id="search-modal-backdrop"></div>
|
||||
<div class="search-modal-container">
|
||||
<div class="search-input-wrapper">
|
||||
<svg class="search-input-icon" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path>
|
||||
</svg>
|
||||
<input
|
||||
type="search"
|
||||
id="search-input"
|
||||
class="search-input"
|
||||
placeholder="Search..."
|
||||
autocomplete="off"
|
||||
aria-label="Search input">
|
||||
<button class="search-input-clear" id="search-input-clear" aria-label="Clear search">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path>
|
||||
</svg>
|
||||
</button>
|
||||
<button class="search-modal-close" id="search-modal-close" aria-label="Close search">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M6 18L18 6M6 6l12 12"></path>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div id="search-results" class="search-results"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<button id="scroll-to-top" class="scroll-to-top" aria-label="Scroll to top" type="button">
|
||||
<svg fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
|
||||
<path
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
d="M5 10l7-7m0 0l7 7m-7-7v18"></path>
|
||||
</svg>
|
||||
</button>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="/js/main.min.e60ab79dca7b920b4dc5cf3163ad5ce8794839b60f27778db65782f087be3e27.js" defer></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>Categories on PyteDev Blog</title>
|
||||
<title>Categories on Demians Blog</title>
|
||||
<link>https://pyte.dev/categories/</link>
|
||||
<description>Recent content in Categories on PyteDev Blog</description>
|
||||
<generator>Hugo -- 0.147.2</generator>
|
||||
<language>en-us</language>
|
||||
<description>Recent content in Categories on Demians Blog</description>
|
||||
<generator>Hugo</generator>
|
||||
<language>de-DE</language>
|
||||
<atom:link href="https://pyte.dev/categories/index.xml" rel="self" type="application/rss+xml" />
|
||||
</channel>
|
||||
</rss>
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de-DE">
|
||||
<head>
|
||||
<title>https://pyte.dev/categories/</title>
|
||||
<link rel="canonical" href="https://pyte.dev/categories/">
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="refresh" content="0; url=https://pyte.dev/categories/">
|
||||
</head>
|
||||
</html>
|
||||
@@ -0,0 +1 @@
|
||||
.bg{color:#cad3f5;background-color:#24273a}.chroma{color:#cad3f5;background-color:#24273a}.chroma .err{color:#ed8796}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#494d64}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#8087a2}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#8087a2}.chroma .line{display:flex}.chroma .k{color:#c6a0f6}.chroma .kc{color:#f5a97f}.chroma .kd{color:#ed8796}.chroma .kn{color:#8bd5ca}.chroma .kp{color:#c6a0f6}.chroma .kr{color:#c6a0f6}.chroma .kt{color:#ed8796}.chroma .na{color:#8aadf4}.chroma .nc{color:#eed49f}.chroma .no{color:#eed49f}.chroma .nd{color:#8aadf4;font-weight:700}.chroma .ni{color:#8bd5ca}.chroma .ne{color:#f5a97f}.chroma .nl{color:#91d7e3}.chroma .nn{color:#f5a97f}.chroma .py{color:#f5a97f}.chroma .nt{color:#c6a0f6}.chroma .nb{color:#91d7e3}.chroma .bp{color:#91d7e3}.chroma .nv{color:#f4dbd6}.chroma .vc{color:#f4dbd6}.chroma .vg{color:#f4dbd6}.chroma .vi{color:#f4dbd6}.chroma .vm{color:#f4dbd6}.chroma .nf{color:#8aadf4}.chroma .fm{color:#8aadf4}.chroma .s{color:#a6da95}.chroma .sa{color:#ed8796}.chroma .sb{color:#a6da95}.chroma .sc{color:#a6da95}.chroma .dl{color:#8aadf4}.chroma .sd{color:#6e738d}.chroma .s2{color:#a6da95}.chroma .se{color:#8aadf4}.chroma .sh{color:#6e738d}.chroma .si{color:#a6da95}.chroma .sx{color:#a6da95}.chroma .sr{color:#8bd5ca}.chroma .s1{color:#a6da95}.chroma .ss{color:#a6da95}.chroma .m{color:#f5a97f}.chroma .mb{color:#f5a97f}.chroma .mf{color:#f5a97f}.chroma .mh{color:#f5a97f}.chroma .mi{color:#f5a97f}.chroma .il{color:#f5a97f}.chroma .mo{color:#f5a97f}.chroma .o{color:#91d7e3;font-weight:700}.chroma .ow{color:#91d7e3;font-weight:700}.chroma .c{color:#6e738d;font-style:italic}.chroma .ch{color:#6e738d;font-style:italic}.chroma .cm{color:#6e738d;font-style:italic}.chroma .c1{color:#6e738d;font-style:italic}.chroma .cs{color:#6e738d;font-style:italic}.chroma .cp{color:#6e738d;font-style:italic}.chroma .cpf{color:#6e738d;font-weight:700;font-style:italic}.chroma .gd{color:#ed8796;background-color:#363a4f}.chroma .ge{font-style:italic}.chroma .gr{color:#ed8796}.chroma .gh{color:#f5a97f;font-weight:700}.chroma .gi{color:#a6da95;background-color:#363a4f}.chroma .gs{font-weight:700}.chroma .gu{color:#f5a97f;font-weight:700}.chroma .gt{color:#ed8796}.chroma .gl{text-decoration:underline}
|
||||
@@ -0,0 +1 @@
|
||||
.bg{color:#cad3f5;background-color:#24273a}.chroma{color:#cad3f5;background-color:#24273a}.chroma .x{}.chroma .err{color:#ed8796}.chroma .cl{}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#494d64}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#8087a2}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#8087a2}.chroma .line{display:flex}.chroma .k{color:#c6a0f6}.chroma .kc{color:#f5a97f}.chroma .kd{color:#ed8796}.chroma .kn{color:#8bd5ca}.chroma .kp{color:#c6a0f6}.chroma .kr{color:#c6a0f6}.chroma .kt{color:#ed8796}.chroma .n{}.chroma .na{color:#8aadf4}.chroma .nc{color:#eed49f}.chroma .no{color:#eed49f}.chroma .nd{color:#8aadf4;font-weight:700}.chroma .ni{color:#8bd5ca}.chroma .ne{color:#f5a97f}.chroma .nl{color:#91d7e3}.chroma .nn{color:#f5a97f}.chroma .nx{}.chroma .py{color:#f5a97f}.chroma .nt{color:#c6a0f6}.chroma .nb{color:#91d7e3}.chroma .bp{color:#91d7e3}.chroma .nv{color:#f4dbd6}.chroma .vc{color:#f4dbd6}.chroma .vg{color:#f4dbd6}.chroma .vi{color:#f4dbd6}.chroma .vm{color:#f4dbd6}.chroma .nf{color:#8aadf4}.chroma .fm{color:#8aadf4}.chroma .l{}.chroma .ld{}.chroma .s{color:#a6da95}.chroma .sa{color:#ed8796}.chroma .sb{color:#a6da95}.chroma .sc{color:#a6da95}.chroma .dl{color:#8aadf4}.chroma .sd{color:#6e738d}.chroma .s2{color:#a6da95}.chroma .se{color:#8aadf4}.chroma .sh{color:#6e738d}.chroma .si{color:#a6da95}.chroma .sx{color:#a6da95}.chroma .sr{color:#8bd5ca}.chroma .s1{color:#a6da95}.chroma .ss{color:#a6da95}.chroma .m{color:#f5a97f}.chroma .mb{color:#f5a97f}.chroma .mf{color:#f5a97f}.chroma .mh{color:#f5a97f}.chroma .mi{color:#f5a97f}.chroma .il{color:#f5a97f}.chroma .mo{color:#f5a97f}.chroma .o{color:#91d7e3;font-weight:700}.chroma .ow{color:#91d7e3;font-weight:700}.chroma .p{}.chroma .c{color:#6e738d;font-style:italic}.chroma .ch{color:#6e738d;font-style:italic}.chroma .cm{color:#6e738d;font-style:italic}.chroma .c1{color:#6e738d;font-style:italic}.chroma .cs{color:#6e738d;font-style:italic}.chroma .cp{color:#6e738d;font-style:italic}.chroma .cpf{color:#6e738d;font-weight:700;font-style:italic}.chroma .g{}.chroma .gd{color:#ed8796;background-color:#363a4f}.chroma .ge{font-style:italic}.chroma .gr{color:#ed8796}.chroma .gh{color:#f5a97f;font-weight:700}.chroma .gi{color:#a6da95;background-color:#363a4f}.chroma .go{}.chroma .gp{}.chroma .gs{font-weight:700}.chroma .gu{color:#f5a97f;font-weight:700}.chroma .gt{color:#ed8796}.chroma .gl{text-decoration:underline}.chroma .w{}
|
||||
@@ -0,0 +1 @@
|
||||
.bg{color:#cad3f5;background-color:#24273a}.chroma{color:#cad3f5;background-color:#24273a}.chroma .err{color:#ed8796}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#494d64}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#8087a2}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#8087a2}.chroma .line{display:flex}.chroma .k{color:#c6a0f6}.chroma .kc{color:#f5a97f}.chroma .kd{color:#ed8796}.chroma .kn{color:#8bd5ca}.chroma .kp{color:#c6a0f6}.chroma .kr{color:#c6a0f6}.chroma .kt{color:#ed8796}.chroma .na{color:#8aadf4}.chroma .nc{color:#eed49f}.chroma .no{color:#eed49f}.chroma .nd{color:#8aadf4;font-weight:700}.chroma .ni{color:#8bd5ca}.chroma .ne{color:#f5a97f}.chroma .nl{color:#91d7e3}.chroma .nn{color:#f5a97f}.chroma .py{color:#f5a97f}.chroma .nt{color:#c6a0f6}.chroma .nb{color:#91d7e3}.chroma .bp{color:#91d7e3}.chroma .nv{color:#f4dbd6}.chroma .vc{color:#f4dbd6}.chroma .vg{color:#f4dbd6}.chroma .vi{color:#f4dbd6}.chroma .vm{color:#f4dbd6}.chroma .nf{color:#8aadf4}.chroma .fm{color:#8aadf4}.chroma .s{color:#a6da95}.chroma .sa{color:#ed8796}.chroma .sb{color:#a6da95}.chroma .sc{color:#a6da95}.chroma .dl{color:#8aadf4}.chroma .sd{color:#6e738d}.chroma .s2{color:#a6da95}.chroma .se{color:#8aadf4}.chroma .sh{color:#6e738d}.chroma .si{color:#a6da95}.chroma .sx{color:#a6da95}.chroma .sr{color:#8bd5ca}.chroma .s1{color:#a6da95}.chroma .ss{color:#a6da95}.chroma .m{color:#f5a97f}.chroma .mb{color:#f5a97f}.chroma .mf{color:#f5a97f}.chroma .mh{color:#f5a97f}.chroma .mi{color:#f5a97f}.chroma .il{color:#f5a97f}.chroma .mo{color:#f5a97f}.chroma .o{color:#91d7e3;font-weight:700}.chroma .ow{color:#91d7e3;font-weight:700}.chroma .c{color:#6e738d;font-style:italic}.chroma .ch{color:#5b6078;font-style:italic}.chroma .cm{color:#6e738d;font-style:italic}.chroma .c1{color:#6e738d;font-style:italic}.chroma .cs{color:#6e738d;font-style:italic}.chroma .cp{color:#6e738d;font-style:italic}.chroma .cpf{color:#6e738d;font-weight:700;font-style:italic}.chroma .gd{color:#ed8796;background-color:#363a4f}.chroma .ge{font-style:italic}.chroma .gr{color:#ed8796}.chroma .gh{color:#f5a97f;font-weight:700}.chroma .gi{color:#a6da95;background-color:#363a4f}.chroma .gs{font-weight:700}.chroma .gu{color:#f5a97f;font-weight:700}.chroma .gt{color:#ed8796}.chroma .gl{text-decoration:underline}
|
||||
@@ -0,0 +1 @@
|
||||
.bg{color:#c6d0f5;background-color:#303446}.chroma{color:#c6d0f5;background-color:#303446}.chroma .x{}.chroma .err{color:#e78284}.chroma .cl{}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#51576d}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#838ba7}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#838ba7}.chroma .line{display:flex}.chroma .k{color:#ca9ee6}.chroma .kc{color:#ef9f76}.chroma .kd{color:#e78284}.chroma .kn{color:#81c8be}.chroma .kp{color:#ca9ee6}.chroma .kr{color:#ca9ee6}.chroma .kt{color:#e78284}.chroma .n{}.chroma .na{color:#8caaee}.chroma .nc{color:#e5c890}.chroma .no{color:#e5c890}.chroma .nd{color:#8caaee;font-weight:700}.chroma .ni{color:#81c8be}.chroma .ne{color:#ef9f76}.chroma .nl{color:#99d1db}.chroma .nn{color:#ef9f76}.chroma .nx{}.chroma .py{color:#ef9f76}.chroma .nt{color:#ca9ee6}.chroma .nb{color:#99d1db}.chroma .bp{color:#99d1db}.chroma .nv{color:#f2d5cf}.chroma .vc{color:#f2d5cf}.chroma .vg{color:#f2d5cf}.chroma .vi{color:#f2d5cf}.chroma .vm{color:#f2d5cf}.chroma .nf{color:#8caaee}.chroma .fm{color:#8caaee}.chroma .l{}.chroma .ld{}.chroma .s{color:#a6d189}.chroma .sa{color:#e78284}.chroma .sb{color:#a6d189}.chroma .sc{color:#a6d189}.chroma .dl{color:#8caaee}.chroma .sd{color:#737994}.chroma .s2{color:#a6d189}.chroma .se{color:#8caaee}.chroma .sh{color:#737994}.chroma .si{color:#a6d189}.chroma .sx{color:#a6d189}.chroma .sr{color:#81c8be}.chroma .s1{color:#a6d189}.chroma .ss{color:#a6d189}.chroma .m{color:#ef9f76}.chroma .mb{color:#ef9f76}.chroma .mf{color:#ef9f76}.chroma .mh{color:#ef9f76}.chroma .mi{color:#ef9f76}.chroma .il{color:#ef9f76}.chroma .mo{color:#ef9f76}.chroma .o{color:#99d1db;font-weight:700}.chroma .ow{color:#99d1db;font-weight:700}.chroma .p{}.chroma .c{color:#737994;font-style:italic}.chroma .ch{color:#737994;font-style:italic}.chroma .cm{color:#737994;font-style:italic}.chroma .c1{color:#737994;font-style:italic}.chroma .cs{color:#737994;font-style:italic}.chroma .cp{color:#737994;font-style:italic}.chroma .cpf{color:#737994;font-weight:700;font-style:italic}.chroma .g{}.chroma .gd{color:#e78284;background-color:#414559}.chroma .ge{font-style:italic}.chroma .gr{color:#e78284}.chroma .gh{color:#ef9f76;font-weight:700}.chroma .gi{color:#a6d189;background-color:#414559}.chroma .go{}.chroma .gp{}.chroma .gs{font-weight:700}.chroma .gu{color:#ef9f76;font-weight:700}.chroma .gt{color:#e78284}.chroma .gl{text-decoration:underline}.chroma .w{}
|
||||
@@ -0,0 +1 @@
|
||||
.bg{color:#c6d0f5;background-color:#303446}.chroma{color:#c6d0f5;background-color:#303446}.chroma .err{color:#e78284}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#51576d}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#838ba7}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#838ba7}.chroma .line{display:flex}.chroma .k{color:#ca9ee6}.chroma .kc{color:#ef9f76}.chroma .kd{color:#e78284}.chroma .kn{color:#81c8be}.chroma .kp{color:#ca9ee6}.chroma .kr{color:#ca9ee6}.chroma .kt{color:#e78284}.chroma .na{color:#8caaee}.chroma .nc{color:#e5c890}.chroma .no{color:#e5c890}.chroma .nd{color:#8caaee;font-weight:700}.chroma .ni{color:#81c8be}.chroma .ne{color:#ef9f76}.chroma .nl{color:#99d1db}.chroma .nn{color:#ef9f76}.chroma .py{color:#ef9f76}.chroma .nt{color:#ca9ee6}.chroma .nb{color:#99d1db}.chroma .bp{color:#99d1db}.chroma .nv{color:#f2d5cf}.chroma .vc{color:#f2d5cf}.chroma .vg{color:#f2d5cf}.chroma .vi{color:#f2d5cf}.chroma .vm{color:#f2d5cf}.chroma .nf{color:#8caaee}.chroma .fm{color:#8caaee}.chroma .s{color:#a6d189}.chroma .sa{color:#e78284}.chroma .sb{color:#a6d189}.chroma .sc{color:#a6d189}.chroma .dl{color:#8caaee}.chroma .sd{color:#737994}.chroma .s2{color:#a6d189}.chroma .se{color:#8caaee}.chroma .sh{color:#737994}.chroma .si{color:#a6d189}.chroma .sx{color:#a6d189}.chroma .sr{color:#81c8be}.chroma .s1{color:#a6d189}.chroma .ss{color:#a6d189}.chroma .m{color:#ef9f76}.chroma .mb{color:#ef9f76}.chroma .mf{color:#ef9f76}.chroma .mh{color:#ef9f76}.chroma .mi{color:#ef9f76}.chroma .il{color:#ef9f76}.chroma .mo{color:#ef9f76}.chroma .o{color:#99d1db;font-weight:700}.chroma .ow{color:#99d1db;font-weight:700}.chroma .c{color:#737994;font-style:italic}.chroma .ch{color:#626880;font-style:italic}.chroma .cm{color:#737994;font-style:italic}.chroma .c1{color:#737994;font-style:italic}.chroma .cs{color:#737994;font-style:italic}.chroma .cp{color:#737994;font-style:italic}.chroma .cpf{color:#737994;font-weight:700;font-style:italic}.chroma .gd{color:#e78284;background-color:#414559}.chroma .ge{font-style:italic}.chroma .gr{color:#e78284}.chroma .gh{color:#ef9f76;font-weight:700}.chroma .gi{color:#a6d189;background-color:#414559}.chroma .gs{font-weight:700}.chroma .gu{color:#ef9f76;font-weight:700}.chroma .gt{color:#e78284}.chroma .gl{text-decoration:underline}
|
||||
@@ -0,0 +1 @@
|
||||
.bg{color:#c6d0f5;background-color:#303446}.chroma{color:#c6d0f5;background-color:#303446}.chroma .err{color:#e78284}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#51576d}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#838ba7}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#838ba7}.chroma .line{display:flex}.chroma .k{color:#ca9ee6}.chroma .kc{color:#ef9f76}.chroma .kd{color:#e78284}.chroma .kn{color:#81c8be}.chroma .kp{color:#ca9ee6}.chroma .kr{color:#ca9ee6}.chroma .kt{color:#e78284}.chroma .na{color:#8caaee}.chroma .nc{color:#e5c890}.chroma .no{color:#e5c890}.chroma .nd{color:#8caaee;font-weight:700}.chroma .ni{color:#81c8be}.chroma .ne{color:#ef9f76}.chroma .nl{color:#99d1db}.chroma .nn{color:#ef9f76}.chroma .py{color:#ef9f76}.chroma .nt{color:#ca9ee6}.chroma .nb{color:#99d1db}.chroma .bp{color:#99d1db}.chroma .nv{color:#f2d5cf}.chroma .vc{color:#f2d5cf}.chroma .vg{color:#f2d5cf}.chroma .vi{color:#f2d5cf}.chroma .vm{color:#f2d5cf}.chroma .nf{color:#8caaee}.chroma .fm{color:#8caaee}.chroma .s{color:#a6d189}.chroma .sa{color:#e78284}.chroma .sb{color:#a6d189}.chroma .sc{color:#a6d189}.chroma .dl{color:#8caaee}.chroma .sd{color:#737994}.chroma .s2{color:#a6d189}.chroma .se{color:#8caaee}.chroma .sh{color:#737994}.chroma .si{color:#a6d189}.chroma .sx{color:#a6d189}.chroma .sr{color:#81c8be}.chroma .s1{color:#a6d189}.chroma .ss{color:#a6d189}.chroma .m{color:#ef9f76}.chroma .mb{color:#ef9f76}.chroma .mf{color:#ef9f76}.chroma .mh{color:#ef9f76}.chroma .mi{color:#ef9f76}.chroma .il{color:#ef9f76}.chroma .mo{color:#ef9f76}.chroma .o{color:#99d1db;font-weight:700}.chroma .ow{color:#99d1db;font-weight:700}.chroma .c{color:#737994;font-style:italic}.chroma .ch{color:#737994;font-style:italic}.chroma .cm{color:#737994;font-style:italic}.chroma .c1{color:#737994;font-style:italic}.chroma .cs{color:#737994;font-style:italic}.chroma .cp{color:#737994;font-style:italic}.chroma .cpf{color:#737994;font-weight:700;font-style:italic}.chroma .gd{color:#e78284;background-color:#414559}.chroma .ge{font-style:italic}.chroma .gr{color:#e78284}.chroma .gh{color:#ef9f76;font-weight:700}.chroma .gi{color:#a6d189;background-color:#414559}.chroma .gs{font-weight:700}.chroma .gu{color:#ef9f76;font-weight:700}.chroma .gt{color:#e78284}.chroma .gl{text-decoration:underline}
|
||||
@@ -0,0 +1,18 @@
|
||||
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:root{--bg-deep:#020617;--accent-primary:#b063e0;--accent-mid-purple:#c485f6;--accent-light-purple:#dbabff;--accent-secondary:#00ffff;--glass-surface:rgba(255, 255, 255, 0.05);--glass-border:rgba(255, 255, 255, 0.1);--glass-block:rgb(255, 255, 255);--bg-primary:var(--bg-deep);--bg-secondary:var(--glass-surface);--bg-tertiary:rgba(255, 255, 255, 0.08);--text-primary:#f1f5f9;--text-secondary:#cbd5e1;--text-muted:#94a3b8;--accent-hover:#c485f6;--border-color:var(--glass-border);--accent-primary-rgba-03:rgba(176, 99, 224, 0.3);--accent-primary-rgba-05:rgba(176, 99, 224, 0.5);--accent-light-purple-rgba-01:rgba(219, 171, 255, 0.1);--accent-light-purple-rgba-03:rgba(219, 171, 255, 0.3);--accent-mid-purple-rgba-05:rgba(196, 133, 246, 0.05);--accent-mid-purple-rgba-01:rgba(196, 133, 246, 0.1);--accent-mid-purple-rgba-02:rgba(196, 133, 246, 0.2);--tag-bg:rgba(0, 0, 0, 0.4);--tag-color:var(--accent-light-purple);--shadow-sm:0 1px 2px 0 rgba(0, 0, 0, 0.3);--shadow-md:0 4px 6px -1px rgba(0, 0, 0, 0.4);--shadow-lg:0 10px 15px -3px rgba(0, 0, 0, 0.5);--yellow-accent:#ffdd00;--yellow-hover:#ffc700;--spacing-xs:0.25rem;--spacing-sm:0.5rem;--spacing-md:1rem;--spacing-lg:1.5rem;--spacing-xl:2rem;--spacing-2xl:3rem;--font-heading:"Space Grotesk", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-body:"Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
||||
"Helvetica Neue", Arial, sans-serif;--font-logo:"Outfit", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-sans:var(--font-body);--font-mono:"JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
|
||||
"Liberation Mono", "Courier New", monospace;--transition-fast:150ms ease-in-out;--transition-base:300ms ease-in-out;--transition-slow:500ms ease-in-out;--icon-sm:1rem;--icon-md:1.25rem;--icon-lg:1.5rem}[data-theme=light]{--bg-primary:#ffffff;--glass-surface:rgba(
|
||||
255,
|
||||
255,
|
||||
255,
|
||||
0.2
|
||||
);--glass-border:rgba(
|
||||
196,
|
||||
181,
|
||||
253,
|
||||
0.5
|
||||
);--glass-block:rgba(255, 255, 255, 0.8);--bg-secondary:var(--glass-surface);--bg-tertiary:rgba(
|
||||
255,
|
||||
255,
|
||||
255,
|
||||
0.25
|
||||
);--text-primary:#0f172a;--text-secondary:#475569;--text-muted:#64748b;--accent-primary:#6b21a8;--accent-mid-purple:#7c3aed;--accent-light-purple:#9333ea;--accent-secondary:#7e22ce;--accent-hover:#7c3aed;--border-color:var(--glass-border);--accent-primary-rgba-03:rgba(107, 33, 168, 0.3);--accent-primary-rgba-05:rgba(107, 33, 168, 0.5);--accent-light-purple-rgba-01:rgba(147, 51, 234, 0.1);--accent-light-purple-rgba-03:rgba(147, 51, 234, 0.3);--accent-mid-purple-rgba-05:rgba(124, 58, 237, 0.05);--accent-mid-purple-rgba-01:rgba(124, 58, 237, 0.1);--accent-mid-purple-rgba-02:rgba(124, 58, 237, 0.2);--tag-bg:rgba(124, 58, 237, 0.1);--tag-color:#6b21a8;--shadow-sm:0 1px 2px 0 rgba(0, 0, 0, 0.05);--shadow-md:0 4px 6px -1px rgba(0, 0, 0, 0.1);--shadow-lg:0 10px 15px -3px rgba(0, 0, 0, 0.1)}body{font-family:var(--font-body);background-color:var(--bg-deep);color:var(--text-primary);line-height:1.6;min-height:100vh;transition:background-color var(--transition-base),color var(--transition-base);background-image:radial-gradient( circle at center,rgba(30,58,138,.3) 0%,rgba(15,23,42,.5) 40%,var(--bg-deep) 100% );background-attachment:fixed;background-size:100% 100%;background-position:50%;position:relative}[data-theme=light]{--bg-deep:#ffffff}[data-theme=light] body{background-color:#fff;background-image:radial-gradient( circle at center,rgba(196,133,246,.2) 0%,rgba(243,232,255,.4) 40%,#ffffff 100% );background-attachment:fixed;background-size:100% 100%;background-position:50%}body::before{content:"";position:fixed;top:0;left:0;width:100%;height:100%;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 400 400' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");background-size:400px 400px;background-repeat:repeat;opacity:.05;pointer-events:none;z-index:0}body>*{position:relative;z-index:1}
|
||||
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 307 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 66 KiB |
@@ -0,0 +1 @@
|
||||
[{"content":"How I Solved the Distrobox Confusion in My Terminal Recently, I found myself struggling with something that seemed like a simple problem: when I was working with multiple terminal windows, I could never remember which one was inside a Distrobox and which one was on my local system. If you\u0026amp;rsquo;ve ever juggled between different environments, you know exactly how annoying this can get.\nSo, I decided to create a quick plugin for my favorite terminal prompt, Spaceship, that would clearly indicate …","date":"2026-01-04","permalink":"/posts/spaceship-distrobox/","summary":"How I Solved the Distrobox Confusion in My Terminal Recently, I found myself struggling with something that seemed like a simple problem: when I was working with multiple terminal windows, I could …","tags":null,"title":"Spaceship Distrobox"},{"content":"Understanding the Google Groups Spam Problem Over the past year, I\u0026amp;rsquo;ve noticed a significant increase in spam messages originating from Google Groups. This issue stems from the way Google Groups is designed: It gives spammers an easy way to distribute large volumes of unwanted mail using legitimate Google mail servers, which makes filtering much harder.\nWhy it Happens There are a few fundamental problems with how Google Groups works that make it particularly attractive to spammers:\nNo …","date":"2025-10-10","permalink":"/posts/google-groups-spam/","summary":"Understanding the Google Groups Spam Problem Over the past year, I\u0026rsquo;ve noticed a significant increase in spam messages originating from Google Groups. This issue stems from the way Google Groups …","tags":null,"title":"Google Groups Spam"},{"content":"Recently, I had to deal with a serious problem: backscatter.\nOne of our mail gateways ended up listed on the backscatter.org blacklist for sending bounce messages to forged senders.\nAfter checking the logs, I quickly realized that our system wasn\u0026amp;rsquo;t actually protected against backscatter attacks, so I had to do something about it.\nWhat Even Is Backscatter? Backscatter is unwanted email that your mail server sends after receiving a message, usually in the form of a non-delivery report (NDR) …","date":"2025-08-01","permalink":"/posts/blocking-invalid-rcpt-postfix/","summary":"Recently, I had to deal with a serious problem: backscatter.\nOne of our mail gateways ended up listed on the backscatter.org blacklist for sending bounce messages to forged senders.\nAfter checking the …","tags":null,"title":"Blocking Invalid Recipients Before They Reach Your Exchange Server"},{"content":"Understanding dovecot.index.cache I recently migrated an old mail server system into its new home. After the migration, I checked the logs and noticed some warnings that looked like this:\nMay 17 11:23:13 server1 dovecot: dsync-local(user@domain.tld)\u0026amp;lt;cRjZCwGnKWiIvicA2dm5Tw\u0026amp;gt;: Error: Mailbox INBOX: mmap(size=511310568) failed with file /var/vmail/domain.tld/user/Maildir/dovecot.index.cache: Cannot allocate memory The error indicates that the dovecot.index.cache file is too big to process, and …","date":"2025-05-18","permalink":"/posts/dovecot-index-cache-issues/","summary":"Understanding dovecot.index.cache I recently migrated an old mail server system into its new home. After the migration, I checked the logs and noticed some warnings that looked like this:\nMay 17 …","tags":null,"title":"Dovecot Index Cache Issues"},{"content":"Welcome to My Blog! I’m Demian, a Sysadmin, Email Infrastructure enthusiast, and a passionate Open Source contributor. This is where I’ll be sharing what I know about system administration, managing email infrastructure, and contributing to open source projects.\nWhat to Expect On this blog, I’ll be writing about:\nSysadmin tips and tools: Everything I’ve learned managing servers, networks, and infrastructure. Email Infrastructure: Best practices for setting up, securing, and managing email …","date":"2025-05-11","permalink":"/posts/my-first-post/","summary":"Welcome to My Blog! I’m Demian, a Sysadmin, Email Infrastructure enthusiast, and a passionate Open Source contributor. This is where I’ll be sharing what I know about system administration, managing …","tags":null,"title":"Introduction"}]
|
||||
@@ -1,35 +1,54 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<channel>
|
||||
<title>PyteDev Blog</title>
|
||||
<title>Demian's Blog</title>
|
||||
<link>https://pyte.dev/</link>
|
||||
<description>Recent content on PyteDev Blog</description>
|
||||
<generator>Hugo -- 0.147.2</generator>
|
||||
<description>Recent content on Demian's Blog</description>
|
||||
<generator>Hugo</generator>
|
||||
<language>en-us</language>
|
||||
<lastBuildDate>Sun, 11 May 2025 20:13:49 +0200</lastBuildDate>
|
||||
<lastBuildDate>Sun, 04 Jan 2026 20:33:45 +0100</lastBuildDate>
|
||||
<atom:link href="https://pyte.dev/index.xml" rel="self" type="application/rss+xml" />
|
||||
<item>
|
||||
<title>Spaceship Distrobox</title>
|
||||
<link>https://pyte.dev/posts/spaceship-distrobox/</link>
|
||||
<pubDate>Sun, 04 Jan 2026 20:33:45 +0100</pubDate>
|
||||
<guid>https://pyte.dev/posts/spaceship-distrobox/</guid>
|
||||
<description><h1 id="how-i-solved-the-distrobox-confusion-in-my-terminal">How I Solved the Distrobox Confusion in My Terminal</h1>
<p>Recently, I found myself struggling with something that seemed like a simple problem: when I was working with multiple terminal windows, I could never remember which one was inside a Distrobox and which one was on my local system. If you&rsquo;ve ever juggled between different environments, you know exactly how annoying this can get.</p>
<p>So, I decided to create a quick plugin for my favorite terminal prompt, <strong>Spaceship</strong>, that would clearly indicate when I&rsquo;m inside a Distrobox container. The result is a simple, customizable section that appears right in your prompt, showing the name of the active container. This way, I never have to guess or dig deeper to figure out where I&rsquo;m working.</p></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Google Groups Spam</title>
|
||||
<link>https://pyte.dev/posts/google-groups-spam/</link>
|
||||
<pubDate>Fri, 10 Oct 2025 09:26:56 +0200</pubDate>
|
||||
<guid>https://pyte.dev/posts/google-groups-spam/</guid>
|
||||
<description><h1 id="understanding-the-google-groups-spam-problem">Understanding the Google Groups Spam Problem</h1>
<p>Over the past year, I&rsquo;ve noticed a significant increase in spam messages originating from Google Groups. This issue stems from the way Google Groups is designed: It gives spammers an easy way to distribute large volumes of unwanted mail using legitimate Google mail servers, which makes filtering much harder.</p>
<h2 id="why-it-happens">Why it Happens</h2>
<p>There are a few fundamental problems with how Google Groups works that make it particularly attractive to spammers:</p></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Blocking Invalid Recipients Before They Reach Your Exchange Server</title>
|
||||
<link>https://pyte.dev/posts/blocking-invalid-rcpt-postfix/</link>
|
||||
<pubDate>Fri, 01 Aug 2025 10:03:15 +0200</pubDate>
|
||||
<guid>https://pyte.dev/posts/blocking-invalid-rcpt-postfix/</guid>
|
||||
<description><p>Recently, I had to deal with a serious problem: <strong>backscatter</strong>.<br>
One of our mail gateways ended up listed on the <strong>backscatter.org</strong> blacklist for sending bounce messages to forged senders.</p>
<p>After checking the logs, I quickly realized that our system wasn&rsquo;t actually protected against backscatter attacks, so I had to do something about it.</p>
<h2 id="what-even-is-backscatter">What Even Is Backscatter?</h2>
<p>Backscatter is unwanted email that your mail server sends <strong>after</strong> receiving a message, usually in the form of a <strong>non-delivery report (NDR)</strong> or <strong>bounce</strong> to a <strong>forged sender address</strong>.</p></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Dovecot Index Cache Issues</title>
|
||||
<link>https://pyte.dev/posts/dovecot-index-cache-issues/</link>
|
||||
<pubDate>Sun, 18 May 2025 11:34:09 +0200</pubDate>
|
||||
<guid>https://pyte.dev/posts/dovecot-index-cache-issues/</guid>
|
||||
<description><h1 id="understanding-dovecotindexcache">Understanding <code>dovecot.index.cache</code></h1>
<p>I recently migrated an old mail server system into its new home. After the migration, I checked the logs and noticed some warnings that looked like this:</p>
<pre tabindex="0"><code>May 17 11:23:13 server1 dovecot: dsync-local(user@domain.tld)&lt;cRjZCwGnKWiIvicA2dm5Tw&gt;: Error: Mailbox INBOX: mmap(size=511310568) failed with file /var/vmail/domain.tld/user/Maildir/dovecot.index.cache: Cannot allocate memory
</code></pre><p>The error indicates that the <code>dovecot.index.cache</code> file is too big to process, and Dovecot cannot allocate enough memory to handle it.</p>
<h1 id="what-are-dovecotindexcache-files">What Are <code>dovecot.index.cache</code> Files?</h1>
<p>Dovecot, the most popular IMAP server, uses a set of index files (<code>dovecot.index</code>, <code>dovecot.index.cache</code>, <code>dovecot.index.log</code>, etc.) to speed up mailbox access. The file I had to deal with stores cached message metadata (headers, flags, and preview text) so Dovecot does not have to read each message file in the mailbox every time.</p></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Introduction</title>
|
||||
<link>https://pyte.dev/posts/my-first-post/</link>
|
||||
<pubDate>Sun, 11 May 2025 20:13:49 +0200</pubDate>
|
||||
<guid>https://pyte.dev/posts/my-first-post/</guid>
|
||||
<description><h1 id="welcome-to-my-blog">Welcome to My Blog!</h1>
|
||||
<p>I’m <strong>Demian</strong>, a <strong>Sysadmin</strong>, <strong>Email Infrastructure enthusiast</strong>, and a passionate <strong>Open Source contributor</strong>. This is where I’ll be sharing what I know about system administration, managing email infrastructure, and contributing to open source projects.</p>
|
||||
<h2 id="what-to-expect">What to Expect</h2>
|
||||
<p>On this blog, I’ll be writing about:</p>
|
||||
<ul>
|
||||
<li><strong>Sysadmin tips and tools</strong>: Everything I’ve learned managing servers, networks, and infrastructure.</li>
|
||||
<li><strong>Email Infrastructure</strong>: Best practices for setting up, securing, and managing email systems.</li>
|
||||
<li><strong>Open Source</strong>: How I contribute to open source projects, and tips for getting started if you want to do the same.</li>
|
||||
</ul>
|
||||
<p>This blog is a space to share knowledge, troubleshoot common issues, and explore new tools and techniques. Whether you’re just getting into system administration, looking for email setup guides, or interested in contributing to open source, you’ll find something useful here.</p></description>
|
||||
<description><h1 id="welcome-to-my-blog">Welcome to My Blog!</h1>
<p>I’m <strong>Demian</strong>, a <strong>Sysadmin</strong>, <strong>Email Infrastructure enthusiast</strong>, and a passionate <strong>Open Source contributor</strong>. This is where I’ll be sharing what I know about system administration, managing email infrastructure, and contributing to open source projects.</p>
<h2 id="what-to-expect">What to Expect</h2>
<p>On this blog, I’ll be writing about:</p>
<ul>
<li><strong>Sysadmin tips and tools</strong>: Everything I’ve learned managing servers, networks, and infrastructure.</li>
<li><strong>Email Infrastructure</strong>: Best practices for setting up, securing, and managing email systems.</li>
<li><strong>Open Source</strong>: How I contribute to open source projects, and tips for getting started if you want to do the same.</li>
</ul>
<p>This blog is a space to share knowledge, troubleshoot common issues, and explore new tools and techniques. Whether you’re just getting into system administration, looking for email setup guides, or interested in contributing to open source, you’ll find something useful here.</p></description>
|
||||
</item>
|
||||
<item>
|
||||
<title>Search</title>
|
||||
<link>https://pyte.dev/search/</link>
|
||||
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
|
||||
<guid>https://pyte.dev/search/</guid>
|
||||
<description>Search for a specific post or topic</description>
|
||||
<description><link href="https://pyte.dev/pagefind/pagefind-ui.css" rel="stylesheet">
<script src="https://pyte.dev/pagefind/pagefind-ui.js"></script>
<div id="search"></div>
<script>
	window.addEventListener('DOMContentLoaded', (event) => {
	 new PagefindUI({ element: "#search", showSubResults: true });
	});
</script></description>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
|
||||