From bb3ce30b1af823b28fb91c0fb849aef4e7711a09 Mon Sep 17 00:00:00 2001 From: jonnybravo Date: Thu, 10 Sep 2026 09:37:39 +0200 Subject: [PATCH] Molecule 7/7: ansible_remote_tmp fix --- .gitignore | 8 ++ ansible/molecule/default/verify.yml | 2 + ansible/tasks.yml | 7 ++ site/assets/css/main.css | 109 ++++++++++++++++++ site/assets/js/search.js | 103 +++++++++++++++++ site/entrypoint.sh | 54 ++++++++- site/layouts/_default/baseof.html | 2 +- site/layouts/partials/head.html | 5 + site/layouts/partials/header.html | 13 ++- .../astro-vim-recommendations/index.html | 19 ++- .../public/awx_und_rundeck_install/index.html | 19 ++- .../public/blueray_install_manjaro/index.html | 19 ++- site/public/calcurse_tastenkürzel/index.html | 19 ++- site/public/css/main.min.css | 2 +- site/public/index.html | 19 ++- site/public/index.xml | 2 +- site/public/install_browser/index.html | 19 ++- ...884718dc463b495c2a72c24a6d6f48e64000709.js | 1 + site/public/lazygit/index.html | 19 ++- site/public/networkconfig_dns/index.html | 19 ++- site/public/stretchen_laufen/index.html | 19 ++- site/public/string_prefixes/index.html | 19 ++- site/public/system-optimierung/index.html | 19 ++- site/public/tags/index.html | 19 ++- site/public/tags/index.xml | 2 +- site/public/tinydb_vs_sqlite/index.html | 19 ++- site/public/ver_next_einbinden/index.html | 19 ++- site/public/willkommen/index.html | 19 ++- site/public/yubikey_setup_guide/index.html | 19 ++- 29 files changed, 591 insertions(+), 23 deletions(-) create mode 100644 .gitignore create mode 100644 site/assets/js/search.js create mode 100644 site/public/js/search.min.868f9708373e89ca72730cc71884718dc463b495c2a72c24a6d6f48e64000709.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..06cb502 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +# Pagefind: heruntergeladenes Binary (wird vom Entrypoint installiert) +site/.pagefind/ + +# Pagefind: generierter Suchindex (wird beim Container-Start neu erzeugt) +site/public/pagefind/ + +# Hugo Cache +site/resources/ diff --git a/ansible/molecule/default/verify.yml b/ansible/molecule/default/verify.yml index 69d6331..c99f056 100644 --- a/ansible/molecule/default/verify.yml +++ b/ansible/molecule/default/verify.yml @@ -13,6 +13,8 @@ - crt - site - site/assets/css + - site/assets/js + - site/assets/js/search.js - site/layouts/_default - site/layouts/partials - Caddyfile diff --git a/ansible/tasks.yml b/ansible/tasks.yml index 991143a..9ac45e0 100644 --- a/ansible/tasks.yml +++ b/ansible/tasks.yml @@ -12,6 +12,7 @@ - content - crt - site/assets/css + - site/assets/js - site/layouts/_default - site/layouts/partials - site/static @@ -36,6 +37,12 @@ dest: "{{ deploy_path }}/site/assets/css/main.css" mode: "0644" +- name: search.js kopieren + ansible.builtin.copy: + src: "{{ project_root }}/site/assets/js/" + dest: "{{ deploy_path }}/site/assets/js/" + mode: "0644" + - name: Entrypoint kopieren und ausführbar machen ansible.builtin.copy: src: "{{ project_root }}/site/entrypoint.sh" diff --git a/site/assets/css/main.css b/site/assets/css/main.css index a6283b8..6a7622c 100644 --- a/site/assets/css/main.css +++ b/site/assets/css/main.css @@ -73,6 +73,115 @@ header { } } +/* ---- Suche (Pagefind) ---- */ +.search { + position: relative; + flex: 1 1 auto; + max-width: 360px; + min-width: 160px; + + input[type="search"] { + width: 100%; + padding: 0.45rem 0.9rem; + font-size: 0.9rem; + font-family: inherit; + color: var(--text); + background: var(--card); + border: 1px solid var(--border); + border-radius: 999px; + outline: none; + transition: border-color 0.15s, box-shadow 0.15s; + + &::placeholder { color: var(--muted); } + + &:focus { + border-color: var(--accent); + box-shadow: 0 0 0 3px color-mix(in oklab, var(--accent) 20%, transparent); + } + + &::-webkit-search-cancel-button { cursor: pointer; } + } +} + +.search-results { + position: absolute; + top: calc(100% + 0.5rem); + left: 0; + right: 0; + z-index: 50; + max-height: 70vh; + overflow-y: auto; + background: var(--card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 0.5rem; + box-shadow: 0 12px 32px oklch(0 0 0 / 0.18); + + &[hidden] { display: none; } +} + +.search-item { + display: block; + padding: 0.6rem 0.75rem; + border-radius: calc(var(--radius) - 2px); + text-decoration: none; + + &:hover { background: var(--card-h); } +} + +.search-title { + display: block; + color: var(--text); + font-weight: 600; + font-size: 0.9rem; +} + +.search-excerpt { + display: block; + color: var(--muted); + font-size: 0.8rem; + margin-top: 0.15rem; + line-height: 1.5; + + mark { + background: color-mix(in oklab, var(--accent) 30%, transparent); + color: var(--text); + border-radius: 2px; + padding: 0 0.1em; + } +} + +.search-sub { + list-style: none; + margin: 0.25rem 0 0.5rem; + padding-left: 0.75rem; + border-left: 2px solid var(--border); + + li { + margin: 0.15rem 0; + + a { + display: block; + padding: 0.25rem 0.5rem; + border-radius: calc(var(--radius) - 2px); + color: var(--muted); + font-size: 0.8rem; + text-decoration: none; + + &:hover { background: var(--card-h); color: var(--text); } + } + + .search-excerpt { font-size: 0.75rem; } + } +} + +.search-empty { + padding: 0.75rem; + color: var(--muted); + font-size: 0.85rem; + text-align: center; +} + /* ---- Footer ---- */ footer { margin-top: 3rem; diff --git a/site/assets/js/search.js b/site/assets/js/search.js new file mode 100644 index 0000000..ac77002 --- /dev/null +++ b/site/assets/js/search.js @@ -0,0 +1,103 @@ +(function () { + "use strict"; + + const input = document.getElementById("search-input"); + const results = document.getElementById("search-results"); + if (!input || !results) return; + + let pagefind = null; + let timer = null; + + async function getPagefind() { + if (!pagefind) pagefind = await import("/pagefind/pagefind.js"); + return pagefind; + } + + function escapeHtml(str) { + const div = document.createElement("div"); + div.textContent = str; + return div.innerHTML; + } + + function render(items) { + if (!items.length) { + results.innerHTML = '

