<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Wayfinder</title>
    <link>https://showcase.test</link>
    <description>The cairn showcase site.</description>
    <atom:link href="https://showcase.test/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>On trail mix and small comforts</title>
      <link>https://showcase.test/posts/trail-mix</link>
      <guid isPermaLink="true">https://showcase.test/posts/trail-mix</guid>
      <pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate>
      <description>The little rituals that keep a long day pleasant.</description>
      <category>gear</category>
      <category>season-notes</category>
      <content:encoded><![CDATA[<p>The little rituals that keep a long day pleasant.</p>]]></content:encoded>
    </item>
    <item>
      <title>Late-season notes from the high col</title>
      <link>https://showcase.test/posts/late-season</link>
      <guid isPermaLink="true">https://showcase.test/posts/late-season</guid>
      <pubDate>Fri, 26 Jun 2026 00:00:00 GMT</pubDate>
      <description>What changes up high as the season turns over.</description>
      <category>season-notes</category>
      <category>trail-reports</category>
      <content:encoded><![CDATA[<p>What changes up high as the season turns over.</p>]]></content:encoded>
    </item>
    <item>
      <title>Catching the storm window</title>
      <link>https://showcase.test/posts/storm-window</link>
      <guid isPermaLink="true">https://showcase.test/posts/storm-window</guid>
      <pubDate>Fri, 19 Jun 2026 00:00:00 GMT</pubDate>
      <description>Timing a route around an incoming weather window.</description>
      <category>weather</category>
      <category>routes</category>
      <content:encoded><![CDATA[<p>Timing a route around an incoming weather window.</p>]]></content:encoded>
    </item>
    <item>
      <title>A pack list that travels light</title>
      <link>https://showcase.test/posts/pack-list</link>
      <guid isPermaLink="true">https://showcase.test/posts/pack-list</guid>
      <pubDate>Fri, 12 Jun 2026 00:00:00 GMT</pubDate>
      <description>Trimming the kit down to what actually earns its weight.</description>
      <category>gear</category>
      <category>trail-reports</category>
      <content:encoded><![CDATA[<p>Trimming the kit down to what actually earns its weight.</p>]]></content:encoded>
    </item>
    <item>
      <title>The valley loop in a morning</title>
      <link>https://showcase.test/posts/valley-loop</link>
      <guid isPermaLink="true">https://showcase.test/posts/valley-loop</guid>
      <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
      <description>A relaxed loop you can finish before lunch.</description>
      <category>routes</category>
      <content:encoded><![CDATA[<p>A relaxed loop you can finish before lunch.</p>]]></content:encoded>
    </item>
    <item>
      <title>Reading the first frost</title>
      <link>https://showcase.test/posts/first-frost</link>
      <guid isPermaLink="true">https://showcase.test/posts/first-frost</guid>
      <pubDate>Fri, 29 May 2026 00:00:00 GMT</pubDate>
      <description>Early-season frost and what it tells you about the snowpack.</description>
      <category>season-notes</category>
      <category>weather</category>
      <content:encoded><![CDATA[<p>Early-season frost and what it tells you about the snowpack.</p>]]></content:encoded>
    </item>
    <item>
      <title>Layering for shoulder season</title>
      <link>https://showcase.test/posts/layering</link>
      <guid isPermaLink="true">https://showcase.test/posts/layering</guid>
      <pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate>
      <description>What to wear when the mornings bite and the afternoons bake.</description>
      <category>gear</category>
      <category>weather</category>
      <content:encoded><![CDATA[<p>What to wear when the mornings bite and the afternoons bake.</p>]]></content:encoded>
    </item>
    <item>
      <title>The ridge route, end to end</title>
      <link>https://showcase.test/posts/ridge-route</link>
      <guid isPermaLink="true">https://showcase.test/posts/ridge-route</guid>
      <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
      <description>A full traverse of the ridge with notes on the cruxes.</description>
      <category>routes</category>
      <category>trail-reports</category>
      <content:encoded><![CDATA[<p>A full traverse of the ridge with notes on the cruxes.</p>]]></content:encoded>
    </item>
    <item>
      <title>Getting your boot fit right</title>
      <link>https://showcase.test/posts/boot-fit</link>
      <guid isPermaLink="true">https://showcase.test/posts/boot-fit</guid>
      <pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate>
      <description>A quick checklist for dialing in a comfortable boot.</description>
      <category>gear</category>
      <content:encoded><![CDATA[<p>A quick checklist for dialing in a comfortable boot.</p>]]></content:encoded>
    </item>
    <item>
      <title>Spring thaw on the lower loop</title>
      <link>https://showcase.test/posts/spring-thaw</link>
      <guid isPermaLink="true">https://showcase.test/posts/spring-thaw</guid>
      <pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate>
      <description>Snowmelt opens the lower loop early this year.</description>
      <category>trail-reports</category>
      <category>weather</category>
      <content:encoded><![CDATA[<p>Snowmelt opens the lower loop early this year.</p>]]></content:encoded>
    </item>
    <item>
      <title>The reading surface</title>
      <link>https://showcase.test/posts/the-reading-surface</link>
      <guid isPermaLink="true">https://showcase.test/posts/the-reading-surface</guid>
      <pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate>
      <description>A working tour of every element this theme styles, written as the markdown an author actually types.</description>
      <content:encoded><![CDATA[<p class="lead">This post is the manual for writing here. Every paragraph below is a real element, rendered by the same theme your readers see. Read it once and you will know how to write a post, drop in a component, and change the look of the whole site.</p>
<p>You write in markdown. Markdown is plain text with a few punctuation marks that stand in for formatting, so a heading is a line that starts with <code>#</code>, and a list is a line that starts with <code>-</code>. The editor shows your raw text on the left and this rendered surface on the right. Nothing here is a hidden setting in a toolbar. What you type is what gets saved to the repository, and what gets saved is what the site reads.</p>
<h2 id="headings-give-a-post-its-shape">Headings give a post its shape</h2>
<p>A second-level heading like the one above starts with two hash marks. Use one when you start a new section. The theme gives it room above and pulls it close to the text that follows, so the heading reads as a label on the section it introduces.</p>
<h3 id="third-level-headings-sit-inside-a-section">Third-level headings sit inside a section</h3>
<p>Three hash marks make a third-level heading. Reach for it when a section grows long enough to need its own subsections. Going deeper than this is usually a sign the post wants to be split in two.</p>
<h2 id="text-you-can-emphasize-and-links">Text you can emphasize, and links</h2>
<p>Inside a paragraph you can make a word <strong>bold</strong> by wrapping it in two asterisks, or <em>italic</em> with one. Bold is for a term you want to stand out on a skim. Italic is for a lighter stress or a title. You can also link to anywhere, like the <a href="https://unsplash.com">Unsplash photo library</a>, by putting the link text in square brackets and the address in parentheses right after.</p>
<p>To link to another post or page on this same site, write <code>cairn:posts/&#x3C;id></code> instead of a full web address. The engine turns that into the live link when the page renders, so the link keeps working even if you later change the post's date or title. The <a href="https://showcase.test/about">about page</a> is linked that way.</p>
<h2 id="lists-in-two-flavors">Lists, in two flavors</h2>
<p>An unordered list is for items with no particular order. Start each line with a dash:</p>
<ul>
<li>Each item is one line that begins with a dash.</li>
<li>Keep items short and parallel in shape.</li>
<li>The theme draws a small accent diamond instead of a plain dot.</li>
</ul>
<p>A numbered list is for steps that happen in sequence. Start each line with a number and a period, and let the editor count for you:</p>
<ol>
<li>Write the first step.</li>
<li>Write the next one.</li>
<li>The numbers render in the display face, in the accent color.</li>
</ol>
<p>A task list is a checklist. Add <code>[ ]</code> for an open item or <code>[x]</code> for a done one, right after the dash:</p>
<ul class="contains-task-list">
<li class="task-list-item"><input type="checkbox" checked disabled aria-label="Decide what the post is about"> Decide what the post is about</li>
<li class="task-list-item"><input type="checkbox" checked disabled aria-label="Write a first draft"> Write a first draft</li>
<li class="task-list-item"><input type="checkbox" disabled aria-label="Read it out loud and cut a third of it"> Read it out loud and cut a third of it</li>
<li class="task-list-item"><input type="checkbox" disabled aria-label="Publish"> Publish</li>
</ul>
<p>The boxes render as real checkboxes, fixed in place for reading. A reader sees at a glance what is done and what is left.</p>
<h2 id="quotes-set-apart">Quotes, set apart</h2>
<p>A line that starts with <code>></code> becomes a blockquote. Use it when you quote someone else at length, or set off a passage you want the reader to slow down for.</p>
<blockquote>
<p>A good interface is like a joke. If you have to explain it, it is not that good.</p>
</blockquote>
<p>When you want a single line from your own writing to land hard, make it a pull quote with the <code>pull-quote</code> component:</p>
<figure class="pull-quote" data-rise="0"><p class="pull-quote-text pullquote">Write the post you wish someone had handed you on your first day.</p></figure>
<p>The line outdents into the margin on a wide screen and picks up an opening quotation mark in the accent color. Use it once in a post, at most. Its power comes from being rare. Give it <code>{attribution="..."}</code> when the line is not your own words.</p>
<h2 id="code-inline-and-in-blocks">Code, inline and in blocks</h2>
<p>For a short snippet inside a sentence, wrap it in backticks, so a filename like <code>cairn.config.ts</code> reads as code. For anything longer, use a fenced block: three backticks, the language name, your code, then three more backticks. Naming the language turns on syntax highlighting, which the theme colors from the same palette as everything else.</p>
<pre class="shiki cairn-roles" tabindex="0"><code><span class="line"><span class="cairn-tok-comment">// A render adapter is the one seam the engine asks each site to fill.</span></span>
<span class="line"><span class="cairn-tok-keyword">export</span><span class="cairn-tok-keyword"> function</span><span class="cairn-tok-function"> render</span><span class="cairn-tok-punct">(</span><span>markdown</span><span class="cairn-tok-punct">)</span><span class="cairn-tok-punct"> {</span></span>
<span class="line"><span class="cairn-tok-keyword">  return</span><span class="cairn-tok-function"> renderMarkdown</span><span class="cairn-tok-punct">(</span><span>markdown</span><span class="cairn-tok-punct">);</span></span>
<span class="line"><span class="cairn-tok-punct">}</span></span>
<span class="line"></span></code></pre>
<p>The highlighting colors come from a small set of variables in the theme, the same ones that color the rest of the page. Change the palette and every code block recolors with it.</p>
<pre class="shiki cairn-roles" tabindex="0"><code><span class="line"><span class="cairn-tok-comment">/* These tokens drive the whole reading surface. Edit them to re-skin the site. */</span></span>
<span class="line"><span class="cairn-tok-punct">:</span><span>root </span><span class="cairn-tok-punct">{</span></span>
<span class="line"><span>  --color-primary</span><span class="cairn-tok-punct">:</span><span class="cairn-tok-function"> oklch</span><span class="cairn-tok-punct">(</span><span class="cairn-tok-number">55%</span><span class="cairn-tok-number"> 0.13</span><span class="cairn-tok-number"> 250</span><span class="cairn-tok-punct">);</span><span class="cairn-tok-comment"> /* the accent */</span></span>
<span class="line"><span>  --font-display</span><span class="cairn-tok-punct">:</span><span class="cairn-tok-punct"> '</span><span class="cairn-tok-string">Fraunces Variable</span><span class="cairn-tok-punct">'</span><span class="cairn-tok-punct">,</span><span> serif</span><span class="cairn-tok-punct">;</span><span class="cairn-tok-comment"> /* headings and pull-quotes */</span></span>
<span class="line"><span class="cairn-tok-punct">}</span></span>
<span class="line"></span></code></pre>
<p>To see your changes, build the site and open it. One command does both:</p>
<pre class="shiki cairn-roles" tabindex="0"><code><span class="line"><span class="cairn-tok-function">npm</span><span class="cairn-tok-string"> run</span><span class="cairn-tok-string"> build</span><span class="cairn-tok-punct"> &#x26;&#x26;</span><span class="cairn-tok-function"> npm</span><span class="cairn-tok-string"> run</span><span class="cairn-tok-string"> preview</span></span>
<span class="line"></span></code></pre>
<h2 id="tables-for-anything-with-rows-and-columns">Tables, for anything with rows and columns</h2>
<p>A table is rows of text separated by pipe characters, with a row of dashes under the header to mark it. The spacing in your raw text does not have to be tidy. The theme handles the alignment, the header rule, and the zebra striping.</p>






























<table><thead><tr><th>Element</th><th>How you write it</th><th>What it is for</th></tr></thead><tbody><tr><td>Heading</td><td><code>## Text</code></td><td>The shape of the post</td></tr><tr><td>Bold</td><td><code>**word**</code></td><td>A term that should stand out</td></tr><tr><td>Link</td><td><code>[text](address)</code></td><td>Sending a reader somewhere</td></tr><tr><td>Code block</td><td><code>```lang</code></td><td>Showing code, with highlighting</td></tr></tbody></table>
<h2 id="images-placed-three-ways">Images, placed three ways</h2>
<p>An image goes inside a figure, which is a block that holds the picture and its caption together. Wrap the image in <code>:::figure</code> and choose where it sits. The default is the text column. Add <code>{.center}</code> to keep it centered at the column width:</p>
<figure class="cairn-place-center"><p><img src="https://images.unsplash.com/photo-1464822759023-fed622ff2c3b?w=1200&#x26;q=80" alt="A still mountain lake reflecting the peaks above it"></p><p>A centered figure holds the measure of the text.</p></figure>
<p>Add <code>{.wide}</code> to let the image break past the text column on a large screen, which suits a landscape:</p>
<figure class="cairn-place-wide"><p><img src="https://images.unsplash.com/photo-1454496522488-7a8e488e8606?w=1600&#x26;q=80" alt="A long alpine ridge under a clear sky"></p><p>A wide figure reaches past the column on either side.</p></figure>
<p>Add <code>{.full}</code> for an image that spans the full width of the page, for a moment that deserves the room:</p>
<figure class="cairn-place-full"><p><img src="https://images.unsplash.com/photo-1506905925346-21bda4d32df4?w=2000&#x26;q=80" alt="Layered mountains fading into morning mist"></p><p>A full-bleed figure runs edge to edge.</p></figure>
<p>The caption is whatever text you put under the image inside the figure. In a finished site you would store your own pictures in the Media Library and reference them by a short <code>media:</code> handle instead of a web address, so the link never breaks when an image is renamed.</p>
<hr>
<h2 id="components-for-the-things-markdown-cannot-say">Components, for the things markdown cannot say</h2>
<p>That horizontal rule above is three dashes on their own line. It marks a real break in the post.</p>
<p>Some things you want to say do not fit any plain markdown element. For those, this site ships a small set of components, and you drop them into your text with the same kind of block syntax as a figure. The first is a callout, for pulling one idea out of the flow. It comes in three tones.</p>
<p>A note is the calm one, for an aside or a definition:</p>
<aside class="callout callout-note" data-rise="1"><p class="callout-title">A quick definition</p><div class="callout-body"><p>A <em>concept</em> is a kind of content, like a post or a page. This site has two of them. A new concept is a change to the site's setup, not something you make while writing.</p></div><ul class="callout-points"></ul></aside>
<p>A tip is for advice that will save the reader trouble:</p>
<aside class="callout callout-tip" data-rise="2"><p class="callout-title">Write the title last</p><div class="callout-body"><p>The title is a promise about the post. You will know what you actually promised only after the post is written. Drafting it last saves you from a title that no longer fits.</p></div><ul class="callout-points"><li>A vague title is a sign of a vague post.</li><li>If you cannot title it, the post is not finished.</li></ul></aside>
<p>A warning is for something the reader needs to be careful about:</p>
<aside class="callout callout-warning" data-rise="3"><p class="callout-title">Publishing is public</p><div class="callout-body"><p>Saving keeps your work on a private draft. Publishing copies it to the live site, where anyone can read it. There is no separate review step, so read the post once more before you publish.</p></div><ul class="callout-points"></ul></aside>
<p>The second component is an alert, for a caution set in a bordered card with an icon. It reads as a heavier signal than a callout, so save it for the rare note a reader must not miss:</p>
<section class="alert alert-caution" data-rise="4"><div class="card-body"><div class="ec-head"><span class="ec-icon"><svg class="ec-glyph" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true"><path d="M48 208c0-88 72-160 160-160 0 88-72 160-160 160Z"></path></svg></span><h2 class="card-title" id="check-the-date-before-you-publish">Check the date before you publish</h2></div><div class="alert-body"><p>The post's date sets its place in the archive and its web address. Fixing it after you publish changes the link, which can break anything pointing at the old one. Get it right the first time.</p></div></div></section>
<p>The third component is an icon, a single glyph from the site's icon set for a short line that wants a marker of its own, with no card and no title:</p>
<span class="ec-icon" data-rise="5"><svg class="ec-glyph" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true"><path d="M64 24v208M64 32h128l-32 32 32 32H64"></path></svg></span>
<p>Pick the glyph from the same picker the callout and alert icons use. An icon name outside the declared set is not a shape the site can draw, so it fails the build rather than rendering a blank one.</p>
<p>The fourth component is a video link. It never requests the video platform until a reader clicks through; before that it is a static panel naming where the link goes:</p>
<figure class="video-facade" data-rise="6"><a class="video-facade-link" href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" target="_blank" rel="noopener noreferrer" aria-label="Watch &#x22;A short walkthrough&#x22; on YouTube (opens in a new tab)"><span class="video-facade-thumb"><span class="ec-icon"><svg class="ec-glyph" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true"><path d="M80 32v192l152-96Z"></path></svg></span></span><span class="video-facade-platform">YouTube</span></a><figcaption class="video-facade-caption">A short walkthrough</figcaption></figure>
<p>The fifth is a CTA, a single link styled like a button, for pointing the reader at the one next step that matters:</p>
<p class="cta" data-rise="7"><a class="cta-link cta-primary" href="https://example.com/guide">Read the getting-started guide<span class="ec-icon"><svg class="ec-glyph" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true"><path d="M32 104h128v-32l96 56-96 56v-32H32Z"></path></svg></span></a></p>
<p>The sixth is an FAQ question, a native disclosure widget that works with no JavaScript. The answer takes full markdown, including a <strong>bold</strong> term or a <a href="https://example.com">link</a>:</p>
<details class="faq" data-rise="8"><summary class="faq-question"><span class="faq-question-text">Does the FAQ component support formatting in the answer?</span><span class="faq-marker"><span class="ec-icon"><svg class="ec-glyph" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true"><path d="M32 64 128 176 224 64 224 104 128 216 32 104Z"></path></svg></span></span></summary><div class="faq-answer"><p>Yes. The answer slot is <strong>markdown</strong>, so you can add emphasis, a <a href="https://example.com">link</a>, or even a short list:</p><ul>
<li>It renders through the same pipeline as a post's body.</li>
<li>Nothing here is a plain-text-only special case.</li>
</ul></div></details>
<h2 id="changing-the-look">Changing the look</h2>
<p>Everything you have seen draws its type, color, and spacing from one set of variables, the design tokens, in a single theme file. The accent color, the heading font, the width of the text column, and the rhythm between blocks are all named values you can edit in one place. Change <code>--color-primary</code> and the links, the list markers, the blockquote rule, and the callout accents all move together. The point of a surface like this is that the writing and the site stay in step, so a post written today still looks right after the next redesign.</p>
<p>You now know every element. Open the editor, start a post, and try them.</p>]]></content:encoded>
    </item>
    <item>
      <title>A post with a callout</title>
      <link>https://showcase.test/posts/callout</link>
      <guid isPermaLink="true">https://showcase.test/posts/callout</guid>
      <pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate>
      <description>Proving the component slot render path in the real build.</description>
      <content:encoded><![CDATA[<p>This post exercises the callout component end to end.</p>
<aside class="callout callout-warning" data-rise="0"><p class="callout-title">Heads up</p><div class="callout-body"><p>Read this before you go any further.</p></div><ul class="callout-points"><li>First thing to remember</li><li>Second thing to remember</li></ul></aside>]]></content:encoded>
    </item>
    <item>
      <title>A second post</title>
      <link>https://showcase.test/posts/second</link>
      <guid isPermaLink="true">https://showcase.test/posts/second</guid>
      <pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate>
      <description>Proving the archive and feed list more than one entry.</description>
      <category>Svelte</category>
      <category>Cloudflare</category>
      <content:encoded><![CDATA[<p>A second post so the feed and sitemap list more than one item.</p>]]></content:encoded>
    </item>
    <item>
      <title>Hello, cairn</title>
      <link>https://showcase.test/posts/hello</link>
      <guid isPermaLink="true">https://showcase.test/posts/hello</guid>
      <pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate>
      <description>The first showcase post.</description>
      <category>Svelte</category>
      <category>Markdown</category>
      <content:encoded><![CDATA[<p>This is the first post in the cairn showcase.</p>
<p>See the <a href="https://showcase.test/about">about page</a> for more.</p>
<section class="alert alert-caution" data-rise="0"><div class="card-body"><div class="ec-head"><span class="ec-icon"><svg class="ec-glyph" viewBox="0 0 256 256" fill="currentColor" aria-hidden="true"><path d="M48 208c0-88 72-160 160-160 0 88-72 160-160 160Z"></path></svg></span><h2 class="card-title" id=""></h2></div><div class="alert-body"><p>[Heads up]</p><p>This note proves the role default reaches the build.</p></div></div></section>]]></content:encoded>
    </item>
  </channel>
</rss>