<?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/" xmlns:wc="https://wilhelm.codes/ns/feed/1.0"><channel><title>Wilhelm Codes · Markdown</title><link>https://wilhelm.codes/tags/markdown/</link><description>Slinger of nibbles, bits and bytes. Over 25 years of professional experience as a software engineer. Love making glowing rectangles go "beep-boop".</description><generator>Hugo</generator><language>en-US</language><managingEditor>0xdeadbeef@devilmayco.de (Wilhelm Murdoch)</managingEditor><webMaster>0xdeadbeef@devilmayco.de (Wilhelm Murdoch)</webMaster><lastBuildDate>Wed, 18 Dec 2024 00:00:00 +0000</lastBuildDate><atom:link href="https://wilhelm.codes/tags/markdown/index.xml" rel="self" type="application/rss+xml"/><item><title>Testing Markdown Elements</title><link>https://wilhelm.codes/blog/markdown-elements/</link><pubDate>Wed, 18 Dec 2024 00:00:00 +0000</pubDate><author>0xdeadbeef@devilmayco.de (Wilhelm Murdoch)</author><guid>https://wilhelm.codes/blog/markdown-elements/</guid><category>markdown</category><category>hugo</category><wc:kind>post</wc:kind><description>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</description><content:encoded><![CDATA[<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<h2 id="headings">
  <a class="heading-link" href="#headings">Headings<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h2>
<p>Sint sit cillum pariatur eiusmod nulla pariatur ipsum. Sit laborum anim qui mollit tempor pariatur nisi minim dolor. Aliquip et adipisicing sit sit fugiat commodo id sunt. Nostrud enim ad commodo incididunt cupidatat in ullamco ullamco Lorem cupidatat velit enim et Lorem. Ut laborum cillum laboris fugiat culpa sint irure do reprehenderit culpa occaecat. Exercitation esse mollit tempor magna aliqua in occaecat aliquip veniam reprehenderit nisi dolor in laboris dolore velit.</p>
<h2 id="heading-two">
  <a class="heading-link" href="#heading-two">Heading two<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h2>
<p>Aute officia nulla deserunt do deserunt cillum velit magna. Officia veniam culpa anim minim dolore labore pariatur voluptate id ad est duis quis velit dolor pariatur enim. Incididunt enim excepteur do veniam consequat culpa do voluptate dolor fugiat ad adipisicing sit. Labore officia est adipisicing dolore proident eiusmod exercitation deserunt ullamco anim do occaecat velit. Elit dolor consectetur proident sunt aliquip est do tempor quis aliqua culpa aute. Duis in tempor exercitation pariatur et adipisicing mollit irure tempor ut enim esse commodo laboris proident. Do excepteur laborum anim esse aliquip eu sit id Lorem incididunt elit irure ea nulla dolor et. Nulla amet fugiat qui minim deserunt enim eu cupidatat aute officia do velit ea reprehenderit.</p>
<h3 id="heading-three">
  <a class="heading-link" href="#heading-three">Heading three<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h3>
<p>Voluptate cupidatat cillum elit quis ipsum eu voluptate fugiat consectetur enim. Quis ut voluptate culpa ex anim aute consectetur dolore proident voluptate exercitation eiusmod. Esse in do anim magna minim culpa sint. Adipisicing ipsum consectetur proident ullamco magna sit amet aliqua aute fugiat laborum exercitation duis et.</p>
<h4 id="heading-four">
  <a class="heading-link" href="#heading-four">Heading four<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h4>
<p>Commodo fugiat aliqua minim quis pariatur mollit id tempor. Non occaecat minim esse enim aliqua adipisicing nostrud duis consequat eu adipisicing qui. Minim aliquip sit excepteur ipsum consequat laborum pariatur excepteur. Veniam fugiat et amet ad elit anim laborum duis mollit occaecat et et ipsum et reprehenderit. Occaecat aliquip dolore adipisicing sint labore occaecat officia fugiat. Quis adipisicing exercitation exercitation eu amet est laboris sunt nostrud ipsum reprehenderit ullamco. Enim sint ut consectetur id anim aute voluptate exercitation mollit dolore magna magna est Lorem. Ut adipisicing adipisicing aliqua ullamco voluptate labore nisi tempor esse magna incididunt.</p>
<h5 id="heading-five">
  <a class="heading-link" href="#heading-five">Heading five<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h5>
<p>Veniam enim esse amet veniam deserunt laboris amet enim consequat. Minim nostrud deserunt cillum consectetur commodo eu enim nostrud ullamco occaecat excepteur. Aliquip et ut est commodo enim dolor amet sint excepteur. Amet ad laboris laborum deserunt sint sunt aliqua commodo ex duis deserunt enim est ex labore ut. Duis incididunt velit adipisicing non incididunt adipisicing adipisicing. Ad irure duis nisi tempor eu dolor fugiat magna et consequat tempor eu ex dolore. Mollit esse nisi qui culpa ut nisi ex proident culpa cupidatat cillum culpa occaecat anim. Ut officia sit ea nisi ea excepteur nostrud ipsum et nulla.</p>
<h6 id="heading-six">
  <a class="heading-link" href="#heading-six">Heading six<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h6>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
<h2 id="paragraphs">
  <a class="heading-link" href="#paragraphs">Paragraphs<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h2>
<p>Incididunt ex adipisicing ea ullamco consectetur in voluptate proident fugiat tempor deserunt reprehenderit ullamco id dolore laborum. Do laboris laboris minim incididunt qui consectetur exercitation adipisicing dolore et magna consequat magna anim sunt. Officia fugiat Lorem sunt pariatur incididunt Lorem reprehenderit proident irure. Dolore ipsum aliqua mollit ad officia fugiat sit eu aliquip cupidatat ipsum duis laborum laborum fugiat esse. Voluptate anim ex dolore deserunt ea ex eiusmod irure. Occaecat excepteur aliqua exercitation aliquip dolor esse eu eu.</p>
<p>Officia dolore laborum aute incididunt commodo nisi velit est est elit et dolore elit exercitation. Enim aliquip magna id ipsum aliquip consectetur ad nulla quis. Incididunt pariatur dolor consectetur cillum enim velit cupidatat laborum quis ex.</p>
<p>Officia irure in non voluptate adipisicing sit amet tempor duis dolore deserunt enim ut. Reprehenderit incididunt in ad anim et deserunt deserunt Lorem laborum quis. Enim aute anim labore proident laboris voluptate elit excepteur in. Ex labore nulla velit officia ullamco Lorem Lorem id do. Dolore ullamco ipsum magna dolor pariatur voluptate ipsum id occaecat ipsum. Dolore tempor quis duis commodo quis quis enim.</p>
<h2 id="blockquotes">
  <a class="heading-link" href="#blockquotes">Blockquotes<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h2>
<p>Ad nisi laborum aute cupidatat magna deserunt eu id laboris id. Aliquip nulla cupidatat sint ex Lorem mollit laborum dolor amet est ut esse aute. Nostrud ex consequat id incididunt proident ipsum minim duis aliqua ut ex et ad quis. Laborum sint esse cillum anim nulla cillum consectetur aliqua sit. Nisi excepteur cillum labore amet excepteur commodo enim occaecat consequat ipsum proident exercitation duis id in.</p>
<figure class="pull-quote">
  <span class="pull-quote-mark" aria-hidden="true"><span class="icon "><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256"><g fill="currentColor"><path d="M108 72v72H40a8 8 0 0 1-8-8V72a8 8 0 0 1 8-8h60a8 8 0 0 1 8 8m108-8h-60a8 8 0 0 0-8 8v64a8 8 0 0 0 8 8h68V72a8 8 0 0 0-8-8" opacity=".2"/><path d="M100 56H40a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h60v8a32 32 0 0 1-32 32a8 8 0 0 0 0 16a48.05 48.05 0 0 0 48-48V72a16 16 0 0 0-16-16m0 80H40V72h60Zm116-80h-60a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h60v8a32 32 0 0 1-32 32a8 8 0 0 0 0 16a48.05 48.05 0 0 0 48-48V72a16 16 0 0 0-16-16m0 80h-60V72h60Z"/></g></svg></span></span>
  <blockquote>
    <p>Ipsum et cupidatat mollit exercitation enim duis sunt irure aliqua reprehenderit mollit. Pariatur Lorem pariatur laboris do culpa do elit irure. Eiusmod amet nulla voluptate velit culpa et aliqua ad reprehenderit sit ut.</p>
  </blockquote>
  <figcaption>
    <cite>Ancient Klingon Proverb ( probably )</cite>
  </figcaption>
</figure>

