Files
Website/posts/wilkommen/index.html
T
2026-09-14 19:22:03 +02:00

470 lines
13 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="de" dir="ltr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<link rel="icon" type="image/png" href="/avatar.png">
<title></title>
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<link rel="stylesheet" type='text/css' href="https://cdn.jsdelivr.net/gh/devicons/devicon@latest/devicon.min.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/7.0.1/css/all.min.css"
integrity="sha512-2SwdPD6INVrV/lHTZbO2nodKhrnDdJK9/kg2XD1r9uGqPo1cUbujc+IYdlYdEErWNu69gVcYgdxlmVmzTWnetw=="
crossorigin="anonymous" referrerpolicy="no-referrer" />
<style>
@import url('https://fonts.googleapis.com/css2?family=Ubuntu+Sans+Mono:ital,wght@0,400..700;1,400..700&display=swap');
.font-jersey {
font-family: "Ubuntu Sans Mono", monospace;
font-optical-sizing: auto;
font-style: normal;
}
.md-content .katex-display {
max-width: 100%;
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
padding-left: 0.25rem;
padding-right: 0.25rem;
}
.md-content .katex-display>.katex {
display: inline-block;
max-width: 100%;
}
.swup-transition-fade {
opacity: 1;
transition: 300ms ease-in-out;
}
.is-animating .swup-transition-fade {
opacity: 0;
}
.swup-transition-fade {
opacity: 1;
transition: opacity 300ms ease-in-out;
}
html.is-animating .swup-transition-fade {
opacity: 0;
}
html.is-animating {
cursor: progress;
}
html.is-leaving .swup-transition-fade {
opacity: 0;
}
</style>
<script src="https://unpkg.com/swup@4"></script>
<script src="https://unpkg.com/@swup/preload-plugin@3"></script>
<script src="https://unpkg.com/@swup/progress-plugin@3"></script>
<script>
const swup = new Swup({
containers: ['#swup'],
animationSelector: '[class*="swup-transition-"]',
cache: true,
preload: true,
animateHistoryBrowsing: true,
plugins: [
new SwupPreloadPlugin(),
new SwupProgressPlugin()
]
})
window.swup = swup
</script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css" crossorigin="anonymous">
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.js" crossorigin="anonymous"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/contrib/auto-render.min.js"
crossorigin="anonymous"></script>
<script>
const KATEX_CONFIG = {
delimiters: [
{left: "$$", right: "$$", display: true},
{left: "$", right: "$", display: false},
{left: "\\[", right: "\\]", display: true},
{left: "\\(", right: "\\)", display: false}
],
ignoredTags: ["script", "noscript", "style", "textarea", "pre", "code"],
throwOnError: false
};
function renderKatex() {
if (typeof renderMathInElement !== "function") {
console.log("⏳ Waiting for KaTeX to load...");
return;
}
const contentArea = document.getElementById('swup') || document.body;
try {
renderMathInElement(contentArea, KATEX_CONFIG);
console.log("✅ KaTeX rendered successfully");
} catch (error) {
console.error("❌ KaTeX rendering error:", error);
}
}
function renderKatexWithRetry(maxRetries = 10, delay = 100) {
let attempts = 0;
const attempt = () => {
if (typeof renderMathInElement === "function") {
renderKatex();
} else if (attempts < maxRetries) {
attempts++;
setTimeout(attempt, delay);
} else {
console.warn("⚠️ KaTeX auto-render not available after", maxRetries, "attempts");
}
};
attempt();
}
function setupSwupIntegration() {
if (window.swup) {
window.swup.hooks.on('page:view', () => {
console.log("🔄 Swup transition complete, re-rendering KaTeX...");
setTimeout(() => renderKatexWithRetry(3, 50), 50);
});
console.log("✅ KaTeX-Swup integration ready");
} else {
setTimeout(setupSwupIntegration, 100);
}
}
document.addEventListener("DOMContentLoaded", function () {
console.log("🚀 Initializing KaTeX...");
renderKatexWithRetry();
setupSwupIntegration();
});
window.renderKatex = renderKatex;
</script>
<script type="module">
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@11/dist/mermaid.esm.min.mjs';
let initialized = false;
function renderMermaid() {
const contentArea = document.getElementById('swup') || document.body;
const mermaidBlocks = contentArea.querySelectorAll('.language-mermaid, .mermaid');
if (mermaidBlocks.length === 0) {
console.log("ℹ️ No mermaid blocks found on this page");
return;
}
if (!initialized) {
mermaid.initialize({startOnLoad: false, theme: 'dark'});
initialized = true;
}
mermaidBlocks.forEach(el => {
if (el.dataset.processed === 'true') {
const source = el.dataset.mermaidSource;
if (source) {
el.innerHTML = source;
el.removeAttribute('data-processed');
}
} else {
el.dataset.mermaidSource = el.textContent;
}
});
mermaid.run({nodes: mermaidBlocks})
.then(() => console.log("✅ Mermaid rendered successfully"))
.catch(err => console.error("❌ Mermaid rendering error:", err));
}
function renderMermaidWithRetry(maxRetries = 10, delay = 100) {
let attempts = 0;
const attempt = () => {
if (typeof mermaid.initialize === "function") {
renderMermaid();
} else if (attempts < maxRetries) {
attempts++;
setTimeout(attempt, delay);
} else {
console.warn("⚠️ Mermaid auto-render not available after", maxRetries, "attempts");
}
};
attempt();
}
function setupSwupIntegration() {
if (window.swup) {
window.swup.hooks.on('page:view', () => {
console.log("🔄 Swup transition complete, re-rendering mermaid...");
setTimeout(() => renderMermaidWithRetry(3, 50), 50);
});
console.log("✅ Mermaid-Swup integration ready");
} else {
setTimeout(setupSwupIntegration, 100);
}
}
document.addEventListener("DOMContentLoaded", function () {
console.log("🚀 Initializing KaTeX...");
renderMermaidWithRetry();
setupSwupIntegration();
});
</script>
</head>
<body class="min-h-screen flex flex-col bg-black font-jersey text-white text-3xl">
<header>
<div class="sticky absolute top-0 z-50">
<nav class="w-full border-b border-gray-800 bg-[#070709]/95 backdrop-blur-sm text-gray-100">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="flex items-center justify-between h-16">
<div class="flex items-center gap-3">
<a href='https://thereisno.space/' class="flex items-center gap-3 group" aria-label="Homepage">
<img src='/avatar.jpg' alt="ThereIsNo.Space"
class="w-10 h-10 rounded-sm border-2 border-gray-700 object-cover transition-transform duration-300 transform group-hover:scale-105"
style="animation: border-breathe 4s ease-in-out infinite;" />
<span class="text-white text-lg sm:text-xl md:text-2xl lg:text-3xl font-semibold tracking-wide">
ThereIsNo.Space
<span class="inline-block ml-2" style="animation: flicker 1.6s steps(2, end) infinite;">_</span>
</span>
</a>
</div>
<div class="flex items-center gap-4">
<div class="hidden md:flex items-center">
<nav aria-label="Primary" class="w-full">
<ul
class="flex flex-col md:flex-row md:items-center md:space-x-6 space-y-2 md:space-y-0 sm:text-lg md:text-xl lg:text-3xl"><li>
<a href="/about/"class="group inline-flex items-center px-3 py-2 rounded-sm text-gray-200 hover:text-white transition-colors duration-200">
<span class="relative inline-block">
<span>Über uns</span>
<span
class="absolute left-0 -bottom-1 h-[2px] w-0 bg-indigo-400 transition-all duration-300 group-hover:w-full"></span>
</span>
</a>
</li><li>
<a aria-current="true" href="/posts/"class="group inline-flex items-center px-3 py-2 rounded-sm text-gray-200 hover:text-white transition-colors duration-200">
<span class="relative inline-block">
<span>Posts</span>
<span
class="absolute left-0 -bottom-1 h-[2px] w-0 bg-indigo-400 transition-all duration-300 group-hover:w-full"></span>
</span>
</a>
</li>
</ul>
</nav>
</div>
<div class="md:hidden">
<button id="nav-toggle" aria-controls="mobile-menu" aria-expanded="false"
class="inline-flex items-center justify-center p-2 rounded-md focus:outline-none focus:ring-2 focus:ring-indigo-400"
aria-label="Open menu">
<svg class="h-6 w-6 text-gray-200" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
stroke="currentColor" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
</svg>
</button>
</div>
</div>
</div>
<div id="mobile-menu" class="md:hidden hidden pb-4">
<nav aria-label="Primary" class="w-full">
<ul
class="flex flex-col md:flex-row md:items-center md:space-x-6 space-y-2 md:space-y-0 sm:text-lg md:text-xl lg:text-3xl"><li>
<a href="/about/"class="group inline-flex items-center px-3 py-2 rounded-sm text-gray-200 hover:text-white transition-colors duration-200">
<span class="relative inline-block">
<span>Über uns</span>
<span
class="absolute left-0 -bottom-1 h-[2px] w-0 bg-indigo-400 transition-all duration-300 group-hover:w-full"></span>
</span>
</a>
</li><li>
<a aria-current="true" href="/posts/"class="group inline-flex items-center px-3 py-2 rounded-sm text-gray-200 hover:text-white transition-colors duration-200">
<span class="relative inline-block">
<span>Posts</span>
<span
class="absolute left-0 -bottom-1 h-[2px] w-0 bg-indigo-400 transition-all duration-300 group-hover:w-full"></span>
</span>
</a>
</li>
</ul>
</nav>
</div>
</div>
</nav>
<style>
@keyframes flicker {
0% {
opacity: 1;
transform: translateY(0);
}
10% {
opacity: 0.2;
transform: translateY(-1px);
}
20% {
opacity: 1;
transform: translateY(0);
}
100% {
opacity: 1;
}
}
@keyframes border-breathe {
0% {
box-shadow: 0 0 0 0 rgba(99, 102, 241, 0.06);
}
50% {
box-shadow: 0 0 18px 6px rgba(99, 102, 241, 0.03);
}
100% {
box-shadow: 0 0 0 0 rgba(99, 102, 241, 0.06);
}
}
</style>
<script>
(function () {
const btn = document.getElementById('nav-toggle');
const menu = document.getElementById('mobile-menu');
if (!btn || !menu) return;
btn.addEventListener('click', () => {
const open = menu.classList.toggle('hidden') === false;
btn.setAttribute('aria-expanded', open ? 'true' : 'false');
});
})();
</script>
</div>
</header>
<main class="flex-1 w-full">
<div id="swup" class="swup-transition-fade">
<div class="max-w-3xl lg:max-w-6xl xl:max-w-7xl mx-auto px-5 sm:px-8 lg:px-10 py-10 lg:py-16">
<h1></h1>
<time datetime="0001-01-01T00:00:00&#43;00:00">1. Januar 1</time>
<p>title: &ldquo;Willkommen im ThereIsNo.Space&rdquo;
date: 2026-09-14
draft: false
description: &ldquo;Der erste Post unseres Hackerspace-Blogs.&rdquo;
tags: [&ldquo;hackerspace&rdquo;, &ldquo;makerspace&rdquo;]</p>
<p>#Dies ist der erste Beitrag auf unserer neuen Seite.</p>
<p><strong>echo &ldquo;Hello, World!&rdquo; &gt; /dev/thereisno.space</strong>
Hier wird künftig über Projekte, Workshops und Events berichtet.
<strong>Stay tuned!</strong></p>
</div>
</div>
</main>
<footer>
<div class="border-t border-gray-800 bg-[#070709] text-gray-400">
<div class="max-w-6xl mx-auto px-4 sm:px-6">
<div class="flex flex-col md:flex-row items-center justify-between py-6 space-y-4 md:space-y-0">
<div class="text-sm sm:text-base md:text-lg">
<span class="relative inline-block">
© 2026 ThereIsNo.Space. All rights reserved. <br>
Made with <a href="https://gohugo.io" target="_blank">Hugo</a> | <a
href="https://github.com/Enerhim/enervoid-theme" target="_blank">Enervoid</a>
</span>
</div>
<div class="flex items-center space-x-6 text-sm sm:text-base md:text-lg">
</div>
</div>
</div>
</div>
</footer>
</body>
</html>