<?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/"><channel><title>Docs · Vellum</title><link>https://pages.stkn.org/felix/vellum/en/docs/</link><description>The pages the README cannot be: the theme shown working rather than tabulated.</description><generator>Hugo</generator><language>en</language><copyright>&#169; 2026 Your Name</copyright><lastBuildDate>Thu, 09 Jul 2026 15:20:00 +0200</lastBuildDate><atom:link href="https://pages.stkn.org/felix/vellum/en/docs/index.xml" rel="self" type="application/rss+xml"/><item><title>The Icon Set</title><link>https://pages.stkn.org/felix/vellum/en/docs/icons/</link><pubDate>Thu, 02 Jul 2026 10:00:00 +0200</pubDate><guid>https://pages.stkn.org/felix/vellum/en/docs/icons/</guid><description>Every glyph the theme can draw, drawn — because a list of names cannot show you a stroke weight.</description><content:encoded><![CDATA[<p>The README lists these by name, which is the right form for the thing you copy into <code>socialIcons</code>
and the wrong form for deciding whether they fit your site. A name cannot tell you the stroke weight,
the optical size, or how a row of them sits together. So here they are, rendered through the same
<code>icon.html</code> the header and the share row call.</p>
<h2 id="ui-glyphs" class="heading">UI glyphs
    <a class="heading__anchor" href="#ui-glyphs" tabindex="-1" aria-hidden="true"
        title="Link to this section">
<svg class="icon icon--hash" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M5 9h14M5 15h14M10 3.5 8 20.5M16 3.5l-2 17"/>
</svg>
</a>
</h2>
<p>Authored on a 24×24 grid with a 1.75 stroke, round caps, no fill — one hand throughout. They are
drawn below at 28px so the stroke reads as a stroke.</p>
<ul class="icon-sheet" role="list">
    <li class="icon-sheet__item">
        
<svg class="icon icon--arrow-up" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M12 19V5M6 11l6-6 6 6"/>
</svg>

        <code class="icon-sheet__name">arrow-up</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--arrow-right" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M5 12h14M13 6l6 6-6 6"/>
</svg>

        <code class="icon-sheet__name">arrow-right</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--arrow-left" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M19 12H5M11 18l-6-6 6-6"/>
</svg>

        <code class="icon-sheet__name">arrow-left</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--external" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M14 4h6v6M20 4l-8.5 8.5"/>
    <path d="M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/>
</svg>

        <code class="icon-sheet__name">external</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--hash" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M5 9h14M5 15h14M10 3.5 8 20.5M16 3.5l-2 17"/>
</svg>

        <code class="icon-sheet__name">hash</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--search" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <circle cx="10.5" cy="10.5" r="6.5"/>
    <path d="m15.2 15.2 4.8 4.8"/>
</svg>

        <code class="icon-sheet__name">search</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--pencil" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M4 20h4L20 8a2.8 2.8 0 0 0-4-4L4 16z"/>
    <path d="m15 5 4 4"/>
</svg>

        <code class="icon-sheet__name">pencil</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--chevron-right" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="m9 5 7 7-7 7"/>
</svg>

        <code class="icon-sheet__name">chevron-right</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--check" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="m4 12.5 5.5 5.5L20 6"/>
</svg>

        <code class="icon-sheet__name">check</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--moon" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M21 13.2A9 9 0 1 1 10.8 3a7 7 0 0 0 10.2 10.2z"/>
</svg>

        <code class="icon-sheet__name">moon</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--sun" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <circle cx="12" cy="12" r="4.2"/>
    <path d="M12 2v2.2M12 19.8V22M4.2 4.2l1.6 1.6M18.2 18.2l1.6 1.6M2 12h2.2M19.8 12H22M4.2 19.8l1.6-1.6M18.2 5.8l1.6-1.6"/>
</svg>

        <code class="icon-sheet__name">sun</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--rss" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <circle cx="5.5" cy="18.5" r="1.6" fill="currentColor" stroke="none"/>
    <path d="M4 11.2a8.8 8.8 0 0 1 8.8 8.8M4 4.5A15.5 15.5 0 0 1 19.5 20"/>
</svg>

        <code class="icon-sheet__name">rss</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--email" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <rect x="2.5" y="5" width="19" height="14" rx="2"/>
    <path d="m3 7 9 6 9-6"/>