<p>Labore ea magna Lorem consequat aliquip consectetur cillum duis dolore. Et veniam dolor qui incididunt minim amet laboris sit. Dolore ad esse commodo et dolore amet est velit ut nisi ea. Excepteur ea nulla commodo dolore anim dolore adipisicing eiusmod labore id enim esse quis mollit deserunt est. Minim ea culpa voluptate nostrud commodo proident in duis aliquip minim.</p>
<figure class="pull-quote">
  <span class="pull-quote-mark" aria-hidden="true"><span class="icon "><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256"><g fill="currentColor"><path d="M108 72v72H40a8 8 0 0 1-8-8V72a8 8 0 0 1 8-8h60a8 8 0 0 1 8 8m108-8h-60a8 8 0 0 0-8 8v64a8 8 0 0 0 8 8h68V72a8 8 0 0 0-8-8" opacity=".2"/><path d="M100 56H40a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h60v8a32 32 0 0 1-32 32a8 8 0 0 0 0 16a48.05 48.05 0 0 0 48-48V72a16 16 0 0 0-16-16m0 80H40V72h60Zm116-80h-60a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h60v8a32 32 0 0 1-32 32a8 8 0 0 0 0 16a48.05 48.05 0 0 0 48-48V72a16 16 0 0 0-16-16m0 80h-60V72h60Z"/></g></svg></span></span>
  <blockquote>
    <p>Ipsum et cupidatat mollit exercitation enim duis sunt irure aliqua reprehenderit mollit. Pariatur Lorem pariatur laboris do culpa do elit irure. Eiusmod amet nulla voluptate velit culpa et aliqua ad reprehenderit sit ut.</p>
  </blockquote>
  <figcaption>
    <cite>Ancient Klingon Proverb ( probably )</cite>
  </figcaption>
</figure>

<p>Ipsum excepteur cupidatat sunt minim ad eiusmod tempor sit.</p>
<figure class="pull-quote">
  <span class="pull-quote-mark" aria-hidden="true"><span class="icon "><svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 256 256"><g fill="currentColor"><path d="M108 72v72H40a8 8 0 0 1-8-8V72a8 8 0 0 1 8-8h60a8 8 0 0 1 8 8m108-8h-60a8 8 0 0 0-8 8v64a8 8 0 0 0 8 8h68V72a8 8 0 0 0-8-8" opacity=".2"/><path d="M100 56H40a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h60v8a32 32 0 0 1-32 32a8 8 0 0 0 0 16a48.05 48.05 0 0 0 48-48V72a16 16 0 0 0-16-16m0 80H40V72h60Zm116-80h-60a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h60v8a32 32 0 0 1-32 32a8 8 0 0 0 0 16a48.05 48.05 0 0 0 48-48V72a16 16 0 0 0-16-16m0 80h-60V72h60Z"/></g></svg></span></span>
  <blockquote>
    <p>Ipsum et cupidatat mollit exercitation enim duis sunt irure aliqua reprehenderit mollit. Pariatur Lorem pariatur laboris do culpa do elit irure. Eiusmod amet nulla voluptate velit culpa et aliqua ad reprehenderit sit ut.</p>
  </blockquote>
  <figcaption>
    <cite>Ancient Klingon Proverb ( probably )</cite>
  </figcaption>
</figure>

<p>Adipisicing voluptate ipsum culpa voluptate id aute laboris labore esse fugiat veniam ullamco occaecat do ut. Tempor et esse reprehenderit veniam proident ipsum irure sit ullamco et labore ea excepteur nulla labore ut. Ex aute minim quis tempor in eu id id irure ea nostrud dolor esse.</p>
<h2 id="lists">
  <a class="heading-link" href="#lists">Lists<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h2>
<h3 id="ordered-list">
  <a class="heading-link" href="#ordered-list">Ordered List<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h3>
<ol>
<li>Longan</li>
<li>Lychee</li>
<li>Excepteur ad cupidatat do elit laborum amet cillum reprehenderit consequat quis.
Deserunt officia esse aliquip consectetur duis ut labore laborum commodo aliquip aliquip velit pariatur dolore.</li>
<li>Marionberry</li>
<li>Melon
<ol>
<li>Cantaloupe</li>
<li>Honeydew</li>
<li>Watermelon</li>
</ol>
</li>
<li>Miracle fruit</li>
<li>Mulberry</li>
</ol>
<h3 id="unordered-list">
  <a class="heading-link" href="#unordered-list">Unordered List<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h3>
<ul>
<li>Olive</li>
<li>Orange
<ul>
<li>Blood orange</li>
<li>Clementine</li>
</ul>
</li>
<li>Papaya</li>
<li>Ut aute ipsum occaecat nisi culpa Lorem id occaecat cupidatat id id magna laboris ad duis. Fugiat cillum dolore veniam nostrud proident sint consectetur eiusmod irure adipisicing.</li>
<li>Passionfruit</li>
</ul>
<h2 id="horizontal-rule">
  <a class="heading-link" href="#horizontal-rule">Horizontal rule<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h2>
<p>In dolore velit aliquip labore mollit minim tempor veniam eu veniam ad in sint aliquip mollit mollit. Ex occaecat non deserunt elit laborum sunt tempor sint consequat culpa culpa qui sit. Irure ad commodo eu voluptate mollit cillum cupidatat veniam proident amet minim reprehenderit.</p>
<hr>
<p>In laboris eiusmod reprehenderit aliquip sit proident occaecat. Non sit labore anim elit veniam Lorem minim commodo eiusmod irure do minim nisi. Dolor amet cillum excepteur consequat sint non sint.</p>
<h2 id="code">
  <a class="heading-link" href="#code">Code<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h2>
<h3 id="inline-code">
  <a class="heading-link" href="#inline-code">Inline code<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h3>
<p>Ad amet irure est magna id mollit Lorem in do duis enim. Excepteur velit nisi magna ea pariatur pariatur ullamco fugiat deserunt sint non sint. Duis duis est <code>code in text</code> velit velit aute culpa ex quis pariatur pariatur laborum aute pariatur duis tempor sunt ad. Irure magna voluptate dolore consectetur consectetur irure esse. Anim magna <code>&lt;strong&gt;in culpa qui officia&lt;/strong&gt;</code> dolor eiusmod esse amet aute cupidatat aliqua do id voluptate cupidatat reprehenderit amet labore deserunt.</p>
<h3 id="tables">
  <a class="heading-link" href="#tables">Tables<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h3>
<table>
	<thead>
			<tr>
					<th style="text-align: left">Complexity</th>
					<th style="text-align: center">Normalized Unit</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td style="text-align: left">Small</td>
					<td style="text-align: center">1</td>
			</tr>
			<tr>
					<td style="text-align: left">Medium</td>
					<td style="text-align: center">2</td>
			</tr>
			<tr>
					<td style="text-align: left">Large</td>
					<td style="text-align: center">3</td>
			</tr>
	</tbody>
</table>
<h3 id="highlighted">
  <a class="heading-link" href="#highlighted">Highlighted<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h3>
<p>Et fugiat ad nisi amet magna labore do cillum fugiat occaecat cillum Lorem proident. In sint dolor ullamco ad do adipisicing amet id excepteur Lorem aliquip sit irure veniam laborum duis cillum. Aliqua occaecat minim cillum deserunt magna sunt laboris do do irure ea nostrud consequat ut voluptate ex.</p>
<div class="code-block">
  <div class="code-head">
    <span class="code-file"></span>
    <span class="code-lang">Go</span>
  </div>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="kn">package</span><span class="w"> </span><span class="nx">main</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="kn">import</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="s">&#34;fmt&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="s">&#34;net/http&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="kd">func</span><span class="w"> </span><span class="nf">handler</span><span class="p">(</span><span class="nx">w</span><span class="w"> </span><span class="nx">http</span><span class="p">.</span><span class="nx">ResponseWriter</span><span class="p">,</span><span class="w"> </span><span class="nx">r</span><span class="w"> </span><span class="o">*</span><span class="nx">http</span><span class="p">.</span><span class="nx">Request</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nx">fmt</span><span class="p">.</span><span class="nf">Fprintf</span><span class="p">(</span><span class="nx">w</span><span class="p">,</span><span class="w"> </span><span class="s">&#34;Hi there, I love %s!&#34;</span><span class="p">,</span><span class="w"> </span><span class="nx">r</span><span class="p">.</span><span class="nx">URL</span><span class="p">.</span><span class="nx">Path</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="kd">func</span><span class="w"> </span><span class="nf">main</span><span class="p">()</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nx">http</span><span class="p">.</span><span class="nf">HandleFunc</span><span class="p">(</span><span class="s">&#34;/&#34;</span><span class="p">,</span><span class="w"> </span><span class="nx">handler</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nx">http</span><span class="p">.</span><span class="nf">ListenAndServe</span><span class="p">(</span><span class="s">&#34;:8080&#34;</span><span class="p">,</span><span class="w"> </span><span class="kc">nil</span><span class="p">)</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
</div>
<div class="code-block">
  <div class="code-head">
    <span class="code-file"></span>
    <span class="code-lang">Bash</span>
  </div>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">tmux <span class="nb">set</span> -g status-right <span class="s2">&#34;#[align=absolute-centre]#[fg=#f8f9f2]#W#[fg=#51cd97]#{?client_prefix,#[fg=#d0689d],#[fg=#51cd97]}.#[align=right]#{?window_bigger,[#{window_offset_x}#,#{window_offset_y}] ,}#[fg=#404040,underscore]#S#[none] &#34;</span>
