Files
jarl/internal/web/static/assets/logo.svg
T
abrown38andClaude Opus 5.5 a7d389be27 Web UI: Jarl logo and wordmark
Add the logo, a Viking jarl drawn like a woodcut whose spear-pointed crown
holds a DNS tree. It is generated by scripts/logo.py, which mirrors the
left half so the figure is exactly symmetrical, as logo.svg (white on a
Nordic-blue disc) and logo-white.svg. It links home in the header, sits on
the login page and is the favicon.

The login page shows an angular "JARL" wordmark drawn as SVG paths over a
rule with a "DNS" node, coloured from the theme. The header's "Jarl" uses
a self-hosted Cinzel Bold subset (SIL OFL); jarld serves .woff2 as
font/woff2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 06:19:51 +00:00

34 lines
4.2 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-labelledby="t">
<title id="t">Jarl</title>
<!-- Jarl: a Viking ruler in a spear-pointed crown, drawn like a woodcut.
The crown holds a DNS tree: the root node with its branches below.
Generated by scripts/logo.py, which mirrors the left half, so it is
exactly symmetrical; the beard's strands are cut out with a mask. -->
<circle cx="64" cy="64" r="64" fill="#2f5fb3"/>
<g transform="translate(64 66) scale(0.8) translate(-64 -64)">
<path fill="none" stroke="#fff" stroke-width="3.6" stroke-linejoin="miter" stroke-miterlimit="8" d="M36 44 L35 28 L32 18 L41 25 L50 30 L55 21 L64 9 L73 21 L78 30 L87 25 L96 18 L93 28 L92 44 Z"/>
<path fill="#fff" d="M37 37 H91 V40.5 H37 Z"/>
<path fill="#fff" d="M32 18 L27.5 9 L37 13.5 Z M96 18 L100.5 9 L91 13.5 Z M64 9 L61 3.5 L64 0.5 L67 3.5 Z"/>
<g fill="none" stroke="#fff" stroke-width="2.3"><circle cx="64" cy="19" r="3"/><path d="M64 22 V28.5 M55.3 31.5 H72.7"/><circle cx="52.2" cy="31.5" r="3"/><circle cx="75.8" cy="31.5" r="3"/></g>
<circle cx="64" cy="31.5" r="3.2" fill="#fff"/>
<defs><mask id="jarl-cut" maskUnits="userSpaceOnUse" x="0" y="0" width="128" height="128"><rect width="128" height="128" fill="#fff"/><g fill="none" stroke="#000" stroke-linecap="round"><path stroke-width="2.0" d="M40 80 C42.5 86 37 91 39.5 99 C40.5 102 39 104 40 106"/><path stroke-width="2.0" d="M 88 80 C 85.5 86 91 91 88.5 99 C 87.5 102 89 104 88 106"/><path stroke-width="1.7" d="M44.5 86 C47 92 42 97 44.5 106"/><path stroke-width="1.7" d="M 83.5 86 C 81 92 86 97 83.5 106"/><path stroke-width="1.5" d="M48.5 85.5 C50.5 90 47 94 48.5 99"/><path stroke-width="1.5" d="M 79.5 85.5 C 77.5 90 81 94 79.5 99"/><path stroke-width="2.0" d="M50.5 92 C53 99 48.5 104 51 113"/><path stroke-width="2.0" d="M 77.5 92 C 75 99 79.5 104 77 113"/><path stroke-width="1.7" d="M54.5 86.5 C57 94 52.5 101 55 109"/><path stroke-width="1.7" d="M 73.5 86.5 C 71 94 75.5 101 73 109"/><path stroke-width="1.8" d="M58 95 C59.5 101 56.5 106 58.5 116"/><path stroke-width="1.8" d="M 70 95 C 68.5 101 71.5 106 69.5 116"/><path stroke-width="1.5" d="M60.8 85.5 C62.3 92 59.8 98 61.2 105"/><path stroke-width="1.5" d="M 67.2 85.5 C 65.7 92 68.2 98 66.8 105"/><path stroke-width="1.4" d="M46 101.5 C47 104 45.5 106.5 46.5 109.5"/><path stroke-width="1.4" d="M 82 101.5 C 81 104 82.5 106.5 81.5 109.5"/><path stroke-width="1.4" d="M62.2 109 C62.7 113 61.7 116 62.4 119.5"/><path stroke-width="1.4" d="M 65.8 109 C 65.3 113 66.3 116 65.6 119.5"/><path stroke-width="1.3" d="M56.5 77.6 Q49.5 79.2 43 85.5"/><path stroke-width="1.3" d="M 71.5 77.6 Q 78.5 79.2 85 85.5"/><path stroke-width="2.4" d="M58.6 81.6 Q49.5 83.8 41.5 95"/><path stroke-width="2.4" d="M 69.4 81.6 Q 78.5 83.8 86.5 95"/><path stroke-width="1.8" d="M60.4 82.2 H67.6"/></g></mask></defs>
<g fill="#fff" fill-rule="evenodd" mask="url(#jarl-cut)">
<path d="M40 46 H88 L86.5 50 L71.5 55.5 L66.5 62.5 L61.5 62.5 L56.5 55.5 L41.5 50 Z"/>
<path d="M61.5 63 H66.5 L69 72.5 L64 75.5 L59 72.5 Z"/>
<path d="M38 69 L45 73.5 L63 79.5 H65 L83 73.5 L90 69 Q95 84 92 96 L88 104 L86 101 L83 110 L80 106 L76 116 L73 111 L69 121 L66 116 L64 127 L62 116 L59 121 L55 111 L52 116 L48 106 L45 110 L42 101 L40 104 L36 96 Q33 84 38 69 Z"/>
<path d="M33 46 L37 46 Q35 64 30 78 Q26 88 24 100 Q22 84 26 72 Q31 60 33 46 Z"/>
<path d="M 95 46 L 91 46 Q 93 64 98 78 Q 102 88 104 100 Q 106 84 102 72 Q 97 60 95 46 Z"/>
<path d="M38 47 L42 47 Q41 66 37 82 Q34 92 33 104 Q31 88 34 76 Q37 62 38 47 Z"/>
<path d="M 90 47 L 86 47 Q 87 66 91 82 Q 94 92 95 104 Q 97 88 94 76 Q 91 62 90 47 Z"/>
<path d="M41 51 L44.5 55 L44 63 L41.5 59 Z"/>
<path d="M 87 51 L 83.5 55 L 84 63 L 86.5 59 Z"/>
<path d="M47 58 Q52.5 55 58 59.5 Q52.5 63 47 58 Z M51.4 59 L53 57.4 L54.6 59 L53 60.6 Z"/>
<path d="M 81 58 Q 75.5 55 70 59.5 Q 75.5 63 81 58 Z M 76.6 59 L 75 57.4 L 73.4 59 L 75 60.6 Z"/>
<path d="M45 61.5 L54.5 65 L57.5 72.5 L50 73 L45.5 67.5 Z"/>
<path d="M 83 61.5 L 73.5 65 L 70.5 72.5 L 78 73 L 82.5 67.5 Z"/>
<path d="M63 76 L57 75 L48 78 Q42 82 38 92 Q45 85 50 83 L57 80.5 L63 80 Z"/>
<path d="M 65 76 L 71 75 L 80 78 Q 86 82 90 92 Q 83 85 78 83 L 71 80.5 L 65 80 Z"/>
</g>
</g>
</svg>