Keine Treffer.

'; + results.hidden = false; + return; + } + results.innerHTML = items + .map((it) => { + // excerpt enthält bereits von Pagefind – als HTML rendern + const excerpt = it.excerpt + ? `${it.excerpt}` + : ""; + const sub = (it.sub_results || []) + .slice(0, 3) + .map( + (s) => + `
  • ${escapeHtml(s.title)}` + + (s.excerpt ? `${s.excerpt}` : "") + + `
  • ` + ) + .join(""); + return ( + `` + + `${escapeHtml(it.title)}${excerpt}` + + (sub ? `` : "") + ); + }) + .join(""); + results.hidden = false; + } + + async function doSearch(query) { + query = query.trim(); + if (query.length < 2) { + results.hidden = true; + results.innerHTML = ""; + return; + } + try { + const pf = await getPagefind(); + const search = await pf.search(query); + const items = []; + for (const res of search.results.slice(0, 8)) { + const data = await res.data(); + items.push({ + url: data.url, + title: (data.meta && data.meta.title) || data.url, + excerpt: data.excerpt, + sub_results: (data.sub_results || []).map((s) => ({ + url: s.url, + title: s.title, + excerpt: s.excerpt, + })), + }); + } + render(items); + } catch (e) { + results.innerHTML = '

    Suche nicht verfügbar.

    '; + results.hidden = false; + } + } + + input.addEventListener("input", () => { + clearTimeout(timer); + timer = setTimeout(() => doSearch(input.value), 150); + }); + + input.addEventListener("focus", () => { + if (input.value.trim().length >= 2) doSearch(input.value); + }); + + document.addEventListener("click", (e) => { + if (!e.target.closest(".search")) results.hidden = true; + }); + + document.addEventListener("keydown", (e) => { + if (e.key === "Escape") { + results.hidden = true; + input.blur(); + } + }); +})(); diff --git a/site/entrypoint.sh b/site/entrypoint.sh index e5f93f4..5f86c09 100755 --- a/site/entrypoint.sh +++ b/site/entrypoint.sh @@ -1,8 +1,12 @@ #!/bin/sh # Auto-Frontmatter für Hugo 0.165+ # Fügt fehlenden --- Titel-Block in .md-Dateien ein. +# Installiert zusätzlich Pagefind und hält den Suchindex im Watch-Modus aktuell. CONTENT_DIR="/src/content" +PAGEFIND_DIR="/src/.pagefind" +PAGEFIND_BIN="$PAGEFIND_DIR/pagefind" +PAGEFIND_VERSION="v1.5.2" for md in "$CONTENT_DIR"/*.md; do [ -f "$md" ] || continue @@ -29,10 +33,56 @@ for md in "$CONTENT_DIR"/*.md; do fi done -exec hugo server \ +# ── Pagefind installieren (einmalig, persistent via site-Mount) ── +if [ ! -x "$PAGEFIND_BIN" ]; then + echo "[pagefind] installiere ${PAGEFIND_VERSION} ..." + mkdir -p "$PAGEFIND_DIR" + wget -q -O /tmp/pagefind.tar.gz \ + "https://github.com/CloudCannon/pagefind/releases/download/${PAGEFIND_VERSION}/pagefind-${PAGEFIND_VERSION}-x86_64-unknown-linux-musl.tar.gz" \ + && tar -xzf /tmp/pagefind.tar.gz -C "$PAGEFIND_DIR" \ + && chmod +x "$PAGEFIND_BIN" \ + && rm -f /tmp/pagefind.tar.gz \ + && echo "[pagefind] installiert: $("$PAGEFIND_BIN" --version 2>&1 | head -1)" +fi + +# ── Pagefind-Index (neu) bauen ── +build_pagefind() { + if [ -x "$PAGEFIND_BIN" ] && [ -d /src/public ]; then + "$PAGEFIND_BIN" --site /src/public --output-subdir pagefind >/dev/null 2>&1 \ + && echo "[pagefind] Index aktualisiert" + fi +} + +# Hugo im Hintergrund starten (Watch-Modus) +hugo server \ --watch \ --bind=0.0.0.0 \ --port=1313 \ --disableFastRender \ --baseURL=https://localhost:5443/ \ - --renderStaticToDisk \ No newline at end of file + --renderStaticToDisk & + +HUGO_PID=$! + +# Warten bis der erste Build fertig ist, dann initial indizieren +i=0 +while [ $i -lt 60 ]; do + [ -f /src/public/index.html ] && break + sleep 1 + i=$((i + 1)) +done +build_pagefind + +# ── Watch-Loop: Pagefind neu bauen, wenn sich HTML in public ändert ── +PAGEFIND_MARKER=/tmp/pagefind.marker +touch "$PAGEFIND_MARKER" +while true; do + sleep 2 + if find /src/public -name '*.html' -newer "$PAGEFIND_MARKER" 2>/dev/null | grep -q .; then + touch "$PAGEFIND_MARKER" + build_pagefind + fi +done & + +# Hugo im Vordergrund halten; bei dessen Ende den Container beenden +wait "$HUGO_PID" diff --git a/site/layouts/_default/baseof.html b/site/layouts/_default/baseof.html index 7fb3a67..149f4c1 100644 --- a/site/layouts/_default/baseof.html +++ b/site/layouts/_default/baseof.html @@ -4,7 +4,7 @@ {{ partial "header.html" . }} -
    +
    {{ block "main" . }}{{ end }}
    {{ partial "footer.html" . }} diff --git a/site/layouts/partials/head.html b/site/layouts/partials/head.html index 3243548..9a6cf4c 100644 --- a/site/layouts/partials/head.html +++ b/site/layouts/partials/head.html @@ -14,6 +14,11 @@ {{ $css := resources.Get "css/main.css" | resources.Minify }} + +{{ $js := resources.Get "js/search.js" | resources.Minify | resources.Fingerprint }} + + + {{ with .OutputFormats.Get "rss" }} diff --git a/site/layouts/partials/header.html b/site/layouts/partials/header.html index 71e53f2..bac84b3 100644 --- a/site/layouts/partials/header.html +++ b/site/layouts/partials/header.html @@ -1,8 +1,19 @@
    + {{ if not .IsHome }} {{ end }} -
    \ No newline at end of file + diff --git a/site/public/astro-vim-recommendations/index.html b/site/public/astro-vim-recommendations/index.html index 36075b0..1d6b742 100644 --- a/site/public/astro-vim-recommendations/index.html +++ b/site/public/astro-vim-recommendations/index.html @@ -18,17 +18,34 @@ + + + + +
    +
    -
    + +
    diff --git a/site/public/awx_und_rundeck_install/index.html b/site/public/awx_und_rundeck_install/index.html index 88792a5..0234e45 100644 --- a/site/public/awx_und_rundeck_install/index.html +++ b/site/public/awx_und_rundeck_install/index.html @@ -18,17 +18,34 @@ + + + + +
    +
    -
    + +
    diff --git a/site/public/blueray_install_manjaro/index.html b/site/public/blueray_install_manjaro/index.html index 85c2ad1..ed6a9ea 100644 --- a/site/public/blueray_install_manjaro/index.html +++ b/site/public/blueray_install_manjaro/index.html @@ -20,17 +20,34 @@ Benötigte …"> + + + + +
    +
    -
    + +
    diff --git a/site/public/calcurse_tastenkürzel/index.html b/site/public/calcurse_tastenkürzel/index.html index 8df464b..d2b82ab 100644 --- a/site/public/calcurse_tastenkürzel/index.html +++ b/site/public/calcurse_tastenkürzel/index.html @@ -20,17 +20,34 @@ Allgemeine …"> + + + + +
    +
    -
    + +
    diff --git a/site/public/css/main.min.css b/site/public/css/main.min.css index 91121bd..c125b3c 100644 --- a/site/public/css/main.min.css +++ b/site/public/css/main.min.css @@ -1 +1 @@ -*,*::before,*::after{box-sizing:border-box;margin:0}html{color-scheme:light dark;scroll-behavior:smooth}body{--bg:light-dark(oklch(0.98 0 0), oklch(0.15 0.005 260));--text:light-dark(oklch(0.25 0 0), oklch(0.88 0.005 260));--muted:light-dark(oklch(0.50 0 0), oklch(0.55 0.005 260));--border:light-dark(oklch(0.85 0 0), oklch(0.28 0.005 260));--card:light-dark(oklch(1 0 0), oklch(0.20 0.008 260));--card-h:light-dark(oklch(0.96 0 0), oklch(0.25 0.015 260));--accent:light-dark(oklch(0.52 0.23 260), oklch(0.70 0.22 260));--code-bg:light-dark(oklch(0.94 0.01 260), oklch(0.22 0.015 260));--radius:8px;font-family:system-ui,-apple-system,segoe ui,sans-serif;font-size:1rem;line-height:1.7;text-wrap:pretty;color:var(--text);background:var(--bg);min-height:100dvh;display:grid;grid-template-rows:auto 1fr auto;grid-template-columns:1fr min(800px,95%)1fr;> *{grid-column:2}}header{padding:1.5rem 0;display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:.5rem;border-bottom:1px solid var(--border);margin-bottom:2rem;.logo{font-size:1.25rem;font-weight:700;color:var(--accent);text-decoration:none;&:hover{text-decoration:underline}}nav a{color:var(--muted);font-size:.9rem;text-decoration:none;&:hover{color:var(--text)}}}footer{margin-top:3rem;padding:1.5rem 0;border-top:1px solid var(--border);text-align:center;font-size:.85rem;color:var(--muted);a{color:var(--accent)}}h1,h2,h3,h4,h5,h6{line-height:1.3;color:var(--text);text-wrap:balance}h1{font-size:2rem;margin-bottom:.5rem}h2{font-size:1.5rem;margin:2rem 0 .5rem}h3{font-size:1.2rem;margin:1.5rem 0 .4rem}.subtitle{color:var(--muted);margin-bottom:2rem}a{color:var(--accent);text-underline-offset:3px;text-decoration-thickness:1px;&:hover{text-decoration-thickness:2px}}.content{p, ul, ol, blockquote{margin-bottom:1rem}ul, ol{padding-left:1.5rem}li{margin-bottom:.25rem}blockquote{border-left:3px solid var(--accent);padding:.5rem 1rem;color:var(--muted);background:var(--card);border-radius:0 var(--radius)var(--radius)0;p:last-child{margin-bottom:0}}img{max-width:100%;height:auto;border-radius:var(--radius)}hr{border:none;border-top:1px solid var(--border);margin:2rem 0} :not(pre) > code { background: var(--code-bg); padding: 0.15em 0.4em; border-radius: 4px; font-size: 0.9em; } pre { background: var(--code-bg); padding: 1rem 1.25rem; border-radius: var(--radius); overflow-x: auto; margin-bottom: 1.5rem; border: 1px solid var(--border); code { font-size: 0.85rem; background: none; padding: 0; } } table { width: 100%; border-collapse: collapse; margin-bottom: 1.5rem; font-size: 0.9rem; th, td { padding: 0.5rem 0.75rem; border: 1px solid var(--border); text-align: left; } th { background: var(--card); font-weight: 600; } tr:nth-child(even) { background: var(--card); } }}.article-header{margin-bottom:1.5rem;h1{margin-bottom:.25rem}time{color:var(--muted);font-size:.9rem}}details.toc{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:.75rem 1rem;margin-bottom:2rem;font-size:.9rem;summary{cursor:pointer;font-weight:600;user-select:none}nav#TableOfContents > ul{padding-left:1rem;margin-top:.5rem}ul{list-style:none;padding-left:1.25rem;li{margin-bottom:.3rem}}a{text-decoration:none}}.post-grid{container-type:inline-size;display:grid;gap:1.5rem}article.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem 1.5rem;transition:background .15s,border-color .15s;&:hover{background:var(--card-h);border-color:var(--accent)}time{color:var(--muted);font-size:.8rem}h2{font-size:1.15rem;margin-top:.25rem;a{color:var(--text);text-decoration:none;&:hover{color:var(--accent)}}}p{color:var(--muted);font-size:.9rem;margin-top:.5rem}}.tags{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.5rem}.tag{background:var(--code-bg);color:var(--muted);font-size:.75rem;padding:.15em .6em;border-radius:4px}:root{--chroma-bg:oklch(0.22 0.015 260);--chroma-k:#cba6f7;--chroma-s:#a6e3a1;--chroma-c:#6c7086;--chroma-n:#cdd6f4;--chroma-o:#89b4fa;--chroma-m:#f38ba8}@media(prefers-color-scheme:light){:root{--chroma-bg:oklch(0.94 0.01 260);--chroma-k:#8839ef;--chroma-s:#40a02b;--chroma-c:#9ca0b0;--chroma-n:#4c4f69;--chroma-o:#1e66f5;--chroma-m:#d20f39}}pre.chroma{background:var(--chroma-bg)}pre .k,pre .kd,pre .kn{color:var(--chroma-k)}pre .s,pre .s1,pre .s2{color:var(--chroma-s)}pre .c,pre .c1,pre .cm{color:var(--chroma-c);font-style:italic}pre .n,pre .na,pre .nt{color:var(--chroma-n)}pre .o,pre .p{color:var(--chroma-o)}pre .m,pre .mi{color:var(--chroma-m)}@media(max-width:840px){body{grid-template-columns:1fr;padding:0 1rem;> *{grid-column:1}}} \ No newline at end of file +*,*::before,*::after{box-sizing:border-box;margin:0}html{color-scheme:light dark;scroll-behavior:smooth}body{--bg:light-dark(oklch(0.98 0 0), oklch(0.15 0.005 260));--text:light-dark(oklch(0.25 0 0), oklch(0.88 0.005 260));--muted:light-dark(oklch(0.50 0 0), oklch(0.55 0.005 260));--border:light-dark(oklch(0.85 0 0), oklch(0.28 0.005 260));--card:light-dark(oklch(1 0 0), oklch(0.20 0.008 260));--card-h:light-dark(oklch(0.96 0 0), oklch(0.25 0.015 260));--accent:light-dark(oklch(0.52 0.23 260), oklch(0.70 0.22 260));--code-bg:light-dark(oklch(0.94 0.01 260), oklch(0.22 0.015 260));--radius:8px;font-family:system-ui,-apple-system,segoe ui,sans-serif;font-size:1rem;line-height:1.7;text-wrap:pretty;color:var(--text);background:var(--bg);min-height:100dvh;display:grid;grid-template-rows:auto 1fr auto;grid-template-columns:1fr min(800px,95%)1fr;> *{grid-column:2}}header{padding:1.5rem 0;display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:.5rem;border-bottom:1px solid var(--border);margin-bottom:2rem;.logo{font-size:1.25rem;font-weight:700;color:var(--accent);text-decoration:none;&:hover{text-decoration:underline}}nav a{color:var(--muted);font-size:.9rem;text-decoration:none;&:hover{color:var(--text)}}}.search{position:relative;flex:auto;max-width:360px;min-width:160px;input[type=search]{width:100%;padding:.45rem .9rem;font-size:.9rem;font-family:inherit;color:var(--text);background:var(--card);border:1px solid var(--border);border-radius:999px;outline:none;transition:border-color .15s,box-shadow .15s;&::placeholder{color:var(--muted)}&:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in oklab,var(--accent) 20%,transparent)}&::-webkit-search-cancel-button{cursor:pointer}}}.search-results{position:absolute;top:calc(100% + .5rem);left:0;right:0;z-index:50;max-height:70vh;overflow-y:auto;background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:.5rem;box-shadow:0 12px 32px oklch(0 0 0/.18);&[hidden]{display:none}}.search-item{display:block;padding:.6rem .75rem;border-radius:calc(var(--radius) - 2px);text-decoration:none;&:hover{background:var(--card-h)}}.search-title{display:block;color:var(--text);font-weight:600;font-size:.9rem}.search-excerpt{display:block;color:var(--muted);font-size:.8rem;margin-top:.15rem;line-height:1.5;mark{background:color-mix(in oklab,var(--accent) 30%,transparent);color:var(--text);border-radius:2px;padding:0 .1em}}.search-sub{list-style:none;margin:.25rem 0 .5rem;padding-left:.75rem;border-left:2px solid var(--border);li{margin:.15rem 0;a{display:block;padding:.25rem .5rem;border-radius:calc(var(--radius) - 2px);color:var(--muted);font-size:.8rem;text-decoration:none;&:hover{background:var(--card-h);color:var(--text)}}.search-excerpt{font-size:.75rem}}}.search-empty{padding:.75rem;color:var(--muted);font-size:.85rem;text-align:center}footer{margin-top:3rem;padding:1.5rem 0;border-top:1px solid var(--border);text-align:center;font-size:.85rem;color:var(--muted);a{color:var(--accent)}}h1,h2,h3,h4,h5,h6{line-height:1.3;color:var(--text);text-wrap:balance}h1{font-size:2rem;margin-bottom:.5rem}h2{font-size:1.5rem;margin:2rem 0 .5rem}h3{font-size:1.2rem;margin:1.5rem 0 .4rem}.subtitle{color:var(--muted);margin-bottom:2rem}a{color:var(--accent);text-underline-offset:3px;text-decoration-thickness:1px;&:hover{text-decoration-thickness:2px}}.content{p, ul, ol, blockquote{margin-bottom:1rem}ul, ol{padding-left:1.5rem}li{margin-bottom:.25rem}blockquote{border-left:3px solid var(--accent);padding:.5rem 1rem;color:var(--muted);background:var(--card);border-radius:0 var(--radius)var(--radius)0;p:last-child{margin-bottom:0}}img{max-width:100%;height:auto;border-radius:var(--radius)}hr{border:none;border-top:1px solid var(--border);margin:2rem 0} :not(pre) > code { background: var(--code-bg); padding: 0.15em 0.4em; border-radius: 4px; font-size: 0.9em; } pre { background: var(--code-bg); padding: 1rem 1.25rem; border-radius: var(--radius); overflow-x: auto; margin-bottom: 1.5rem; border: 1px solid var(--border); code { font-size: 0.85rem; background: none; padding: 0; } } table { width: 100%; border-collapse: collapse; margin-bottom: 1.5rem; font-size: 0.9rem; th, td { padding: 0.5rem 0.75rem; border: 1px solid var(--border); text-align: left; } th { background: var(--card); font-weight: 600; } tr:nth-child(even) { background: var(--card); } }}.article-header{margin-bottom:1.5rem;h1{margin-bottom:.25rem}time{color:var(--muted);font-size:.9rem}}details.toc{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:.75rem 1rem;margin-bottom:2rem;font-size:.9rem;summary{cursor:pointer;font-weight:600;user-select:none}nav#TableOfContents > ul{padding-left:1rem;margin-top:.5rem}ul{list-style:none;padding-left:1.25rem;li{margin-bottom:.3rem}}a{text-decoration:none}}.post-grid{container-type:inline-size;display:grid;gap:1.5rem}article.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius);padding:1.25rem 1.5rem;transition:background .15s,border-color .15s;&:hover{background:var(--card-h);border-color:var(--accent)}time{color:var(--muted);font-size:.8rem}h2{font-size:1.15rem;margin-top:.25rem;a{color:var(--text);text-decoration:none;&:hover{color:var(--accent)}}}p{color:var(--muted);font-size:.9rem;margin-top:.5rem}}.tags{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.5rem}.tag{background:var(--code-bg);color:var(--muted);font-size:.75rem;padding:.15em .6em;border-radius:4px}:root{--chroma-bg:oklch(0.22 0.015 260);--chroma-k:#cba6f7;--chroma-s:#a6e3a1;--chroma-c:#6c7086;--chroma-n:#cdd6f4;--chroma-o:#89b4fa;--chroma-m:#f38ba8}@media(prefers-color-scheme:light){:root{--chroma-bg:oklch(0.94 0.01 260);--chroma-k:#8839ef;--chroma-s:#40a02b;--chroma-c:#9ca0b0;--chroma-n:#4c4f69;--chroma-o:#1e66f5;--chroma-m:#d20f39}}pre.chroma{background:var(--chroma-bg)}pre .k,pre .kd,pre .kn{color:var(--chroma-k)}pre .s,pre .s1,pre .s2{color:var(--chroma-s)}pre .c,pre .c1,pre .cm{color:var(--chroma-c);font-style:italic}pre .n,pre .na,pre .nt{color:var(--chroma-n)}pre .o,pre .p{color:var(--chroma-o)}pre .m,pre .mi{color:var(--chroma-m)}@media(max-width:840px){body{grid-template-columns:1fr;padding:0 1rem;> *{grid-column:1}}} \ No newline at end of file diff --git a/site/public/index.html b/site/public/index.html index 605a4b9..43f36b5 100644 --- a/site/public/index.html +++ b/site/public/index.html @@ -19,15 +19,32 @@ + + + + +
    +
    -
    + +

    Hugo Docker CMS

    Markdown-Dateien einfach in content/ ablegen.

    diff --git a/site/public/index.xml b/site/public/index.xml index 43f909a..c7896f3 100644 --- a/site/public/index.xml +++ b/site/public/index.xml @@ -6,7 +6,7 @@ Markdown-Dateien einfach in content/ ablegen. Hugo 0.165.0 de - Tue, 08 Sep 2026 08:07:00 +0000 + Thu, 10 Sep 2026 07:28:09 +0000 diff --git a/site/public/install_browser/index.html b/site/public/install_browser/index.html index 0c55f58..f2eec27 100644 --- a/site/public/install_browser/index.html +++ b/site/public/install_browser/index.html @@ -18,17 +18,34 @@ + + + + +
    +
    -
    + +
    diff --git a/site/public/js/search.min.868f9708373e89ca72730cc71884718dc463b495c2a72c24a6d6f48e64000709.js b/site/public/js/search.min.868f9708373e89ca72730cc71884718dc463b495c2a72c24a6d6f48e64000709.js new file mode 100644 index 0000000..11b77c5 --- /dev/null +++ b/site/public/js/search.min.868f9708373e89ca72730cc71884718dc463b495c2a72c24a6d6f48e64000709.js @@ -0,0 +1 @@ +(function(){"use strict";const t=document.getElementById("search-input"),e=document.getElementById("search-results");if(!t||!e)return;let n=null,s=null;async function a(){return n||(n=await import("/pagefind/pagefind.js")),n}function o(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML}function r(t){if(!t.length){e.innerHTML='

    Keine Treffer.

    ',e.hidden=!1;return}e.innerHTML=t.map(e=>{const n=e.excerpt?`${e.excerpt}`:"",t=(e.sub_results||[]).slice(0,3).map(e=>`
  • ${o(e.title)}`+(e.excerpt?`${e.excerpt}`:"")+`
  • `).join("");return``+`${o(e.title)}${n}`+(t?`
      ${t}
    `:"")}).join(""),e.hidden=!1}async function i(t){if(t=t.trim(),t.length<2){e.hidden=!0,e.innerHTML="";return}try{const n=await a(),s=await n.search(t),e=[];for(const n of s.results.slice(0,8)){const t=await n.data();e.push({url:t.url,title:t.meta&&t.meta.title||t.url,excerpt:t.excerpt,sub_results:(t.sub_results||[]).map(e=>({url:e.url,title:e.title,excerpt:e.excerpt}))})}r(e)}catch{e.innerHTML='

    Suche nicht verfügbar.

    ',e.hidden=!1}}t.addEventListener("input",()=>{clearTimeout(s),s=setTimeout(()=>i(t.value),150)}),t.addEventListener("focus",()=>{t.value.trim().length>=2&&i(t.value)}),document.addEventListener("click",t=>{t.target.closest(".search")||(e.hidden=!0)}),document.addEventListener("keydown",n=>{n.key==="Escape"&&(e.hidden=!0,t.blur())})})() \ No newline at end of file diff --git a/site/public/lazygit/index.html b/site/public/lazygit/index.html index 06b67b8..e808cb4 100644 --- a/site/public/lazygit/index.html +++ b/site/public/lazygit/index.html @@ -18,17 +18,34 @@ + + + + +
    +
    -
    + +
    diff --git a/site/public/networkconfig_dns/index.html b/site/public/networkconfig_dns/index.html index 3396808..c60187d 100644 --- a/site/public/networkconfig_dns/index.html +++ b/site/public/networkconfig_dns/index.html @@ -18,17 +18,34 @@ + + + + +
    +
    -
    + +
    diff --git a/site/public/stretchen_laufen/index.html b/site/public/stretchen_laufen/index.html index 465ccfd..2580b0f 100644 --- a/site/public/stretchen_laufen/index.html +++ b/site/public/stretchen_laufen/index.html @@ -20,17 +20,34 @@ Zwillingswadenmuskel dehnen S166 Zwillingswadenmuskel dehen S164 Beste Dhenübun + + + + +
    +
    -
    + +
    diff --git a/site/public/string_prefixes/index.html b/site/public/string_prefixes/index.html index 7937e6d..ae22feb 100644 --- a/site/public/string_prefixes/index.html +++ b/site/public/string_prefixes/index.html @@ -18,17 +18,34 @@ + + + + +
    +
    -
    + +
    diff --git a/site/public/system-optimierung/index.html b/site/public/system-optimierung/index.html index b1b1f8f..b230716 100644 --- a/site/public/system-optimierung/index.html +++ b/site/public/system-optimierung/index.html @@ -18,17 +18,34 @@ + + + + +
    +
    -
    + +
    diff --git a/site/public/tags/index.html b/site/public/tags/index.html index b4107d0..c3084be 100644 --- a/site/public/tags/index.html +++ b/site/public/tags/index.html @@ -18,19 +18,36 @@ + + + + +
    +
    -
    + +

    Tags

    Markdown-Dateien einfach in content/ ablegen.

    diff --git a/site/public/tags/index.xml b/site/public/tags/index.xml index 1d33775..4120b92 100644 --- a/site/public/tags/index.xml +++ b/site/public/tags/index.xml @@ -6,7 +6,7 @@ Markdown-Dateien einfach in content/ ablegen. Hugo 0.165.0 de - Tue, 08 Sep 2026 08:07:00 +0000 + Thu, 10 Sep 2026 07:26:03 +0000 diff --git a/site/public/tinydb_vs_sqlite/index.html b/site/public/tinydb_vs_sqlite/index.html index e5e235f..574433f 100644 --- a/site/public/tinydb_vs_sqlite/index.html +++ b/site/public/tinydb_vs_sqlite/index.html @@ -18,17 +18,34 @@ + + + + +
    +
    -
    + +
    diff --git a/site/public/ver_next_einbinden/index.html b/site/public/ver_next_einbinden/index.html index f0f595c..75b9deb 100644 --- a/site/public/ver_next_einbinden/index.html +++ b/site/public/ver_next_einbinden/index.html @@ -18,17 +18,34 @@ + + + + +
    +
    -
    + +
    diff --git a/site/public/willkommen/index.html b/site/public/willkommen/index.html index b6a0df2..0440525 100644 --- a/site/public/willkommen/index.html +++ b/site/public/willkommen/index.html @@ -22,17 +22,34 @@ So geht’s # Neue Seite …"> + + + + +
    +
    -
    + +
    diff --git a/site/public/yubikey_setup_guide/index.html b/site/public/yubikey_setup_guide/index.html index cd3e4a8..b3f372c 100644 --- a/site/public/yubikey_setup_guide/index.html +++ b/site/public/yubikey_setup_guide/index.html @@ -18,17 +18,34 @@ + + + + +
    +
    -
    + +