</svg>

        <code class="icon-sheet__name">email</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--ai" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M12 2.5 16.5 11 12 14.5 7.5 11Z"/>
    <path d="M12 14.5V17"/>
    <path d="M2.5 20.5h5.5M11.5 20.5h1.5M16.5 20.5h5"/>
</svg>

        <code class="icon-sheet__name">ai</code>
    </li>
</ul>

<p>The <code>ai</code> mark is the odd one and the argued one: a drawing nib above a plotted line, the line dashed
because a machine laid it down. It is not a sparkle. A sparkle says <em>magic</em>; this mark has to say
<em>tooling</em>, and it is the same mark at both grains — stamped beside a post&rsquo;s title for a whole sheet,
flagged on the change bar for a single passage.</p>
<h2 id="brand-marks" class="heading">Brand marks
    <a class="heading__anchor" href="#brand-marks" tabindex="-1" aria-hidden="true"
        title="Link to this section">
<svg class="icon icon--hash" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M5 9h14M5 15h14M10 3.5 8 20.5M16 3.5l-2 17"/>
</svg>
</a>
</h2>
<p>These are official logotypes from 
<a href="https://simpleicons.org" class="link-external" rel="noopener noreferrer" target="_blank">Simple Icons
<svg class="icon icon--external" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M14 4h6v6M20 4l-8.5 8.5"/>
    <path d="M18 14v5a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5"/>
</svg>
</a>
 (CC0), so they are filled
shapes rather than strokes. They cannot be redrawn on the 24×24 stroke grid without misrepresenting
somebody&rsquo;s mark, which is why they switch the stroke off and carry their own fill.</p>
<ul class="icon-sheet" role="list">
    <li class="icon-sheet__item">
        
<svg class="icon icon--github" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/>
</svg>

        <code class="icon-sheet__name">github</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--gitlab" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="m23.6004 9.5927-.0337-.0862L20.3.9814a.851.851 0 0 0-.3362-.405.8748.8748 0 0 0-.9997.0539.8748.8748 0 0 0-.29.4399l-2.2055 6.748H7.5375l-2.2057-6.748a.8573.8573 0 0 0-.29-.4412.8748.8748 0 0 0-.9997-.0537.8585.8585 0 0 0-.3362.4049L.4332 9.5015l-.0325.0862a6.0657 6.0657 0 0 0 2.0119 7.0105l.0113.0087.03.0213 4.976 3.7264 2.462 1.8633 1.4995 1.1321a1.0085 1.0085 0 0 0 1.2197 0l1.4995-1.1321 2.4619-1.8633 5.006-3.7489.0125-.01a6.0682 6.0682 0 0 0 2.0094-7.003z"/>
</svg>

        <code class="icon-sheet__name">gitlab</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--codeberg" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M11.999.747A11.974 11.974 0 0 0 0 12.75c0 2.254.635 4.465 1.833 6.376L11.837 6.19c.072-.092.251-.092.323 0l4.178 5.402h-2.992l.065.239h3.113l.882 1.138h-3.674l.103.374h3.86l.777 1.003h-4.358l.135.483h4.593l.695.894h-5.038l.165.589h5.326l.609.785h-5.717l.182.65h6.038l.562.727h-6.397l.183.65h6.717A12.003 12.003 0 0 0 24 12.75 11.977 11.977 0 0 0 11.999.747zm3.654 19.104.182.65h5.326c.173-.204.353-.433.513-.65zm.385 1.377.18.65h3.563c.233-.198.485-.428.712-.65zm.383 1.377.182.648h1.203c.356-.204.685-.412 1.042-.648z"/>
</svg>

        <code class="icon-sheet__name">codeberg</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--stackoverflow" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M15.725 0l-1.72 1.277 6.39 8.588 1.716-1.277L15.725 0zm-3.94 3.418l-1.369 1.644 8.225 6.85 1.369-1.644-8.225-6.85zm-3.15 4.465l-.905 1.94 9.702 4.517.904-1.94-9.701-4.517zm-1.85 4.86l-.44 2.093 10.473 2.201.44-2.092-10.473-2.203zM1.89 15.47V24h19.19v-8.53h-2.133v6.397H4.021v-6.396H1.89zm4.265 2.133v2.13h10.66v-2.13H6.154Z"/>
