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
+70
View File
@@ -0,0 +1,70 @@
<?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.794px" height="493.177px" viewBox="-176.752 -214.492 406.794 493.177"
enable-background="new -176.752 -214.492 406.794 493.177" xml:space="preserve">
<g>
<path fill="#E8423F" d="M26.506-212.967h202.012V83.958c0,106.703-90.391,193.203-201.867,193.203L26.506-212.967z"/>
<path fill="#FFFFFF" d="M26.651,277.163L26.651,277.163c-111.504,0-201.879-86.5-201.879-193.204v-296.926H26.506L26.651,277.163z"
/>
<polygon fill="#FFFFFF" points="139.799,-167.901 153.37,-131.006 189.487,-131.006 160.963,-111.452 171.815,-76.436
139.799,-97.069 108.042,-76.436 118.877,-111.717 90.127,-131.006 126.221,-131.006 "/>
<polygon fill="none" stroke="#010202" stroke-width="3.048" points="139.799,-167.901 153.37,-131.006 189.487,-131.006
160.963,-111.452 171.815,-76.436 139.799,-97.069 108.042,-76.436 118.877,-111.717 90.127,-131.006 126.221,-131.006 "/>
<polygon fill="#FFFFFF" points="139.799,-78.151 153.37,-41.221 189.487,-41.221 160.963,-21.694 171.815,13.322 139.799,-7.303
108.042,13.322 118.877,-21.959 90.127,-41.221 126.221,-41.221 "/>
<polygon fill="none" stroke="#010202" stroke-width="3.048" points="139.799,-78.151 153.37,-41.221 189.487,-41.221
160.963,-21.694 171.815,13.322 139.799,-7.303 108.042,13.322 118.877,-21.959 90.127,-41.221 126.221,-41.221 "/>
<polygon fill="#FFFFFF" points="139.799,11.603 153.37,48.521 189.487,48.521 160.963,68.076 171.815,103.091 139.799,82.466
108.042,103.091 118.877,67.81 90.127,48.521 126.221,48.521 "/>
<polygon fill="none" stroke="#010202" stroke-width="3.048" points="139.799,11.603 153.37,48.521 189.487,48.521 160.963,68.076
171.815,103.091 139.799,82.466 108.042,103.091 118.877,67.81 90.127,48.521 126.221,48.521 "/>
<polygon fill="#FFFFFF" points="139.799,101.38 153.37,138.287 189.487,138.287 160.963,157.833 171.815,192.833 139.799,172.208
108.042,192.833 118.877,157.552 90.127,138.287 126.221,138.287 "/>
<polygon fill="none" stroke="#010202" stroke-width="3.048" points="139.799,101.38 153.37,138.287 189.487,138.287
160.963,157.833 171.815,192.833 139.799,172.208 108.042,192.833 118.877,157.552 90.127,138.287 126.221,138.287 "/>
<polygon fill="#E8423F" points="-86.47,-167.901 -72.9,-131.006 -36.806,-131.006 -65.302,-111.452 -54.447,-76.436
-86.47,-97.069 -118.228,-76.436 -107.373,-111.717 -136.15,-131.006 -100.052,-131.006 "/>
<polygon fill="none" stroke="#010202" stroke-width="3.048" points="-86.47,-167.901 -72.9,-131.006 -36.806,-131.006
-65.302,-111.452 -54.447,-76.436 -86.47,-97.069 -118.228,-76.436 -107.373,-111.717 -136.15,-131.006 -100.052,-131.006 "/>
<polygon fill="#E8423F" points="-86.47,-78.151 -72.9,-41.221 -36.806,-41.221 -65.302,-21.694 -54.447,13.322 -86.47,-7.303
-118.228,13.322 -107.373,-21.959 -136.15,-41.221 -100.052,-41.221 "/>
<polygon fill="none" stroke="#010202" stroke-width="3.048" points="-86.47,-78.151 -72.9,-41.221 -36.806,-41.221
-65.302,-21.694 -54.447,13.322 -86.47,-7.303 -118.228,13.322 -107.373,-21.959 -136.15,-41.221 -100.052,-41.221 "/>
<polygon fill="#E8423F" points="-86.47,11.603 -72.9,48.521 -36.806,48.521 -65.302,68.076 -54.447,103.091 -86.47,82.466
-118.228,103.091 -107.373,67.81 -136.15,48.521 -100.052,48.521 "/>
<polygon fill="none" stroke="#010202" stroke-width="3.048" points="-86.47,11.603 -72.9,48.521 -36.806,48.521 -65.302,68.076
-54.447,103.091 -86.47,82.466 -118.228,103.091 -107.373,67.81 -136.15,48.521 -100.052,48.521 "/>
<polygon fill="#E8423F" points="-86.47,101.38 -72.9,138.287 -36.806,138.287 -65.302,157.833 -54.447,192.833 -86.47,172.208
-118.228,192.833 -107.373,157.552 -136.15,138.287 -100.052,138.287 "/>
<polygon fill="none" stroke="#010202" stroke-width="3.048" points="-86.47,101.38 -72.9,138.287 -36.806,138.287 -65.302,157.833
-54.447,192.833 -86.47,172.208 -118.228,192.833 -107.373,157.552 -136.15,138.287 -100.052,138.287 "/>
<polygon fill="#E8423F" points="26.588,-126.862 -5.431,-106.495 5.452,-141.51 -23.068,-161.053 13.042,-161.053 26.588,-197.694
"/>
<polygon fill="#FFFFFF" points="26.588,-197.694 40.159,-160.772 76.276,-160.772 47.502,-141.51 58.635,-106.221 26.588,-126.862
"/>
<polygon fill="none" stroke="#010202" stroke-width="3.048" points="26.588,-197.694 40.159,-160.772 76.276,-160.772
47.502,-141.51 58.635,-106.221 26.588,-126.862 -5.431,-106.495 5.452,-141.51 -23.068,-161.053 13.042,-161.053 "/>
<polygon fill="#E8423F" points="26.588,-37.1 -5.431,-16.741 5.452,-51.756 -23.068,-71.295 13.042,-71.295 26.588,-107.936 "/>
<polygon fill="#FFFFFF" points="26.588,-107.936 40.159,-71.022 76.276,-71.022 47.502,-51.756 58.635,-16.479 26.588,-37.1 "/>
<polygon fill="none" stroke="#010202" stroke-width="3.048" points="26.588,-107.936 40.159,-71.022 76.276,-71.022
47.502,-51.756 58.635,-16.479 26.588,-37.1 -5.431,-16.741 5.452,-51.756 -23.068,-71.295 13.042,-71.295 "/>
<polygon fill="#E8423F" points="26.588,52.662 -5.431,73.021 5.452,38.021 -23.068,18.466 13.042,18.466 26.588,-18.167 "/>
<polygon fill="#FFFFFF" points="26.588,-18.167 40.159,18.748 76.276,18.748 47.502,38.021 58.635,73.287 26.588,52.662 "/>
<polygon fill="none" stroke="#010202" stroke-width="3.048" points="26.588,-18.167 40.159,18.748 76.276,18.748 47.502,38.021
58.635,73.287 26.588,52.662 -5.431,73.021 5.452,38.021 -23.068,18.466 13.042,18.466 "/>
<polygon fill="#E8423F" points="26.588,142.435 -5.431,162.794 5.452,127.779 -23.068,108.224 13.042,108.224 26.588,71.568 "/>
<polygon fill="#FFFFFF" points="26.588,71.568 40.159,108.49 76.276,108.49 47.502,127.779 58.635,163.052 26.588,142.435 "/>
<polygon fill="none" stroke="#010202" stroke-width="3.048" points="26.588,71.568 40.159,108.49 76.276,108.49 47.502,127.779
58.635,163.052 26.588,142.435 -5.431,162.794 5.452,127.779 -23.068,108.224 13.042,108.224 "/>
<polygon fill="#FFFFFF" points="26.588,161.349 40.159,198.255 76.276,198.255 47.502,217.521 58.635,252.81 26.588,232.177 "/>
<polygon fill="#E8423F" points="26.588,232.177 -5.431,252.551 5.452,217.521 -23.068,197.974 13.042,197.974 26.588,161.349 "/>
<g>
<path fill="none" stroke="#010202" stroke-width="3.048" d="M26.506-212.967l0.145,490.129 M26.506-212.967h202.012V83.958
c0,106.703-90.391,193.203-201.867,193.203c-111.504,0-201.879-86.5-201.879-193.203v-296.926L26.506-212.967L26.506-212.967z
M26.588,161.349l13.57,36.906h36.117l-28.789,19.266l11.148,35.28l-32.047-20.625l-32.02,20.375l10.875-35.03l-28.512-19.547
h36.109L26.588,161.349z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.7 KiB