feat(hikes): inline cantonal Wappen next to region label

26 public-domain coats of arms fetched once from Wikimedia Commons
via scripts/download-cantons.ts and committed under static/cantons/.
$lib/data/cantons.ts maps Swisstopo's free-form name (German default,
French/Italian alternates for Romandie / Ticino) to the ISO code +
emblem URL.

Card shows an 18×22 emblem, detail page a 24×30 one — both with a
drop-shadow so they read against the dark hero gradient. Unknown
canton names fall back to plain text without the emblem.

The downloaded SVGs are written verbatim — earlier draft prepended a
provenance HTML comment but that breaks the leading `<?xml … ?>` and
browsers refuse to render the image. Provenance lives in the script's
CANTONS table instead.
This commit is contained in:
2026-05-19 08:44:30 +02:00
parent 2c3886296c
commit cfdd58fb18
31 changed files with 2371 additions and 3 deletions
+119
View File
@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="406.539px" height="492.849px" viewBox="-175.873 -214.081 406.539 492.849"
enable-background="new -175.873 -214.081 406.539 492.849" xml:space="preserve">
<g>
<path fill="#E8423F" d="M27.264-212.561h201.895V84.166c0,106.625-90.352,193.063-201.766,193.063
c-111.426,0-201.746-86.438-201.746-193.063v-296.727H27.264z"/>
<path fill="#FFD730" d="M112.682-152.225c0,27.32-24.266,49.48-54.203,49.48c-29.941,0-54.207-22.16-54.207-49.48
c0-27.336,24.266-49.488,54.207-49.488C88.417-201.713,112.682-179.561,112.682-152.225"/>
<g>
<g>
<g>
<g>
<defs>
<rect id="SVGID_1_" x="-175.873" y="-214.081" width="406.539" height="492.849"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_2_)" fill="none" stroke="#010202" stroke-width="3.32" stroke-miterlimit="10" d="M58.479-201.706
c29.945,0,54.211,22.152,54.211,49.48s-24.266,49.48-54.211,49.48c-29.938,0-54.207-22.152-54.207-49.48
S28.542-201.706,58.479-201.706z"/>
</g>
</g>
</g>
</g>
<polygon fill="#010202" points="-128.814,-181.905 -77.361,233.791 -62.087,232.103 -109.806,-184.026 "/>
<path fill="#FFD730" d="M-124.966-178.866c0.086,0.625,50.543,408.258,50.625,408.859c0.551-0.078,7.863-0.867,8.438-0.93
c-0.086-0.633-46.871-408.648-46.941-409.289C-113.431-180.143-124.384-178.928-124.966-178.866"/>
<path fill="#010202" d="M-121.623-197.659L-121.623-197.659c-9.801,1.234-17.055,7.898-16.184,14.867
c0.895,6.969,9.582,11.613,19.367,10.375c5.77-0.719,10.938-3.391,13.84-7.113c1.848-2.414,2.672-5.094,2.336-7.758
C-103.142-194.256-111.83-198.913-121.623-197.659"/>
<path fill="#FFD730" d="M-121.201-194.241c-7.52,0.945-13.223,5.457-13.223,10.254c0,0.25,0.016,0.508,0.047,0.762
c0.648,5.082,7.602,8.402,15.52,7.395c4.859-0.617,9.18-2.793,11.523-5.82c1.285-1.672,1.855-3.477,1.645-5.199
C-106.333-191.928-113.287-195.241-121.201-194.241"/>
<path fill="#010202" d="M-108.24-91.858L-108.24-91.858c-9.457,1.219-16.43,7.68-15.559,14.395
c0.871,6.719,9.254,11.199,18.695,9.984c9.449-1.203,16.406-7.672,15.559-14.395C-90.408-88.592-98.791-93.073-108.24-91.858"/>
<path fill="#FFD730" d="M-107.806-88.424c-7.168,0.918-12.617,5.215-12.617,9.801c0,0.238,0.016,0.496,0.047,0.734
c0.625,4.824,7.273,7.969,14.832,6.992c7.547-0.969,13.191-5.695,12.555-10.527C-93.591-86.264-100.24-89.409-107.806-88.424"/>
<path fill="#010202" d="M-68.263-51.737c40.969-3.543,90.336-17.848,112.375-71.199c21.672,0,27.75-1.457,27.75-1.457
s7.984,10.535,46.078,30.594c7.219,3.789,29.203,82.59,29.203,82.59s4.063,15.594-7.297,16.906
c-11.359,1.277-31.953,0.438-31.953,0.438s26.492,208.734,26.688,210.516c-1.5,0.422-10.523,5.203-20.828,10.594
c-10.219,5.313-21.75,11.266-28.547,12.953c-0.438,0.125-5.469,1.359-7.781-3.25c-2.313-4.578,0.859-8.063,0.859-8.063
l22.281-19.641c0,0,0.625-1.117,0.594-1.875c-0.055-0.781-1.039-1.078-1.039-1.078l-36.422-0.281L29.432,29.4l-4.023,0.902
L58.651,206.54l-71.137,0.047L6.323-24.303l-72.211-0.203C-65.88-24.506-68.064-49.608-68.263-51.737"/>
<polygon fill="#FFFFFF" points="71.417,-102.768 74.057,-122.944 67.698,-109.143 48.846,-109.143 43.549,-121.881
45.909,-102.768 "/>
<rect x="42.995" y="-57.377" fill="#FFD730" width="47.797" height="32.145"/>
<rect x="33.713" y="-57.377" fill="#FFD730" width="7.18" height="32.145"/>
<rect x="27.338" y="-57.377" fill="#FFD730" width="4.508" height="32.145"/>
<path fill="#010202" d="M93.581-152.225c0,18.609-16.195,33.68-36.164,33.68c-19.984,0-36.176-15.07-36.176-33.68
c0-18.605,16.191-33.688,36.176-33.688C77.385-185.913,93.581-170.831,93.581-152.225"/>
<path fill="#FFFFFF" d="M56.612-167.127c8.313,0.16,22.836-2.891,19.922,14.805c-0.609,3.699,0,8.57,0,8.57
s0.547,5.664-0.156,9.414c-1.25,11.328-3.859,13.496-16.859,13.961c-15.344,0.547-15.063-0.969-17.563-7.191
c-5.672-17.281-3.328-30.551-3.328-30.551S40.026-167.409,56.612-167.127"/>
<path fill="#010202" d="M13.608,210.064c0,0-16.992,0-26.613-0.055c-6.426,9.023-25.891,6.328-31.082,6.609
c-4.559,0.266-7.695,3.219-7.695,7.969c0,4.773,3.953,8.016,8.207,8.016H5.288c5.938,0,7.715-5.359,7.715-5.359L13.608,210.064z"/>
<path fill="#FFFFFF" d="M65.94-0.346l-2.945-22.75l-15.742,0.109H32.549c-0.625,0-1.148,0.656-1.148,1.426
c0,0.801,0.508,1.441,1.148,1.441h11.688c0,0,0.297,2.031-0.57,2.078c0,0-12.883,0.234-13.461,0.234
c-0.594,0-4.285-3.25-4.285-3.25c-0.215-0.215-0.305-0.313-0.391-0.438c-0.152-0.219-0.207-0.578-0.207-0.578
c0-0.656-0.203-1.25-0.945-1.297c-0.754-0.047-1.328,0.426-1.41,1.098c-0.184,1.473,0.059,1.605,0.168,1.766
c0.098,0.168,0.242,0.426,4.699,4.855c0.215,0.313,0.773,0.516,1.133,0.508l11.77-0.066l0.109,2.184H28.881
c-0.641,0-1.152,0.641-1.152,1.441c0,0.785,0.504,1.426,1.152,1.426h12.074l0.109,2.031H29.44c-0.633,0-1.16,0.641-1.16,1.422
c0,0.801,0.52,1.426,1.16,1.426h11.766l0.078,2.145H30.19c-0.652,0-1.164,0.641-1.164,1.422c0,0.801,0.504,1.441,1.164,1.441
h14.953c0.047,0,0.109-0.051,0.172-0.051H65.94V-0.346z"/>
<path fill="#010202" d="M-116.494-50.264c0,1.832,1.285,4.77,4.918,4.77h13.801v21.215l57.594-0.215l-2.641-27.922l-73.672-0.07
V-50.264z"/>
<path fill="#FFFFFF" d="M-67.56-26.674l-2.215-23.543l-44.52-0.047c0,0.918,0.574,2.605,2.727,2.605h15.984v21.035L-67.56-26.674z"
/>
<path fill="#010202" d="M-110.287-47.639c-2.023,0-3.664,1.719-3.664,3.855c0,2.125,1.641,3.84,3.664,3.84h13.953
c2.039,0,3.672-1.723,3.672-3.84c0-2.145-1.633-3.855-3.672-3.855H-110.287z"/>
<path fill="#FFFFFF" d="M-110.287-45.456c-0.809,0-1.465,0.75-1.465,1.672c0,0.902,0.656,1.656,1.465,1.656h13.953
c0.824,0,1.496-0.754,1.496-1.656c0-0.922-0.672-1.672-1.496-1.672H-110.287z"/>
<path fill="#010202" d="M-109.263-41.69c-2.023,0-3.641,1.703-3.641,3.816c0,2.082,1.617,3.801,3.641,3.801h13.488
c2,0,3.633-1.719,3.633-3.801c0-2.113-1.633-3.816-3.633-3.816H-109.263z"/>
<path fill="#FFFFFF" d="M-109.263-39.506c-0.801,0-1.457,0.723-1.457,1.625c0,0.871,0.656,1.609,1.457,1.609h13.488
c0.793,0,1.449-0.738,1.449-1.609c0-0.902-0.656-1.625-1.449-1.625H-109.263z"/>
<path fill="#010202" d="M-108.767-35.897c-1.992,0-3.574,1.574-3.574,3.512c0,1.922,1.582,3.512,3.574,3.512h13.625
c1.984,0,3.59-1.59,3.59-3.512c0-1.938-1.605-3.512-3.59-3.512H-108.767z"/>
<path fill="#FFFFFF" d="M-108.767-33.69c-0.801,0-1.457,0.578-1.457,1.313c0,0.738,0.656,1.313,1.457,1.313h13.625
c0.809,0,1.445-0.574,1.445-1.313c0-0.734-0.637-1.313-1.445-1.313H-108.767z"/>
<path fill="#010202" d="M-107.904-30.905c-1.961,0-3.559,1.488-3.559,3.328c0,1.855,1.598,3.375,3.559,3.375h12.914
c1.977,0,3.566-1.512,3.566-3.375c0-1.84-1.59-3.328-3.566-3.328H-107.904L-107.904-30.905z"/>
<path fill="#FFFFFF" d="M-107.904-28.721c-0.758,0-1.375,0.512-1.375,1.145c0,0.641,0.617,1.168,1.375,1.168h12.914
c0.781,0,1.375-0.527,1.375-1.168c0-0.625-0.594-1.145-1.375-1.145H-107.904z"/>
<path fill="#010202" d="M47.924-147.194c0,1.229-1,2.207-2.195,2.207c-1.211,0-2.195-0.979-2.195-2.207
c0-1.215,0.984-2.199,2.195-2.199C46.924-149.401,47.924-148.409,47.924-147.194"/>
<path fill="#010202" d="M67.877-147.194c0,1.229-0.984,2.207-2.219,2.207c-1.188,0-2.188-0.979-2.188-2.207
c0-1.215,1-2.199,2.188-2.199C66.893-149.401,67.877-148.409,67.877-147.194"/>
<path fill="#010202" d="M59.76-154.522c-0.477,0.395-0.508,1.074-0.148,1.555c0.398,0.461,1.758,0.879,2.219,0.488
c0.125-0.105,3.844-2.121,4.781-1.953c1.656,0.32,3.672,0.895,6,2.063c0.547,0.273,1.172,0.25,1.547-0.23
c0.375-0.504,0.078-1.449-0.445-1.809C66.284-159.799,59.831-154.577,59.76-154.522"/>
<path fill="#010202" d="M42.713-154.616c-0.555,0.23-0.805,0.879-0.57,1.449c0.25,0.559,1.297,1.008,1.844,0.758
c1.188-0.504,4.266-1.734,6.125-0.449c1.094,0.793,1.563,2.395,1.391,4.785c-0.703,10-0.641,12.879-0.641,13.008
c0.016,0.586,0.477,1.063,1.063,1.09l9.031,0.344c0.609,0.023,0.672-2.191,0.086-2.219c0,0-6.25,0.219-7.906,0.145
c0.039-1.527,0.117-5.445,0.594-12.191c0.031-0.367,0.031-0.703,0.031-1.063c0-2.648,0.313-4.586-1.227-5.723
C49.088-157.194,42.924-154.729,42.713-154.616"/>
<path fill="#010202" d="M51.956-128.995c-0.914,0-1.656,0.73-1.656,1.648c0,0.914,0.742,1.664,1.656,1.664h10
c0.922,0,1.672-0.75,1.672-1.664c0-0.918-0.75-1.648-1.672-1.648H51.956z"/>
<g>
<g>
<g>
<g>
<defs>
<rect id="SVGID_3_" x="-175.873" y="-214.081" width="406.539" height="492.849"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_4_)" fill="none" stroke="#010202" stroke-width="3.048" d="M27.264-212.561h201.895V84.166
c0,106.625-90.352,193.063-201.766,193.063c-111.426,0-201.746-86.438-201.746-193.063v-296.727H27.264z"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.0 KiB