2024-12-19 09:56:25 +01:00
<!DOCTYPE html>
< html lang = "{% block html_lang %}{{ DEFAULT_LANG }}{% endblock html_lang %}" >
< head >
{% block head %}
< title > {% block title %}{{ SITENAME|striptags }}{% endblock title %}< / title >
< meta charset = "utf-8" / >
< meta name = "generator" content = "Pelican" / >
2025-02-28 09:12:40 +01:00
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" / >
2024-12-19 09:56:25 +01:00
{% if SITESUBTITLE %}
< meta name = "description" content = "{{ SITESUBTITLE }}" / >
{% endif %}
2026-01-20 14:38:56 +01:00
< meta name = "abuseipdb-verification" content = "RrusxCrq" / >
2026-06-26 14:01:36 +02:00
{% if article is defined %}
< meta property = "og:type" content = "article" / >
< meta property = "og:url" content = "{{ SITEURL }}/{{ article.url }}" / >
< meta property = "og:title" content = "{{ article.title | replace(" \ " " , " & quot ; " ) } } " / >
< meta property = "og:description" content = "{{ article.summary | striptags | replace(" \ " " , " & quot ; " ) } } " / >
< meta property = "og:image" content = "{{ SITEURL }}/img/{% if article.opengraph_image is defined %}{{ article.opengraph_image }}{% else %}logo_og.jpg{% endif %}" / >
{% elif page is defined %}
< meta property = "og:type" content = "website" / >
< meta property = "og:url" content = "{{ SITEURL }}/{{ page.url }}" / >
< meta property = "og:title" content = "{{ page.title | replace(" \ " " , " & quot ; " ) } } " / >
< meta property = "og:description" content = "{{ page.content | striptags | replace(" \ " " , " & quot ; " ) | truncate ( 196 , False , ' . . . ' ) } } " / >
< meta property = "og:image" content = "{{ SITEURL }}/img/{% if page.opengraph_image is defined %}{{ page.opengraph_image }}{% else %}logo_og.jpg{% endif %}" / >
{% else %}
< meta property = "og:type" content = "website" / >
< meta property = "og:url" content = "{{ SITEURL }}/{{ output_file }}" / >
< meta property = "og:title" content = "{{ SITENAME }}" / >
< meta property = "og:description" content = "{{ SITESUBTITLE }}" / >
< meta property = "og:image" content = "{{ SITEURL }}/img/logo_og.jpg" / >
{% endif %}
2024-12-19 09:56:25 +01:00
{% if STYLESHEET_URL %}
< link rel = "stylesheet" type = "text/css" href = "{{ STYLESHEET_URL }}" / >
{% endif %}
{% if FEED_ALL_ATOM %}
< link href = "{{ FEED_DOMAIN }}/{% if FEED_ALL_ATOM_URL %}{{ FEED_ALL_ATOM_URL }}{% else %}{{ FEED_ALL_ATOM }}{% endif %}" type = "application/atom+xml" rel = "alternate" title = "{{ SITENAME|striptags }} Full Atom Feed" / >
{% endif %}
{% if FEED_ALL_RSS %}
< link href = "{{ FEED_DOMAIN }}/{% if FEED_ALL_RSS_URL %}{{ FEED_ALL_RSS_URL }}{% else %}{{ FEED_ALL_RSS }}{% endif %}" type = "application/rss+xml" rel = "alternate" title = "{{ SITENAME|striptags }} Full RSS Feed" / >
{% endif %}
{% if FEED_ATOM %}
< link href = "{{ FEED_DOMAIN }}/{%if FEED_ATOM_URL %}{{ FEED_ATOM_URL }}{% else %}{{ FEED_ATOM }}{% endif %}" type = "application/atom+xml" rel = "alternate" title = "{{ SITENAME|striptags }} Atom Feed" / >
{% endif %}
{% if FEED_RSS %}
< link href = "{{ FEED_DOMAIN }}/{% if FEED_RSS_URL %}{{ FEED_RSS_URL }}{% else %}{{ FEED_RSS }}{% endif %}" type = "application/rss+xml" rel = "alternate" title = "{{ SITENAME|striptags }} RSS Feed" / >
{% endif %}
{% if CATEGORY_FEED_ATOM and category %}
< link href = "{{ FEED_DOMAIN }}/{% if CATEGORY_FEED_ATOM_URL %}{{ CATEGORY_FEED_ATOM_URL.format(slug=category.slug) }}{% else %}{{ CATEGORY_FEED_ATOM.format(slug=category.slug) }}{% endif %}" type = "application/atom+xml" rel = "alternate" title = "{{ SITENAME|striptags }} Categories Atom Feed" / >
{% endif %}
{% if CATEGORY_FEED_RSS and category %}
< link href = "{{ FEED_DOMAIN }}/{% if CATEGORY_FEED_RSS_URL %}{{ CATEGORY_FEED_RSS_URL.format(slug=category.slug) }}{% else %}{{ CATEGORY_FEED_RSS.format(slug=category.slug) }}{% endif %}" type = "application/rss+xml" rel = "alternate" title = "{{ SITENAME|striptags }} Categories RSS Feed" / >
{% endif %}
{% if TAG_FEED_ATOM and tag %}
< link href = "{{ FEED_DOMAIN }}/{% if TAG_FEED_ATOM_URL %}{{ TAG_FEED_ATOM_URL.format(slug=tag.slug) }}{% else %}{{ TAG_FEED_ATOM.format(slug=tag.slug) }}{% endif %}" type = "application/atom+xml" rel = "alternate" title = "{{ SITENAME|striptags }} Tags Atom Feed" / >
{% endif %}
{% if TAG_FEED_RSS and tag %}
< link href = "{{ FEED_DOMAIN }}/{% if TAG_FEED_RSS_URL %}{{ TAG_FEED_RSS_URL.format(slug=tag.slug) }}{% else %}{{ TAG_FEED_RSS.format(slug=tag.slug) }}{% endif %}" type = "application/rss+xml" rel = "alternate" title = "{{ SITENAME|striptags }} Tags RSS Feed" / >
{% endif %}
2025-02-28 09:12:40 +01:00
< link href = "https://api.fontshare.com/v2/css?f[]=erode@400&f[]=fira-sans@600&f[]=stardom@400&display=swap" rel = "stylesheet" / >
2026-06-30 16:27:13 +02:00
< link rel = "stylesheet" type = "text/css" href = "/theme/css/prism-rose-pine-dawn-alt.css" media = "(prefers-color-scheme: light)" / >
< link rel = "stylesheet" type = "text/css" href = "/theme/css/prism-rose-pine-moon-alt.css" media = "(prefers-color-scheme: dark)" / >
2024-12-19 09:56:25 +01:00
< style >
code[class*="language-"],
pre[class*="language-"] {
/* Remove text shadow on prism.js code blocks
Probably caused by rose pine theme */
text-shadow: none;
/* Align prism.js font size to main font size */
font-size: 0.9rem;
}
2026-07-01 12:39:25 +02:00
2025-07-08 10:51:34 +02:00
ul.tagcloud {
list-style: none;
padding: 0;
}
<!-- Pelican tag_cloud -->
ul.tagcloud li {
display: inline-block;
}
li.tag-1 {
font-size: 160%;
}
li.tag-2 {
font-size: 130%;
}
li.tag-3 {
font-size: 100%;
}
2024-12-19 09:56:25 +01:00
< / style >
{% endblock head %}
< / head >
< body >
2024-12-19 23:22:34 +01:00
< div class = "grid grid-cols-9" >
2024-12-19 09:56:25 +01:00
<!-- header -->
2024-12-19 23:22:34 +01:00
< div class = "col-span-9 md:col-span-6 bg-rp-dawn-overlay dark:bg-rp-moon-overlay p-8" >
2024-12-19 09:56:25 +01:00
< header >
2025-01-07 17:27:27 +01:00
< div id = "skiptocontent" > < a href = "#content" > skip to main content< / a > < / div >
2024-12-19 09:56:25 +01:00
< hgroup >
2025-05-22 12:14:15 +02:00
< h1 class = "z-20 relative text-4xl md:text-7xl font-bold text-rp-dawn-foam" > < a class = "no-underline hover:no-underline text-rp-dawn-pine dark:text-rp-moon-foam" href = "{{ SITEURL }}/" > {{ SITENAME }}< / a > < / h1 >
2024-12-19 09:56:25 +01:00
{% if SITESUBTITLE %}
2025-02-24 14:03:11 +01:00
< h2 class = "z-10 bg-gradient-to-r from-rp-dawn-gold from-10% to-rp-dawn-pine to-90% absolute -rotate-3 text-base -mt-11 ml-14 md:text-xl text-rp-dawn-overlay dark:text-rp-moon-highlight-med" > < tt style = "font-family: 'C64 Pro Mono'; letter-spacing: -0.2em;" > {{ SITESUBTITLE }}< / tt > < / h2 >
2024-12-19 09:56:25 +01:00
{% endif %}
< / hgroup >
< / header >
< / div >
2024-12-19 23:22:34 +01:00
< div class = "col-span-9 md:col-span-3 bg-rp-dawn-surface dark:bg-rp-moon-surface p-8 text-xl" >
< nav class = "uppercase" >
2024-12-19 09:56:25 +01:00
< ul class = "list-none" >
{% if DISPLAY_PAGES_ON_MENU %}
< div >
{% for p in pages %}
2025-07-08 10:51:34 +02:00
< li > < a href = "{{ SITEURL }}/{{ p.url }}" class = "no-underline" { % if p = =page % } aria-current = "page" { % endif % } > {{ p.title }}< / a > < / li >
2024-12-19 09:56:25 +01:00
{% endfor %}
< / div >
{% endif %}
{% for title, link in MENUITEMS %}
< li > < a href = "{{ link }}" class = "no-underline" > {{ title }}< / a > < / li >
{% endfor %}
2024-12-19 23:22:34 +01:00
< div >
2024-12-19 09:56:25 +01:00
{% for title, link in LINKS %}
< li > < a href = "{{ link }}" class = "no-underline" > {{ title }}< / a > < / li >
{% endfor %}
< / div >
{% if DISPLAY_CATEGORIES_ON_MENU %}
< div >
{% for cat, null in categories %}
2024-12-19 23:22:34 +01:00
< li class = "border-b-2 border-rp-dawn-gold" > < a href = "{{ SITEURL }}/{{ cat.url }}" class = "no-underline" { % if cat = =category % } aria-current = "page" { % endif % } > {{ cat}}< / a > < / li >
2024-12-19 09:56:25 +01:00
{% endfor %}
< / div >
{% endif %}
< / ul >
< / nav >
< / div >
<!-- main -->
< div class = "bg-rp-dawn-base dark:bg-rp-moon-base" >
<!-- Empty spacer -->
< / div >
2025-02-17 11:08:37 +01:00
< div class = "col-span-9 md:col-span-7 bg-rp-dawn-base dark:bg-rp-moon-base p-4" >
2025-01-07 17:27:27 +01:00
< main id = "content" >
2024-12-19 09:56:25 +01:00
{% block content %}
{% endblock %}
< / main >
< / div >
< div class = "bg-rp-dawn-base dark:bg-rp-moon-base" >
<!-- Empty spacer -->
< / div >
<!-- footer -->
< div class = "bg-rp-dawn-surface dark:bg-rp-moon-surface" >
<!-- Empty spacer -->
< / div >
2025-02-17 11:08:37 +01:00
< div class = "col-span-9 md:col-span-7 pt-20 pb-60 bg-rp-dawn-surface dark:bg-rp-moon-surface text-rp-dawn-text dark:text-rp-moon-rose" >
2024-12-19 09:56:25 +01:00
< footer >
2025-02-17 11:08:37 +01:00
< div class = "grid grid-cols-1 md:grid-cols-6" >
< div class = "col-span-3 p-4" >
2024-12-19 09:56:25 +01:00
< p >
2025-02-17 11:08:37 +01:00
Generated by < a href = "https://getpelican.com" > Pelican< / a > with a
2026-01-20 15:24:58 +01:00
< a href = "https://haddock.crabdance.com/code/weeheavy/pelican-theme" rel = "nofollow" > bespoke< / a > theme inspired by < a href = "https://rosepinetheme.com" > Rosé Pine< / a > .
2024-12-19 09:56:25 +01:00
< / p >
< p >
2025-02-17 11:08:37 +01:00
< a href = "https://buymeacoffee.com/lugh" > < b > Buy me a coffee?< / b > < / a >
2024-12-19 09:56:25 +01:00
< / p >
< / div >
2025-02-17 11:08:37 +01:00
< div class = "col-span-3 p-4 md:border-l-4 border-rp-dawn-overlay dark:border-rp-moon-overlay" >
2025-02-24 14:03:11 +01:00
< p class = "pb-4" >
2026-06-19 13:25:00 +02:00
100% artisanal < a href = "https://creativecommons.org/licenses/by-sa/4.0/?ref=chooser-v1" rel = "license noopener noreferrer" style = "display: inline-block" > content licensed under < em > CC BY-SA 4.0< / em > < / a > .
Valid < a href = "https://wave.webaim.org/report#/https://lugh.ch/{{ output_file }}" > < em > WCAG 2.2 AA< / em > < / a > (except code blocks, sorry).
2024-12-19 09:56:25 +01:00
< / p >
2025-02-24 14:03:11 +01:00
< p class = "pb-4" >
2026-06-19 13:25:00 +02:00
Blog post feed: < a href = "/feeds/atom.xml" > Atom< / a > , < a href = "/feeds/rss.xml" > RSS< / a >
2024-12-19 09:56:25 +01:00
< / p >
2026-06-19 09:41:51 +02:00
< p class = "pb-4" >
2026-06-19 13:25:00 +02:00
IndieWeb: < a href = "https://bubbles.town" > Bubbles< / a > , < a href = "https://indieblog.page" > indieblog.page< / a > , < a href = "https://indieweb.org/Getting_Started" > Getting started< / a >
2026-06-19 09:41:51 +02:00
< / p >
2024-12-19 09:56:25 +01:00
< / div >
< / div >
< / footer >
< / div >
< div class = "bg-rp-dawn-surface dark:bg-rp-moon-surface" >
<!-- Empty spacer -->
< / div >
< / div > <!-- end main grid -->
2026-07-30 14:35:50 +02:00
< script src = "/theme/js/prism.js" defer > < / script >
2026-07-01 12:39:25 +02:00
< script src = "/theme/js/copy-code.js" > < / script >
2024-12-19 09:56:25 +01:00
< / body >
< / html >