</svg>

        <code class="icon-sheet__name">stackoverflow</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--mastodon" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M23.268 5.313c-.35-2.578-2.617-4.61-5.304-5.004C17.51.242 15.792 0 11.813 0h-.03c-3.98 0-4.835.242-5.288.309C3.882.692 1.496 2.518.917 5.127.64 6.412.61 7.837.661 9.143c.074 1.874.088 3.745.26 5.611.118 1.24.325 2.47.62 3.68.55 2.237 2.777 4.098 4.96 4.857 2.336.792 4.849.923 7.256.38.265-.061.527-.132.786-.213.585-.184 1.27-.39 1.774-.753a.057.057 0 0 0 .023-.043v-1.809a.052.052 0 0 0-.02-.041.053.053 0 0 0-.046-.01 20.282 20.282 0 0 1-4.709.545c-2.73 0-3.463-1.284-3.674-1.818a5.593 5.593 0 0 1-.319-1.433.053.053 0 0 1 .066-.054c1.517.363 3.072.546 4.632.546.376 0 .75 0 1.125-.01 1.57-.044 3.224-.124 4.768-.422.038-.008.077-.015.11-.024 2.435-.464 4.753-1.92 4.989-5.604.008-.145.03-1.52.03-1.67.002-.512.167-3.63-.024-5.545zm-3.748 9.195h-2.561V8.29c0-1.309-.55-1.976-1.67-1.976-1.23 0-1.846.79-1.846 2.35v3.403h-2.546V8.663c0-1.56-.617-2.35-1.848-2.35-1.112 0-1.668.668-1.67 1.977v6.218H4.822V8.102c0-1.31.337-2.35 1.011-3.12.696-.77 1.608-1.164 2.74-1.164 1.311 0 2.302.5 2.962 1.498l.638 1.06.638-1.06c.66-.999 1.65-1.498 2.96-1.498 1.13 0 2.043.395 2.74 1.164.675.77 1.012 1.81 1.012 3.12z"/>
</svg>

        <code class="icon-sheet__name">mastodon</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--bluesky" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M5.202 2.857C7.954 4.922 10.913 9.11 12 11.358c1.087-2.247 4.046-6.436 6.798-8.501C20.783 1.366 24 .213 24 3.883c0 .732-.42 6.156-.667 7.037-.856 3.061-3.978 3.842-6.755 3.37 4.854.826 6.089 3.562 3.422 6.299-5.065 5.196-7.28-1.304-7.847-2.97-.104-.305-.152-.448-.153-.327 0-.121-.05.022-.153.327-.568 1.666-2.782 8.166-7.847 2.97-2.667-2.737-1.432-5.473 3.422-6.3-2.777.473-5.899-.308-6.755-3.369C.42 10.04 0 4.615 0 3.883c0-3.67 3.217-2.517 5.202-1.026"/>
</svg>

        <code class="icon-sheet__name">bluesky</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--x" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M14.234 10.162 22.977 0h-2.072l-7.591 8.824L7.251 0H.258l9.168 13.343L.258 24H2.33l8.016-9.318L16.749 24h6.993zm-2.837 3.299-.929-1.329L3.076 1.56h3.182l5.965 8.532.929 1.329 7.754 11.09h-3.182z"/>
</svg>

        <code class="icon-sheet__name">x</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--linkedin" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/>
</svg>

        <code class="icon-sheet__name">linkedin</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--reddit" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M12 0C5.373 0 0 5.373 0 12c0 3.314 1.343 6.314 3.515 8.485l-2.286 2.286C.775 23.225 1.097 24 1.738 24H12c6.627 0 12-5.373 12-12S18.627 0 12 0Zm4.388 3.199c1.104 0 1.999.895 1.999 1.999 0 1.105-.895 2-1.999 2-.946 0-1.739-.657-1.947-1.539v.002c-1.147.162-2.032 1.15-2.032 2.341v.007c1.776.067 3.4.567 4.686 1.363.473-.363 1.064-.58 1.707-.58 1.547 0 2.802 1.254 2.802 2.802 0 1.117-.655 2.081-1.601 2.531-.088 3.256-3.637 5.876-7.997 5.876-4.361 0-7.905-2.617-7.998-5.87-.954-.447-1.614-1.415-1.614-2.538 0-1.548 1.255-2.802 2.803-2.802.645 0 1.239.218 1.712.585 1.275-.79 2.881-1.291 4.64-1.365v-.01c0-1.663 1.263-3.034 2.88-3.207.188-.911.993-1.595 1.959-1.595Zm-8.085 8.376c-.784 0-1.459.78-1.506 1.797-.047 1.016.64 1.429 1.426 1.429.786 0 1.371-.369 1.418-1.385.047-1.017-.553-1.841-1.338-1.841Zm7.406 0c-.786 0-1.385.824-1.338 1.841.047 1.017.634 1.385 1.418 1.385.785 0 1.473-.413 1.426-1.429-.046-1.017-.721-1.797-1.506-1.797Zm-3.703 4.013c-.974 0-1.907.048-2.77.135-.147.015-.241.168-.183.305.483 1.154 1.622 1.964 2.953 1.964 1.33 0 2.47-.81 2.953-1.964.057-.137-.037-.29-.184-.305-.863-.087-1.795-.135-2.769-.135Z"/>