</span></span><span class="line"><span class="cl">tmux <span class="nb">set</span> -g status-style <span class="s2">&#34;bg=#1f1f1f,fg=#f8f8f2&#34;</span>
</span></span><span class="line"><span class="cl">tmux <span class="nb">set</span> -g window-status-current-format <span class="s2">&#34;#{?client_prefix,#[fg=#d0689d],#[fg=#51cd97]}&#34;</span>
</span></span><span class="line"><span class="cl">tmux <span class="nb">set</span> -g window-status-format <span class="s2">&#34;#[fg=#404040]&#34;</span>
</span></span><span class="line"><span class="cl">tmux <span class="nb">set</span> -g status-left <span class="s1">&#39; &#39;</span>
</span></span><span class="line"><span class="cl">tmux set-window-option -g pane-border-style <span class="s2">&#34;fg=#404040&#34;</span>
</span></span><span class="line"><span class="cl">tmux set-window-option -g pane-active-border-style <span class="s2">&#34;fg=#51cd97&#34;</span></span></span></code></pre></div>
</div>
<p>Ex amet id ex aliquip id do laborum excepteur exercitation elit sint commodo occaecat nostrud est. Nostrud pariatur esse veniam laborum non sint magna sit laboris minim in id. Aliqua pariatur pariatur excepteur adipisicing irure culpa consequat commodo et ex id ad.</p>
<h2 id="diagrams">
  <a class="heading-link" href="#diagrams">Diagrams<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h2>
<p><a href="https://mermaid.js.org/">Mermaid</a> turns text into diagrams. A fenced code block with the <code>mermaid</code> language renders one, and so does the <code>mermaid</code> shortcode. Each diagram is rendered to an SVG at build time and inlined into the page, so no JavaScript ever ships and the site keeps its no-external-requests rule.</p>
<h3 id="flowchart">
  <a class="heading-link" href="#flowchart">Flowchart<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h3>