</svg>

        <code class="icon-sheet__name">reddit</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--ycombinator" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z"/>
</svg>

        <code class="icon-sheet__name">ycombinator</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--telegram" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z"/>
</svg>

        <code class="icon-sheet__name">telegram</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--whatsapp" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51-.173-.008-.371-.01-.57-.01-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 01-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 01-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 012.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0012.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 005.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 00-3.48-8.413Z"/>
</svg>

        <code class="icon-sheet__name">whatsapp</code>
    </li>
</ul>

<p>One of those has a second name. <code>ycombinator</code> is what a site writes in <code>socialIcons</code>; <code>hackernews</code> is
the key the share row uses for the submit target. They resolve to the same logotype:</p>
<ul class="icon-sheet" role="list">
    <li class="icon-sheet__item">
        
<svg class="icon icon--ycombinator" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z"/>
</svg>

        <code class="icon-sheet__name">ycombinator</code>
    </li>
    <li class="icon-sheet__item">
        
<svg class="icon icon--hackernews" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path fill="currentColor" stroke="none" d="M0 24V0h24v24H0zM6.951 5.896l4.112 7.708v5.064h1.583v-4.972l4.148-7.799h-1.749l-2.457 4.875c-.372.745-.688 1.434-.688 1.434s-.297-.708-.651-1.434L8.831 5.896h-1.88z"/>
</svg>

        <code class="icon-sheet__name">hackernews</code>
    </li>
</ul>

<h2 id="what-an-unknown-name-does" class="heading">What an unknown name does
    <a class="heading__anchor" href="#what-an-unknown-name-does" tabindex="-1" aria-hidden="true"
        title="Link to this section">
<svg class="icon icon--hash" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M5 9h14M5 15h14M10 3.5 8 20.5M16 3.5l-2 17"/>
</svg>
</a>
</h2>
<p>Nothing silently. A name with no branch falls through to a generic link glyph, so a typo shows up on
the page instead of leaving a hole where an icon should be:</p>
<ul class="icon-sheet" role="list">
    <li class="icon-sheet__item">
        
<svg class="icon icon--not-an-icon" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M10.5 13.5a4 4 0 0 0 5.7 0l3-3a4 4 0 0 0-5.7-5.7l-1.7 1.7"/>
    <path d="M13.5 10.5a4 4 0 0 0-5.7 0l-3 3a4 4 0 0 0 5.7 5.7l1.7-1.7"/>
</svg>

        <code class="icon-sheet__name">not-an-icon</code>
    </li>
</ul>

<p>That is the whole failure mode, and it is why this page exists as a rendered sheet rather than a
list: every name above is really drawn here, so one that stops resolving turns into that link glyph
in the open.</p>
<p>To add your own, extend <code>_partials/icon.html</code> with another branch and keep the 24×24 grid.</p>
]]></content:encoded><category>reference</category></item><item><title>The Landing Page, Both Ways</title><link>https://pages.stkn.org/felix/vellum/en/docs/the-landing-page/</link><pubDate>Thu, 09 Jul 2026 15:20:00 +0200</pubDate><guid>https://pages.stkn.org/felix/vellum/en/docs/the-landing-page/</guid><description>Five views over one profile, and two presentations over the same params — with both of them running in this demo.</description><content:encoded><![CDATA[<p>The landing page is the part of this theme the README has to describe in the most words and can show
the least of. It is worth reading there for the exact keys; this page is for the thing a table cannot
carry, which is what the two presentations feel like next to each other.</p>
<h2 id="one-profile-up-to-five-views" class="heading">One profile, up to five views
    <a class="heading__anchor" href="#one-profile-up-to-five-views" tabindex="-1" aria-hidden="true"
        title="Link to this section">
<svg class="icon icon--hash" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M5 9h14M5 15h14M10 3.5 8 20.5M16 3.5l-2 17"/>
</svg>
</a>
</h2>
<p>Under the profile block a landing page can carry <strong>about</strong>, <strong>skills</strong>, <strong>record</strong>, <strong>projects</strong> and
<strong>contact</strong>. Each renders only when its own key is set, so there is nothing to switch off — set none
and you have the plain profile the theme started with.</p>
<p>This demo sets all five in English and deliberately leaves <code>projects</code> out in German. That is not an
oversight to fix. A branch nothing builds is a branch nothing checks, so the &ldquo;view absent&rdquo; path
needed a page that actually omits one, and the German landing page is it.</p>
<p>Two things about the index that are easy to miss:</p>
<ul>
<li><strong>Fewer than two views and no index is drawn.</strong> A single view simply stands open. An index with one
entry is a control that cannot control anything.</li>
<li><strong>It needs no JavaScript.</strong> Without it every view stands open at once and the index entries are
plain anchor links to them. With it, one view shows at a time and <code>/#profile-view-skills</code> opens
that view directly. Nothing is behind the script that is not also reachable without it.</li>
</ul>
<h2 id="the-same-params-drawn-two-ways" class="heading">The same params, drawn two ways
    <a class="heading__anchor" href="#the-same-params-drawn-two-ways" tabindex="-1" aria-hidden="true"
        title="Link to this section">
<svg class="icon icon--hash" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M5 9h14M5 15h14M10 3.5 8 20.5M16 3.5l-2 17"/>
</svg>
</a>
</h2>
<p><code>view = &quot;terminal&quot;</code> swaps the drawn index for a working macOS-style shell. Same keys, same content,
nothing to migrate — delete the line and you are back. This demo runs one of each so you can put them
side by side:</p>
<ul>
<li>
<a href="/felix/vellum/en/"><strong>This site&rsquo;s landing page</strong></a>
 — the default, a drawn index under
the profile.</li>
<li>
<a href="/felix/vellum/de/"><strong>The German landing page</strong></a>
 — the same theme, the same five
keys, rendered as a shell.</li>
</ul>
<p>Go and use the second one. The shell is not a picture of a shell: commands are typed, the arrow keys
walk the history, Tab completes, <code>Ctrl+C</code> and <code>Ctrl+L</code> do what they do, and <code>&lt;command&gt; --json</code> prints
the raw data instead of the table. Every command in <code>help</code> is also a button, so a phone reaches all of
it without a keyboard, and the three window buttons work — close collapses the window to one line,
minimise to its title bar, zoom grows it from 24 rows to 40.</p>
<p>Output arrives a character at a time rather than appearing, and a command you click is typed into the
prompt. Any keystroke finishes what is still pending at once, so nothing is ever held behind the
effect, and <code>prefers-reduced-motion: reduce</code> turns all of it off.</p>
<p>Turn JavaScript off and the window shows the whole session already run — every command and its
output, in order. Nothing is lost and nothing pretends to be interactive. That transcript is also
what prints, without the window around it.</p>

<div class="alert alert--note" role="note">
    <p class="alert__label">Note</p>
    <div class="alert__body"><p>The window does not run Terminal&rsquo;s &ldquo;Basic&rdquo; white profile. It runs one matched to the theme, on the
same sunk surface and syntax inks every code block on this site already uses, so it sits on the page
rather than on top of it.</p></div>
</div>
<h2 id="what-the-choice-costs" class="heading">What the choice costs
    <a class="heading__anchor" href="#what-the-choice-costs" tabindex="-1" aria-hidden="true"
        title="Link to this section">
<svg class="icon icon--hash" viewBox="0 0 24 24" width="20" height="20" fill="none" stroke="currentColor"
    stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
    <path d="M5 9h14M5 15h14M10 3.5 8 20.5M16 3.5l-2 17"/>
</svg>
</a>
</h2>
<p>Almost nothing, and in one direction less than nothing: <code>35-terminal.css</code> is dropped from the
stylesheet entirely unless a site asks for the terminal. It is the theme&rsquo;s only feature that is off by
default, so it is the only sheet a site could otherwise be shipping for markup no page of it will ever
contain.</p>
<p>This demo is the case that proves it. Because the view is set per language, English and German build
<em>different</em> stylesheets — one with the terminal rules, one without. View source on either landing page
and compare the filename in the <code>&lt;link&gt;</code>.</p>
]]></content:encoded><category>reference</category><category>layout</category></item></channel></rss>