<p>The example below is this site&rsquo;s own deployment pipeline, end to end: a <code>git push</code> at the desk, through the homelab, out to the Cloudflare edge and finally into a reader&rsquo;s browser. The full story lives in <a href="https://wilhelm.codes/blog/my-blog-now-ships-from-my-homelab/">My Blog Now Ships From My Homelab!</a>.</p>
<figure class="diagram"><svg id="d-c99b82f2b5cf" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 630.789px; background-color: transparent;" viewBox="0 0 630.7890625 1462" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#d-c99b82f2b5cf{font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;font-size:14px;fill:#32d74b;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-c99b82f2b5cf .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-c99b82f2b5cf .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-c99b82f2b5cf .error-icon{fill:#202225;}#d-c99b82f2b5cf .error-text{fill:#e3e3de;stroke:#e3e3de;}#d-c99b82f2b5cf .edge-thickness-normal{stroke-width:1px;}#d-c99b82f2b5cf .edge-thickness-thick{stroke-width:3.5px;}#d-c99b82f2b5cf .edge-pattern-solid{stroke-dasharray:0;}#d-c99b82f2b5cf .edge-thickness-invisible{stroke-width:0;fill:none;}#d-c99b82f2b5cf .edge-pattern-dashed{stroke-dasharray:3;}#d-c99b82f2b5cf .edge-pattern-dotted{stroke-dasharray:2;}#d-c99b82f2b5cf .marker{fill:#8b8b84;stroke:#8b8b84;}#d-c99b82f2b5cf .marker.cross{stroke:#8b8b84;}#d-c99b82f2b5cf svg{font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;font-size:14px;}#d-c99b82f2b5cf p{margin:0;}#d-c99b82f2b5cf .label{font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;color:#32d74b;}#d-c99b82f2b5cf .cluster-label text{fill:#e3e3de;}#d-c99b82f2b5cf .cluster-label span{color:#e3e3de;}#d-c99b82f2b5cf .cluster-label span p{background-color:transparent;}#d-c99b82f2b5cf .label text,#d-c99b82f2b5cf span{fill:#32d74b;color:#32d74b;}#d-c99b82f2b5cf .node rect,#d-c99b82f2b5cf .node circle,#d-c99b82f2b5cf .node ellipse,#d-c99b82f2b5cf .node polygon,#d-c99b82f2b5cf .node path{fill:#1e1f22;stroke:#3c3f43;stroke-width:1px;}#d-c99b82f2b5cf .rough-node .label text,#d-c99b82f2b5cf .node .label text,#d-c99b82f2b5cf .image-shape .label,#d-c99b82f2b5cf .icon-shape .label{text-anchor:middle;}#d-c99b82f2b5cf .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#d-c99b82f2b5cf .rough-node .label,#d-c99b82f2b5cf .node .label,#d-c99b82f2b5cf .image-shape .label,#d-c99b82f2b5cf .icon-shape .label{text-align:center;}#d-c99b82f2b5cf .node.clickable{cursor:pointer;}#d-c99b82f2b5cf .root .anchor path{fill:#8b8b84!important;stroke-width:0;stroke:#8b8b84;}#d-c99b82f2b5cf .arrowheadPath{fill:#dfddda;}#d-c99b82f2b5cf .edgePaths .path{stroke:#8b8b84;stroke-width:1px;}#d-c99b82f2b5cf .flowchart-link{stroke:#8b8b84;fill:none;}#d-c99b82f2b5cf .edgeLabel{background-color:#1e1f22;text-align:center;}#d-c99b82f2b5cf .edgeLabel p{background-color:#1e1f22;}#d-c99b82f2b5cf .edgeLabel rect{opacity:0.5;background-color:#1e1f22;fill:#1e1f22;}#d-c99b82f2b5cf .labelBkg{background-color:rgba(30, 31, 34, 0.5);}#d-c99b82f2b5cf .cluster rect{fill:#202225;stroke:#2c2e31;stroke-width:1px;}#d-c99b82f2b5cf .cluster text{fill:#e3e3de;}#d-c99b82f2b5cf .cluster span{color:#e3e3de;}#d-c99b82f2b5cf .node .collapsed-indicator{fill:#2c2e31;stroke:none;opacity:0.6;}#d-c99b82f2b5cf .node .collapsed-separator{stroke:#2c2e31;stroke-width:0.75px;}#d-c99b82f2b5cf div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;font-size:12px;background:#202225;border:1px solid hsl(216, 0%, 23.5294117647%);border-radius:2px;pointer-events:none;z-index:100;}#d-c99b82f2b5cf .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#32d74b;}#d-c99b82f2b5cf rect.text{fill:none;stroke-width:0;}#d-c99b82f2b5cf .icon-shape,#d-c99b82f2b5cf .image-shape{background-color:#1e1f22;text-align:center;}#d-c99b82f2b5cf .icon-shape p,#d-c99b82f2b5cf .image-shape p{background-color:#1e1f22;padding:2px;}#d-c99b82f2b5cf .icon-shape .label rect,#d-c99b82f2b5cf .image-shape .label rect{opacity:0.5;background-color:#1e1f22;fill:#1e1f22;}#d-c99b82f2b5cf .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#d-c99b82f2b5cf .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#d-c99b82f2b5cf .node .neo-node{stroke:#3c3f43;}#d-c99b82f2b5cf [data-look="neo"].node rect,#d-c99b82f2b5cf [data-look="neo"].cluster rect,#d-c99b82f2b5cf [data-look="neo"].node polygon{stroke:url(#d-c99b82f2b5cf-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c99b82f2b5cf [data-look="neo"].swimlane.cluster rect{filter:none;}#d-c99b82f2b5cf [data-look="neo"].node path{stroke:url(#d-c99b82f2b5cf-gradient);stroke-width:1px;}#d-c99b82f2b5cf [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c99b82f2b5cf [data-look="neo"].node .neo-line path{stroke:#3c3f43;filter:none;}#d-c99b82f2b5cf [data-look="neo"].node circle{stroke:url(#d-c99b82f2b5cf-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c99b82f2b5cf [data-look="neo"].node circle .state-start{fill:#000000;}#d-c99b82f2b5cf [data-look="neo"].icon-shape .icon{fill:url(#d-c99b82f2b5cf-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c99b82f2b5cf [data-look="neo"].icon-shape .icon-neo path{stroke:url(#d-c99b82f2b5cf-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-c99b82f2b5cf :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g><marker id="d-c99b82f2b5cf_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="d-c99b82f2b5cf_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="d-c99b82f2b5cf_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="d-c99b82f2b5cf_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="d-c99b82f2b5cf_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="d-c99b82f2b5cf_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="d-c99b82f2b5cf_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="d-c99b82f2b5cf_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="d-c99b82f2b5cf_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="d-c99b82f2b5cf_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="d-c99b82f2b5cf_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="d-c99b82f2b5cf_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"><g class="cluster" id="d-c99b82f2b5cf-cloud" data-look="classic"><rect style="" x="272.7890625" y="1067" width="330" height="265"/><g class="cluster-label" transform="translate(395.640625, 1067)"><foreignObject width="84.296875" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>Cloudflare</p></span></div></foreignObject></g></g><g class="cluster" id="d-c99b82f2b5cf-lab" data-look="classic"><rect style="" x="8" y="172" width="614.7890625" height="803"/><g class="cluster-label" transform="translate(151.02734375, 172)"><foreignObject width="328.734375" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>The homelab ( accepts nothing inbound )</p></span></div></foreignObject></g></g><g class="cluster" id="d-c99b82f2b5cf-pipeline" data-look="classic"><rect style="" x="272.7890625" y="462" width="330" height="488"/><g class="cluster-label" transform="translate(311.3515625, 462)"><foreignObject width="252.875" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5;"><span class="nodeLabel"><p>Woodpecker agent, one pipeline</p></span></div></foreignObject></g></g></g><g class="edgePaths"><path d="M247.27,80L234.892,87.667C222.513,95.333,197.757,110.667,185.378,126C173,141.333,173,156.667,173,167.833C173,179,173,186,173,189.5L173,193" id="d-c99b82f2b5cf-L_dev_dns_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_dev_dns_0" data-points="W3sieCI6MjQ3LjI3MDEwMjg5NjM0MTQ2LCJ5Ijo4MH0seyJ4IjoxNzMsInkiOjEyNn0seyJ4IjoxNzMsInkiOjE3Mn0seyJ4IjoxNzMsInkiOjE5N31d" data-look="classic" marker-end="url(#d-c99b82f2b5cf_flowchart-v2-pointEnd)"/><path d="M363.519,80L375.897,87.667C388.276,95.333,413.032,110.667,425.411,126C437.789,141.333,437.789,156.667,437.789,169.583C437.789,182.5,437.789,193,437.789,198.25L437.789,203.5" id="d-c99b82f2b5cf-L_dev_forge_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_dev_forge_0" data-points="W3sieCI6MzYzLjUxODk1OTYwMzY1ODUsInkiOjgwfSx7IngiOjQzNy43ODkwNjI1LCJ5IjoxMjZ9LHsieCI6NDM3Ljc4OTA2MjUsInkiOjE3Mn0seyJ4Ijo0MzcuNzg5MDYyNSwieSI6MjA3LjV9XQ==" data-look="classic" marker-end="url(#d-c99b82f2b5cf_flowchart-v2-pointEnd)"/><path d="M437.789,258.5L437.789,266.167C437.789,273.833,437.789,289.167,437.789,302.083C437.789,315,437.789,325.5,437.789,330.75L437.789,336" id="d-c99b82f2b5cf-L_forge_server_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_forge_server_0" data-points="W3sieCI6NDM3Ljc4OTA2MjUsInkiOjI1OC41fSx7IngiOjQzNy43ODkwNjI1LCJ5IjozMDQuNX0seyJ4Ijo0MzcuNzg5MDYyNSwieSI6MzQwfV0=" data-look="classic" marker-end="url(#d-c99b82f2b5cf_flowchart-v2-pointEnd)"/><path d="M437.789,391L437.789,396.917C437.789,402.833,437.789,414.667,437.789,426.5C437.789,438.333,437.789,450.167,437.789,459.583C437.789,469,437.789,476,437.789,479.5L437.789,483" id="d-c99b82f2b5cf-L_server_clone_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_server_clone_0" data-points="W3sieCI6NDM3Ljc4OTA2MjUsInkiOjM5MX0seyJ4Ijo0MzcuNzg5MDYyNSwieSI6NDI2LjV9LHsieCI6NDM3Ljc4OTA2MjUsInkiOjQ2Mn0seyJ4Ijo0MzcuNzg5MDYyNSwieSI6NDg3fV0=" data-look="classic" marker-end="url(#d-c99b82f2b5cf_flowchart-v2-pointEnd)"/><path d="M437.789,559L437.789,563.167C437.789,567.333,437.789,575.667,437.789,583.333C437.789,591,437.789,598,437.789,601.5L437.789,605" id="d-c99b82f2b5cf-L_clone_changelog_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_clone_changelog_0" data-points="W3sieCI6NDM3Ljc4OTA2MjUsInkiOjU1OX0seyJ4Ijo0MzcuNzg5MDYyNSwieSI6NTg0fSx7IngiOjQzNy43ODkwNjI1LCJ5Ijo2MDl9XQ==" data-look="classic" marker-end="url(#d-c99b82f2b5cf_flowchart-v2-pointEnd)"/><path d="M437.789,681L437.789,685.167C437.789,689.333,437.789,697.667,437.789,705.333C437.789,713,437.789,720,437.789,723.5L437.789,727" id="d-c99b82f2b5cf-L_changelog_build_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_changelog_build_0" data-points="W3sieCI6NDM3Ljc4OTA2MjUsInkiOjY4MX0seyJ4Ijo0MzcuNzg5MDYyNSwieSI6NzA2fSx7IngiOjQzNy43ODkwNjI1LCJ5Ijo3MzF9XQ==" data-look="classic" marker-end="url(#d-c99b82f2b5cf_flowchart-v2-pointEnd)"/><path d="M437.789,803L437.789,807.167C437.789,811.333,437.789,819.667,437.789,827.333C437.789,835,437.789,842,437.789,845.5L437.789,849" id="d-c99b82f2b5cf-L_build_deploy_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_build_deploy_0" data-points="W3sieCI6NDM3Ljc4OTA2MjUsInkiOjgwM30seyJ4Ijo0MzcuNzg5MDYyNSwieSI6ODI4fSx7IngiOjQzNy43ODkwNjI1LCJ5Ijo4NTN9XQ==" data-look="classic" marker-end="url(#d-c99b82f2b5cf_flowchart-v2-pointEnd)"/><path d="M437.789,925L437.789,929.167C437.789,933.333,437.789,941.667,437.789,950C437.789,958.333,437.789,966.667,437.789,978.5C437.789,990.333,437.789,1005.667,437.789,1021C437.789,1036.333,437.789,1051.667,437.789,1062.833C437.789,1074,437.789,1081,437.789,1084.5L437.789,1088" id="d-c99b82f2b5cf-L_deploy_pages_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_deploy_pages_0" data-points="W3sieCI6NDM3Ljc4OTA2MjUsInkiOjkyNX0seyJ4Ijo0MzcuNzg5MDYyNSwieSI6OTUwfSx7IngiOjQzNy43ODkwNjI1LCJ5Ijo5NzV9LHsieCI6NDM3Ljc4OTA2MjUsInkiOjEwMjF9LHsieCI6NDM3Ljc4OTA2MjUsInkiOjEwNjd9LHsieCI6NDM3Ljc4OTA2MjUsInkiOjEwOTJ9XQ==" data-look="classic" marker-end="url(#d-c99b82f2b5cf_flowchart-v2-pointEnd)"/><path d="M437.789,1185L437.789,1189.167C437.789,1193.333,437.789,1201.667,437.789,1209.333C437.789,1217,437.789,1224,437.789,1227.5L437.789,1231" id="d-c99b82f2b5cf-L_pages_edge_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_pages_edge_0" data-points="W3sieCI6NDM3Ljc4OTA2MjUsInkiOjExODV9LHsieCI6NDM3Ljc4OTA2MjUsInkiOjEyMTB9LHsieCI6NDM3Ljc4OTA2MjUsInkiOjEyMzV9XQ==" data-look="classic" marker-end="url(#d-c99b82f2b5cf_flowchart-v2-pointEnd)"/><path d="M437.789,1307L437.789,1311.167C437.789,1315.333,437.789,1323.667,437.789,1333.75C437.789,1343.833,437.789,1355.667,437.789,1366.833C437.789,1378,437.789,1388.5,437.789,1393.75L437.789,1399" id="d-c99b82f2b5cf-L_edge_reader_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_edge_reader_0" data-points="W3sieCI6NDM3Ljc4OTA2MjUsInkiOjEzMDd9LHsieCI6NDM3Ljc4OTA2MjUsInkiOjEzMzJ9LHsieCI6NDM3Ljc4OTA2MjUsInkiOjEzNjcuNX0seyJ4Ijo0MzcuNzg5MDYyNSwieSI6MTQwM31d" data-look="classic" marker-end="url(#d-c99b82f2b5cf_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(173, 126)"><g class="label" data-id="L_dev_dns_0" transform="translate(-100, -21)"><foreignObject width="200" height="42"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="edgeLabel"><p>name lookup, internal answer</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(437.7890625, 126)"><g class="label" data-id="L_dev_forge_0" transform="translate(-12.6484375, -10.5)"><foreignObject width="25.296875" height="21"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>ssh</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(437.7890625, 304.5)"><g class="label" data-id="L_forge_server_0" transform="translate(-29.5078125, -10.5)"><foreignObject width="59.015625" height="21"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>webhook</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(437.7890625, 426.5)"><g class="label" data-id="L_server_clone_0" transform="translate(-59.0078125, -10.5)"><foreignObject width="118.015625" height="21"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>queues the job</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_clone_changelog_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_changelog_build_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_build_deploy_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(437.7890625, 1021)"><g class="label" data-id="L_deploy_pages_0" transform="translate(-100, -21)"><foreignObject width="200" height="42"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="edgeLabel"><p>outbound only, token scoped to Pages: Edit</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_pages_edge_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(437.7890625, 1367.5)"><g class="label" data-id="L_edge_reader_0" transform="translate(-88.5078125, -10.5)"><foreignObject width="177.015625" height="21"><div xmlns="http://www.w3.org/1999/xhtml" class="labelBkg" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="edgeLabel"><p>https://wilhelm.codes</p></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default" id="d-c99b82f2b5cf-flowchart-dev-0" data-look="classic" transform="translate(305.39453125, 44)"><rect class="basic label-container" style="" x="-130" y="-36" width="260" height="72"/><g class="label" style="" transform="translate(-100, -21)"><rect/><foreignObject width="200" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>The desk: git push to main</p></span></div></foreignObject></g></g><g class="node default" id="d-c99b82f2b5cf-flowchart-dns-1" data-look="classic" transform="translate(173, 233)"><rect class="basic label-container" style="" x="-130" y="-36" width="260" height="72"/><g class="label" style="" transform="translate(-100, -21)"><rect/><foreignObject width="200" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>Technitium DNS x3 ( split-horizon )</p></span></div></foreignObject></g></g><g class="node default" id="d-c99b82f2b5cf-flowchart-forge-2" data-look="classic" transform="translate(437.7890625, 233)"><rect class="basic label-container" style="" x="-84.7890625" y="-25.5" width="169.578125" height="51"/><g class="label" style="" transform="translate(-54.7890625, -10.5)"><rect/><foreignObject width="109.578125" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Forgejo forge</p></span></div></foreignObject></g></g><g class="node default" id="d-c99b82f2b5cf-flowchart-server-3" data-look="classic" transform="translate(437.7890625, 365.5)"><rect class="basic label-container" style="" x="-101.6484375" y="-25.5" width="203.296875" height="51"/><g class="label" style="" transform="translate(-71.6484375, -10.5)"><rect/><foreignObject width="143.296875" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>Woodpecker server</p></span></div></foreignObject></g></g><g class="node default" id="d-c99b82f2b5cf-flowchart-clone-4" data-look="classic" transform="translate(437.7890625, 523)"><rect class="basic label-container" style="" x="-130" y="-36" width="260" height="72"/><g class="label" style="" transform="translate(-100, -21)"><rect/><foreignObject width="200" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>Full clone ( partial: false, tags: true )</p></span></div></foreignObject></g></g><g class="node default" id="d-c99b82f2b5cf-flowchart-changelog-5" data-look="classic" transform="translate(437.7890625, 645)"><rect class="basic label-container" style="" x="-130" y="-36" width="260" height="72"/><g class="label" style="" transform="translate(-100, -21)"><rect/><foreignObject width="200" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>bin/changelog writes data/changelog.json</p></span></div></foreignObject></g></g><g class="node default" id="d-c99b82f2b5cf-flowchart-build-6" data-look="classic" transform="translate(437.7890625, 767)"><rect class="basic label-container" style="" x="-130" y="-36" width="260" height="72"/><g class="label" style="" transform="translate(-100, -21)"><rect/><foreignObject width="200" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>hugo --gc builds public/</p></span></div></foreignObject></g></g><g class="node default" id="d-c99b82f2b5cf-flowchart-deploy-7" data-look="classic" transform="translate(437.7890625, 889)"><rect class="basic label-container" style="" x="-130" y="-36" width="260" height="72"/><g class="label" style="" transform="translate(-100, -21)"><rect/><foreignObject width="200" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>npx wrangler pages deploy public</p></span></div></foreignObject></g></g><g class="node default" id="d-c99b82f2b5cf-flowchart-pages-8" data-look="classic" transform="translate(437.7890625, 1138.5)"><rect class="basic label-container" style="" x="-130" y="-46.5" width="260" height="93"/><g class="label" style="" transform="translate(-100, -31.5)"><rect/><foreignObject width="200" height="63"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>Pages project ( direct upload, production branch: main )</p></span></div></foreignObject></g></g><g class="node default" id="d-c99b82f2b5cf-flowchart-edge-9" data-look="classic" transform="translate(437.7890625, 1271)"><rect class="basic label-container" style="" x="-130" y="-36" width="260" height="72"/><g class="label" style="" transform="translate(-100, -21)"><rect/><foreignObject width="200" height="42"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;"><span class="nodeLabel"><p>Edge cache, serves the last good deploy</p></span></div></foreignObject></g></g><g class="node default" id="d-c99b82f2b5cf-flowchart-reader-10" data-look="classic" transform="translate(437.7890625, 1428.5)"><rect class="basic label-container" style="" x="-110.078125" y="-25.5" width="220.15625" height="51"/><g class="label" style="" transform="translate(-80.078125, -10.5)"><rect/><foreignObject width="160.15625" height="21"><div xmlns="http://www.w3.org/1999/xhtml" style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;"><span class="nodeLabel"><p>A reader, allegedly</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="d-c99b82f2b5cf-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="d-c99b82f2b5cf-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><linearGradient id="d-c99b82f2b5cf-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" stop-color="#3c3f43" stop-opacity="1"/><stop offset="100%" stop-color="hsl(216, 0%, 23.5294117647%)" stop-opacity="1"/></linearGradient></svg></figure>
<h3 id="sequence">
  <a class="heading-link" href="#sequence">Sequence<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h3>
<p>The same pipeline again, compressed into a handshake. This one is a plain <code>mermaid</code> fence instead of the shortcode. Both forms render the same way.</p>
<figure class="diagram"><svg id="d-fbe8de6d2e78" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="max-width: 865px; background-color: transparent;" viewBox="-50 -10 865 421" role="graphics-document document" aria-roledescription="sequence"><g><rect x="615" y="335" fill="#eaeaea" stroke="#666" width="150" height="65" name="C" rx="3" ry="3" class="actor actor-bottom"/><text x="690" y="367.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="690" dy="0">Cloudflare Pages</tspan></text></g><g><rect x="400" y="335" fill="#eaeaea" stroke="#666" width="150" height="65" name="W" rx="3" ry="3" class="actor actor-bottom"/><text x="475" y="367.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="475" dy="0">Woodpecker</tspan></text></g><g><rect x="200" y="335" fill="#eaeaea" stroke="#666" width="150" height="65" name="F" rx="3" ry="3" class="actor actor-bottom"/><text x="275" y="367.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="275" dy="0">Forgejo</tspan></text></g><g><rect x="0" y="335" fill="#eaeaea" stroke="#666" width="150" height="65" name="D" rx="3" ry="3" class="actor actor-bottom"/><text x="75" y="367.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="75" dy="0">The desk</tspan></text></g><g><line id="actor3" x1="690" y1="65" x2="690" y2="335" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="C" data-et="life-line" data-id="C"/><g id="root-3" data-et="participant" data-type="participant" data-id="C"><rect x="615" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="C" rx="3" ry="3" class="actor actor-top"/><text x="690" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="690" dy="0">Cloudflare Pages</tspan></text></g></g><g><line id="actor2" x1="475" y1="65" x2="475" y2="335" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="W" data-et="life-line" data-id="W"/><g id="root-2" data-et="participant" data-type="participant" data-id="W"><rect x="400" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="W" rx="3" ry="3" class="actor actor-top"/><text x="475" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="475" dy="0">Woodpecker</tspan></text></g></g><g><line id="actor1" x1="275" y1="65" x2="275" y2="335" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="F" data-et="life-line" data-id="F"/><g id="root-1" data-et="participant" data-type="participant" data-id="F"><rect x="200" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="F" rx="3" ry="3" class="actor actor-top"/><text x="275" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="275" dy="0">Forgejo</tspan></text></g></g><g><line id="actor0" x1="75" y1="65" x2="75" y2="335" class="actor-line 200" stroke-width="0.5px" stroke="#999" name="D" data-et="life-line" data-id="D"/><g id="root-0" data-et="participant" data-type="participant" data-id="D"><rect x="0" y="0" fill="#eaeaea" stroke="#666" width="150" height="65" name="D" rx="3" ry="3" class="actor actor-top"/><text x="75" y="32.5" dominant-baseline="central" alignment-baseline="central" class="actor actor-box" style="text-anchor: middle; font-size: 16px; font-weight: 400;"><tspan x="75" dy="0">The desk</tspan></text></g></g><style>#d-fbe8de6d2e78{font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;font-size:14px;fill:#32d74b;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#d-fbe8de6d2e78 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#d-fbe8de6d2e78 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#d-fbe8de6d2e78 .error-icon{fill:#202225;}#d-fbe8de6d2e78 .error-text{fill:#e3e3de;stroke:#e3e3de;}#d-fbe8de6d2e78 .edge-thickness-normal{stroke-width:1px;}#d-fbe8de6d2e78 .edge-thickness-thick{stroke-width:3.5px;}#d-fbe8de6d2e78 .edge-pattern-solid{stroke-dasharray:0;}#d-fbe8de6d2e78 .edge-thickness-invisible{stroke-width:0;fill:none;}#d-fbe8de6d2e78 .edge-pattern-dashed{stroke-dasharray:3;}#d-fbe8de6d2e78 .edge-pattern-dotted{stroke-dasharray:2;}#d-fbe8de6d2e78 .marker{fill:#8b8b84;stroke:#8b8b84;}#d-fbe8de6d2e78 .marker.cross{stroke:#8b8b84;}#d-fbe8de6d2e78 svg{font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;font-size:14px;}#d-fbe8de6d2e78 p{margin:0;}#d-fbe8de6d2e78 .actor{stroke:#3c3f43;fill:#1e1f22;stroke-width:1;}#d-fbe8de6d2e78 rect.actor.outer-path[data-look="neo"]{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-fbe8de6d2e78 rect.note[data-look="neo"]{stroke:hsl(52.6829268293, 60%, 93.9215686275%);fill:#fff5ad;filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-fbe8de6d2e78 text.actor&gt;tspan{fill:#32d74b;stroke:none;}#d-fbe8de6d2e78 .actor-line{stroke:#8b8b84;}#d-fbe8de6d2e78 .innerArc{stroke-width:1.5;stroke-dasharray:none;}#d-fbe8de6d2e78 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#8b8b84;}#d-fbe8de6d2e78 .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#8b8b84;}#d-fbe8de6d2e78 [id$="-arrowhead"] path{fill:#8b8b84;stroke:#8b8b84;}#d-fbe8de6d2e78 .sequenceNumber{fill:#74747b;}#d-fbe8de6d2e78 [id$="-sequencenumber"]{fill:#8b8b84;}#d-fbe8de6d2e78 [id$="-crosshead"] path{fill:#8b8b84;stroke:#8b8b84;}#d-fbe8de6d2e78 .messageText{fill:#32d74b;stroke:none;}#d-fbe8de6d2e78 .labelBox{stroke:#3c3f43;fill:#1e1f22;filter:none;}#d-fbe8de6d2e78 .labelText,#d-fbe8de6d2e78 .labelText&gt;tspan{fill:#32d74b;stroke:none;}#d-fbe8de6d2e78 .loopText,#d-fbe8de6d2e78 .loopText&gt;tspan{fill:#32d74b;stroke:none;}#d-fbe8de6d2e78 .sectionTitle,#d-fbe8de6d2e78 .sectionTitle&gt;tspan{fill:#32d74b;stroke:none;}#d-fbe8de6d2e78 .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:#3c3f43;fill:#3c3f43;}#d-fbe8de6d2e78 .note{stroke:hsl(52.6829268293, 60%, 93.9215686275%);fill:#fff5ad;}#d-fbe8de6d2e78 .noteText,#d-fbe8de6d2e78 .noteText&gt;tspan{fill:#333;stroke:none;font-weight:normal;}#d-fbe8de6d2e78 .activation0{fill:#202225;stroke:hsl(216, 7.2463768116%, 3.5294117647%);}#d-fbe8de6d2e78 .activation1{fill:#202225;stroke:hsl(216, 7.2463768116%, 3.5294117647%);}#d-fbe8de6d2e78 .activation2{fill:#202225;stroke:hsl(216, 7.2463768116%, 3.5294117647%);}#d-fbe8de6d2e78 .actorPopupMenu{position:absolute;}#d-fbe8de6d2e78 .actorPopupMenuPanel{position:absolute;fill:#1e1f22;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#d-fbe8de6d2e78 .actor-man circle,#d-fbe8de6d2e78 line{fill:#1e1f22;stroke-width:2px;}#d-fbe8de6d2e78 g rect.rect{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));stroke:#3c3f43;}#d-fbe8de6d2e78 .node .neo-node{stroke:#3c3f43;}#d-fbe8de6d2e78 [data-look="neo"].node rect,#d-fbe8de6d2e78 [data-look="neo"].cluster rect,#d-fbe8de6d2e78 [data-look="neo"].node polygon{stroke:url(#d-fbe8de6d2e78-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-fbe8de6d2e78 [data-look="neo"].swimlane.cluster rect{filter:none;}#d-fbe8de6d2e78 [data-look="neo"].node path{stroke:url(#d-fbe8de6d2e78-gradient);stroke-width:1px;}#d-fbe8de6d2e78 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-fbe8de6d2e78 [data-look="neo"].node .neo-line path{stroke:#3c3f43;filter:none;}#d-fbe8de6d2e78 [data-look="neo"].node circle{stroke:url(#d-fbe8de6d2e78-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-fbe8de6d2e78 [data-look="neo"].node circle .state-start{fill:#000000;}#d-fbe8de6d2e78 [data-look="neo"].icon-shape .icon{fill:url(#d-fbe8de6d2e78-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-fbe8de6d2e78 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#d-fbe8de6d2e78-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#d-fbe8de6d2e78 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}</style><g/><defs><symbol id="d-fbe8de6d2e78-computer" width="24" height="24"><path transform="scale(.5)" d="M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"/></symbol></defs><defs><symbol id="d-fbe8de6d2e78-database" fill-rule="evenodd" clip-rule="evenodd"><path transform="scale(.5)" d="M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z"/></symbol></defs><defs><symbol id="d-fbe8de6d2e78-clock" width="24" height="24"><path transform="scale(.5)" d="M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z"/></symbol></defs><defs><marker id="d-fbe8de6d2e78-arrowhead" refX="7.9" refY="5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M -1 0 L 10 5 L 0 10 z"/></marker></defs><defs><marker id="d-fbe8de6d2e78-crosshead" markerWidth="15" markerHeight="8" orient="auto" refX="4" refY="4.5"><path fill="none" stroke="#000000" stroke-width="1pt" d="M 1,2 L 6,7 M 6,2 L 1,7" style="stroke-dasharray: 0, 0;"/></marker></defs><defs><marker id="d-fbe8de6d2e78-filled-head" refX="15.5" refY="7" markerWidth="20" markerHeight="28" orient="auto"><path d="M 18,7 L9,13 L14,7 L9,1 Z"/></marker></defs><defs><marker id="d-fbe8de6d2e78-sequencenumber" refX="15" refY="15" markerWidth="60" markerHeight="40" orient="auto"><circle cx="15" cy="15" r="6"/></marker></defs><defs><marker id="d-fbe8de6d2e78-solidTopArrowHead" refX="7.9" refY="7.25" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 10 8 L 0 8 z"/></marker></defs><defs><marker id="d-fbe8de6d2e78-solidBottomArrowHead" refX="7.9" refY="0.75" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 10 0 L 0 8 z"/></marker></defs><defs><marker id="d-fbe8de6d2e78-stickTopArrowHead" refX="7.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 0 L 7 7" stroke="black" stroke-width="1.5" fill="none"/></marker></defs><defs><marker id="d-fbe8de6d2e78-stickBottomArrowHead" refX="7.5" refY="0" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto-start-reverse"><path d="M 0 7 L 7 0" stroke="black" stroke-width="1.5" fill="none"/></marker></defs><text x="174" y="80" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">git push ( main )</text><line x1="76" y1="109" x2="271" y2="109" class="messageLine0" data-et="message" data-id="i0" data-from="D" data-to="F" stroke-width="2" stroke="none" marker-end="url(#d-fbe8de6d2e78-arrowhead)" style="fill: none;"/><text x="374" y="124" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">webhook</text><line x1="276" y1="153" x2="471" y2="153" class="messageLine0" data-et="message" data-id="i1" data-from="F" data-to="W" stroke-width="2" stroke="none" marker-end="url(#d-fbe8de6d2e78-arrowhead)" style="fill: none;"/><text x="476" y="168" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">clone, changelog, hugo --gc</text><path d="M 476,197 C 536,187 536,227 476,217" class="messageLine0" data-et="message" data-id="i2" data-from="W" data-to="W" stroke-width="2" stroke="none" marker-end="url(#d-fbe8de6d2e78-arrowhead)" style="fill: none;"/><text x="581" y="242" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">wrangler pages deploy</text><line x1="476" y1="271" x2="686" y2="271" class="messageLine0" data-et="message" data-id="i3" data-from="W" data-to="C" stroke-width="2" stroke="none" marker-end="url(#d-fbe8de6d2e78-arrowhead)" style="fill: none;"/><text x="384" y="286" text-anchor="middle" dominant-baseline="middle" alignment-baseline="middle" class="messageText" dy="1em" style="font-size: 16px; font-weight: 400;">the same site, but newer</text><line x1="689" y1="315" x2="79" y2="315" class="messageLine1" data-et="message" data-id="i4" data-from="C" data-to="D" stroke-width="2" stroke="none" marker-end="url(#d-fbe8de6d2e78-arrowhead)" style="stroke-dasharray: 3, 3; fill: none;"/></svg></figure><h2 id="inline-elements">
  <a class="heading-link" href="#inline-elements">Inline elements<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h2>
<p>Sint ea anim ipsum ad commodo cupidatat do <strong>exercitation</strong> incididunt et minim ad labore sunt. Minim deserunt labore laboris velit nulla incididunt ipsum nulla. Ullamco ad laborum ea qui et anim in laboris exercitation tempor sit officia laborum reprehenderit culpa velit quis. <strong>Consequat commodo</strong> reprehenderit duis <a href="#!">irure</a> esse esse exercitation minim enim Lorem dolore duis irure. Nisi Lorem reprehenderit ea amet excepteur dolor excepteur magna labore proident voluptate ipsum. Reprehenderit ex esse deserunt aliqua ea officia mollit Lorem nulla magna enim. Et ad ipsum labore enim ipsum <strong>cupidatat consequat</strong>. Commodo non ea cupidatat magna deserunt dolore ipsum velit nulla elit veniam nulla eiusmod proident officia.</p>
<p><img
  src="https://wilhelm.codes/blog/markdown/city-above_hu_5649e0e90a2a3de4.webp"
  srcset="/blog/markdown/city-above_hu_5649e0e90a2a3de4.webp 736w, /blog/markdown/city-above_hu_155d0a5ddcc6b38d.webp 1104w"
  sizes="(max-width: 48rem) 100vw, 736px"
  width="736"
  height="414"
  alt="A city from above at night"
  
  loading="lazy"
  decoding="async"
/>
</p>
<p><em>Proident sit veniam in est proident officia adipisicing</em> ea tempor cillum non cillum velit deserunt. Voluptate laborum incididunt sit consectetur Lorem irure incididunt voluptate nostrud. Commodo ut eiusmod tempor cupidatat esse enim minim ex anim consequat. Mollit sint culpa qui laboris quis consectetur ad sint esse. Amet anim anim minim ullamco et duis non irure. Sit tempor adipisicing ea laboris <code>culpa ex duis sint</code> anim aute reprehenderit id eu ea. Aute <a href="#!">excepteur proident</a> Lorem minim adipisicing nostrud mollit ad ut voluptate do nulla esse occaecat aliqua sint anim.</p>
<p>Incididunt in culpa cupidatat mollit cillum qui proident sit. In cillum aliquip incididunt voluptate magna amet cupidatat cillum pariatur sint aliqua est <em>enim <strong>anim</strong> voluptate</em>. Magna aliquip proident incididunt id duis pariatur eiusmod incididunt commodo culpa dolore sit. Culpa do nostrud elit ad exercitation anim pariatur non minim nisi <strong>adipisicing sunt <em>officia</em></strong>. Do deserunt magna mollit Lorem commodo ipsum do cupidatat mollit enim ut elit veniam ea voluptate.</p>
<p>Reprehenderit non eu quis in ad elit esse qui aute id <a href="#!">incididunt</a> dolore cillum. Esse laboris consequat dolor anim exercitation tempor aliqua deserunt velit magna laboris. Culpa culpa minim duis amet mollit do quis amet commodo nulla irure.</p>
<h2 id="callouts">
  <a class="heading-link" href="#callouts">Callouts<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h2>
<p>Nostrud ex consequat id incididunt proident ipsum minim duis aliqua ut ex et ad quis.</p>
<div class="callout callout-notice">
  A notice. Duis duis est velit velit aute culpa ex quis pariatur laborum aute pariatur.
</div>

<div class="callout callout-info">
  Some information. Excepteur velit nisi magna ea pariatur ullamco fugiat deserunt sint.
</div>

<div class="callout callout-warning">
  A warning. Anim magna dolor eiusmod esse amet aute cupidatat aliqua do id voluptate.
</div>

<div class="callout callout-error">
  An error. Irure magna voluptate dolore consectetur consectetur irure esse.
</div>

<h2 id="images">
  <a class="heading-link" href="#images">Images<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h2>
<p>Every image on this page is <a href="https://unsplash.com/">Unsplash</a> stock, hosted here so the site keeps its no-external-requests rule. Click any of them to zoom in. Click again, or press Escape, to put it back.</p>
<h3 id="single">
  <a class="heading-link" href="#single">Single<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h3>
<p>A lone image takes the <code>img</code> shortcode: a figure, an optional attribution underneath and the zoom.</p>
<figure class="img-single">
    <button type="button" class="zoom" aria-label="Zoom image: A wet street at night in Tokyo, neon signs reflecting on the pavement">
      <img
  src="https://wilhelm.codes/blog/markdown/tokyo-street_hu_e5c50287801d328c.webp"
  srcset="/blog/markdown/tokyo-street_hu_e5c50287801d328c.webp 736w, /blog/markdown/tokyo-street_hu_ba568f598d59a3f9.webp 1104w"
  sizes="(max-width: 48rem) 100vw, 736px"
  width="736"
  height="1103"
  alt="A wet street at night in Tokyo, neon signs reflecting on the pavement"
  loading="lazy"
  decoding="async"
  data-full="/blog/markdown/tokyo-street_hu_784bc02980fe6a3e.webp"
  data-credit="Photo by Valentin BEAUVAIS on Unsplash"
  data-credit-href="https://unsplash.com/photos/wet-street-at-night-in-tokyo-yVUQlyRlJSw"
/>

    </button>
    
      <figcaption>
        
          <a href="https://unsplash.com/photos/wet-street-at-night-in-tokyo-yVUQlyRlJSw" target="_blank" rel="noopener">Photo by Valentin BEAUVAIS on Unsplash</a>
        
      </figcaption>
    
  </figure>
<p>Aute officia nulla deserunt do deserunt cillum velit magna. Officia veniam culpa anim minim dolore labore pariatur voluptate id ad est duis quis velit dolor pariatur enim.</p>
<h3 id="strip">
  <a class="heading-link" href="#strip">Strip<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h3>
<p>A run of images scrolls sideways in the <code>strip</code> shortcode. Each image keeps its own zoom, and its credit follows it into the lightbox.</p>
<div class="strip">
  
  <button type="button" class="zoom" aria-label="Zoom image: Red neon signs reflected in a street puddle">
      <img
    src="https://wilhelm.codes/blog/markdown/neon-puddle_hu_7b6d6f59e5ddfc10.webp"
    srcset="/blog/markdown/neon-puddle_hu_7b6d6f59e5ddfc10.webp 1x, /blog/markdown/neon-puddle_hu_3647ba2eb6e24731.webp 2x"
    
    width="336"
    height="224"
    alt="Red neon signs reflected in a street puddle"
    loading="lazy"
    decoding="async"
    data-full="/blog/markdown/neon-puddle_hu_ff42f54c862d30e7.webp"
    data-credit="Photo by cheng feng on Unsplash"
    data-credit-href="https://unsplash.com/photos/neon-street-reflection-in-night-puddle-4pTY4ty7jXM"
  />
  
    </button>
  <button type="button" class="zoom" aria-label="Zoom image: A city from above at night">
      <img
    src="https://wilhelm.codes/blog/markdown/city-above_hu_3d2045a0494e4370.webp"
    srcset="/blog/markdown/city-above_hu_3d2045a0494e4370.webp 1x, /blog/markdown/city-above_hu_df60f704bb22bbba.webp 2x"
    
    width="398"
    height="224"
    alt="A city from above at night"
    loading="lazy"
    decoding="async"
    data-full="/blog/markdown/city-above_hu_56bb6d6a477e88e7.webp"
    data-credit="Photo by Francois Hoang on Unsplash"
    data-credit-href="https://unsplash.com/photos/high-angle-photography-of-city-during-nighttime-MFYlCoSm-0o"
  />
  
    </button>
  <button type="button" class="zoom" aria-label="Zoom image: People walking through a neon walkway at night">
      <img
    src="https://wilhelm.codes/blog/markdown/walkway_hu_b24822e8741b3d78.webp"
    srcset="/blog/markdown/walkway_hu_b24822e8741b3d78.webp 1x, /blog/markdown/walkway_hu_824953d065f58427.webp 2x"
    
    width="336"
    height="224"
    alt="People walking through a neon walkway at night"
    loading="lazy"
    decoding="async"
    data-full="/blog/markdown/walkway_hu_7016b54a2c5bbc52.webp"
    data-credit="Photo by kevin laminto on Unsplash"
    data-credit-href="https://unsplash.com/photos/people-walking-on-walkway-during-nighttime-7PqRZK6rbaE"
  />
  
    </button>
  <button type="button" class="zoom" aria-label="Zoom image: A crowded street at night">
      <img
    src="https://wilhelm.codes/blog/markdown/night-crowd_hu_e5982ecec0b9b59e.webp"
    srcset="/blog/markdown/night-crowd_hu_e5982ecec0b9b59e.webp 1x, /blog/markdown/night-crowd_hu_2a16cc909794e2ae.webp 2x"
    
    width="149"
    height="224"
    alt="A crowded street at night"
    loading="lazy"
    decoding="async"
    data-full="/blog/markdown/night-crowd_hu_35abd7f5b2b88018.webp"
    data-credit="Photo by Harrison Qi on Unsplash"
    data-credit-href="https://unsplash.com/photos/people-walking-on-street-during-nighttime-ce-K_rj1P7U"
  />
  
    </button>
  <button type="button" class="zoom" aria-label="Zoom image: Night traffic between high-rise buildings">
      <img
    src="https://wilhelm.codes/blog/markdown/night-traffic_hu_c8b96f20fb90ea41.webp"
    srcset="/blog/markdown/night-traffic_hu_c8b96f20fb90ea41.webp 1x, /blog/markdown/night-traffic_hu_abe8f08cc3fcb6c0.webp 2x"
    
    width="149"
    height="224"
    alt="Night traffic between high-rise buildings"
    loading="lazy"
    decoding="async"
    data-full="/blog/markdown/night-traffic_hu_c356e8d14ec539d5.webp"
    data-credit="Photo by Stéphan Valentin on Unsplash"
    data-credit-href="https://unsplash.com/photos/vehicles-on-road-near-high-rise-buildings-oqYLdbuJDQU"
  />
  
    </button>

</div>

<p>Labore ea magna Lorem consequat aliquip consectetur cillum duis dolore. Et veniam dolor qui incididunt minim amet laboris sit.</p>
<h3 id="masonry">
  <a class="heading-link" href="#masonry">Masonry<span class="heading-anchor" aria-hidden="true">#</span>
  </a>
</h3>
<p>The <code>masonry</code> shortcode packs a wall of mixed heights into columns. Same zoom, same credits.</p>
<div class="masonry">
  
  <button type="button" class="zoom" aria-label="Zoom image: A vintage grey game console and joystick on a magenta background">
      <img
    src="https://wilhelm.codes/blog/markdown/console_hu_9f8704775736b8c4.webp"
    srcset="/blog/markdown/console_hu_9f8704775736b8c4.webp 232w, /blog/markdown/console_hu_85d24f50a46dd7b6.webp 464w, /blog/markdown/console_hu_fa24477c2b0f7c11.webp 696w"
    sizes="(max-width: 40rem) 50vw, 232px"
    width="232"
    height="155"
    alt="A vintage grey game console and joystick on a magenta background"
    loading="lazy"
    decoding="async"
    data-full="/blog/markdown/console_hu_12e3b3a05e270cdb.webp"
    data-credit="Photo by Lorenzo Herrera on Unsplash"
    data-credit-href="https://unsplash.com/photos/vintage-gray-game-console-and-joystick-p0j-mE6mGo4"
  />
  
    </button>
  <button type="button" class="zoom" aria-label="Zoom image: Cabled network switches in a rack">
      <img
    src="https://wilhelm.codes/blog/markdown/server-cables_hu_5a0026c5dfacf58d.webp"
    srcset="/blog/markdown/server-cables_hu_5a0026c5dfacf58d.webp 232w, /blog/markdown/server-cables_hu_96bc67206c0724c3.webp 464w, /blog/markdown/server-cables_hu_93866602d9487e49.webp 696w"
    sizes="(max-width: 40rem) 50vw, 232px"
    width="232"
    height="130"
    alt="Cabled network switches in a rack"
    loading="lazy"
    decoding="async"
    data-full="/blog/markdown/server-cables_hu_d7489352bd0202f6.webp"
    data-credit="Photo by Taylor Vick on Unsplash"
    data-credit-href="https://unsplash.com/photos/cable-network-M5tzZtFCOfs"
  />
  
    </button>
  <button type="button" class="zoom" aria-label="Zoom image: A dark blue circuit board up close">
      <img
    src="https://wilhelm.codes/blog/markdown/circuit-blue_hu_fb606dd5b10cb137.webp"
    srcset="/blog/markdown/circuit-blue_hu_fb606dd5b10cb137.webp 232w, /blog/markdown/circuit-blue_hu_24e1ca785ff29b94.webp 464w, /blog/markdown/circuit-blue_hu_ce5aa786d6004352.webp 696w"
    sizes="(max-width: 40rem) 50vw, 232px"
    width="232"
    height="174"
    alt="A dark blue circuit board up close"
    loading="lazy"
    decoding="async"
    data-full="/blog/markdown/circuit-blue_hu_e79783b2bbe48544.webp"
    data-credit="Photo by Vishnu Mohanan on Unsplash"
    data-credit-href="https://unsplash.com/photos/close-up-of-dark-blue-circuit-board-pfR18JNEMv8"
  />
  
    </button>
  <button type="button" class="zoom" aria-label="Zoom image: A stack of assorted CRT monitors">
      <img
    src="https://wilhelm.codes/blog/markdown/crt-stack_hu_e2450c79214f8261.webp"
    srcset="/blog/markdown/crt-stack_hu_e2450c79214f8261.webp 232w, /blog/markdown/crt-stack_hu_d484ff96005f12cb.webp 464w, /blog/markdown/crt-stack_hu_14a7def7bc889fb5.webp 696w"
    sizes="(max-width: 40rem) 50vw, 232px"
    width="232"
    height="154"
    alt="A stack of assorted CRT monitors"
    loading="lazy"
    decoding="async"
    data-full="/blog/markdown/crt-stack_hu_ec7865487d822f93.webp"
    data-credit="Photo by Rubenz Arizta on Unsplash"
    data-credit-href="https://unsplash.com/photos/assorted-crt-monitor-3uQWtvUPjyg"
  />
  
    </button>
  <button type="button" class="zoom" aria-label="Zoom image: A red and black circuit board">
      <img
    src="https://wilhelm.codes/blog/markdown/circuit-red_hu_8d921bca68ecd16.webp"
    srcset="/blog/markdown/circuit-red_hu_8d921bca68ecd16.webp 232w, /blog/markdown/circuit-red_hu_2d90e29275615c6e.webp 464w, /blog/markdown/circuit-red_hu_7f68810c0c65d632.webp 696w"
    sizes="(max-width: 40rem) 50vw, 232px"
    width="232"
    height="182"
    alt="A red and black circuit board"
    loading="lazy"
    decoding="async"
    data-full="/blog/markdown/circuit-red_hu_7df031890e235073.webp"
    data-credit="Photo by Michael Dziedzic on Unsplash"
    data-credit-href="https://unsplash.com/photos/red-and-black-circuit-board-aQYgUYwnCsM"
  />
  
    </button>
  <button type="button" class="zoom" aria-label="Zoom image: A green motherboard in tilt-shift focus">
      <img
    src="https://wilhelm.codes/blog/markdown/motherboard_hu_98700506ebffc8ba.webp"
    srcset="/blog/markdown/motherboard_hu_98700506ebffc8ba.webp 232w, /blog/markdown/motherboard_hu_def8aa27e2e417a6.webp 464w, /blog/markdown/motherboard_hu_84f3893b6a0f3cc2.webp 696w"
    sizes="(max-width: 40rem) 50vw, 232px"
    width="232"
    height="155"
    alt="A green motherboard in tilt-shift focus"
    loading="lazy"
    decoding="async"
    data-full="/blog/markdown/motherboard_hu_3d740513539771e0.webp"
    data-credit="Photo by Chris Ried on Unsplash"
    data-credit-href="https://unsplash.com/photos/tilt-shift-photography-of-green-computer-motherboard-bN5XdU-bap4"
  />
  
    </button>
  <button type="button" class="zoom" aria-label="Zoom image: A black CRT beside a white keyboard">
      <img
    src="https://wilhelm.codes/blog/markdown/crt-keyboard_hu_b5498c4eeeca1fc4.webp"
    srcset="/blog/markdown/crt-keyboard_hu_b5498c4eeeca1fc4.webp 232w, /blog/markdown/crt-keyboard_hu_8188fb2b95493889.webp 464w, /blog/markdown/crt-keyboard_hu_5b37d15cf9925867.webp 696w"
    sizes="(max-width: 40rem) 50vw, 232px"
    width="232"
    height="155"
    alt="A black CRT beside a white keyboard"
    loading="lazy"
    decoding="async"
    data-full="/blog/markdown/crt-keyboard_hu_a3a7b0cd64792094.webp"
    data-credit="Photo by Senad Palic on Unsplash"
    data-credit-href="https://unsplash.com/photos/black-crt-tv-beside-white-computer-keyboard-js39s4h6dt8"
  />
  
    </button>

</div>

<p>Ex amet id ex aliquip id do laborum excepteur exercitation elit sint commodo occaecat nostrud est.</p>]]></content:encoded></item></channel></rss>