<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>Ulf Schneider – Developer and Agile Coach</title>
  <subtitle>Hi, I´m Ulf Schneider, a software developer and agile coach living in Paderborn, Germany.</subtitle>
  <link href="https://ulfschneider.io/feed.xml" rel="self" />
  <link href="https://ulfschneider.io" />
  <updated>2026-04-16T14:20:12Z</updated>
  <id>https://ulfschneider.io</id>
  <author>
    <name>Ulf Schneider</name>
    <email>mail@ulfschneider.io</email>
  </author>
  <entry>
    <title>Keep your email address away from spammers</title>
    <link href="https://ulfschneider.io/2026-04-10-obfuscate-email/" />
    <updated>2026-04-12T08:06:45Z</updated>
    <id>https://ulfschneider.io/2026-04-10-obfuscate-email/</id>
    <content type="html"> &lt;p&gt;Use &lt;a href=&quot;https://spencermortensen.com/articles/email-obfuscation/&quot;&gt;&lt;cite&gt;Email address obfuscation: What works in 2026?&lt;/cite&gt;&lt;/a&gt; by Spencer Mortensen to keep your email address away from spammers.&lt;/p&gt;
&lt;p&gt;This could be a case for a web component combining multiple of the presented techniques. Unfortunately, what really works requires JavaScript, which can be an issue. My favorite pattern so far is &lt;em&gt;2.10 User Interaction&lt;/em&gt;, because it provides decent protection against spammers without additional library dependencies. I am using it with the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API&quot;&gt;Intersection Observer API&lt;/a&gt; and CSS class name selectors &lt;code&gt;.oma&lt;/code&gt; for &lt;em&gt;obfuscated email address&lt;/em&gt; and &lt;code&gt;.oml&lt;/code&gt; for &lt;em&gt;obfuscated email link&lt;/em&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-js&quot; data-language=&quot;JavaScript&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// email obfuscation&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; mObserver &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IntersectionObserver&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;decode&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;decode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token parameter&quot;&gt;entries&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; observer&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; parts &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;d&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;o&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;n&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;a&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;l&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;d&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;@&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;d&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;u&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;c&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;k&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;.&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;c&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;o&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;m&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; e &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; entries&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isIntersecting &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;classList&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;contains&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;oml&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;setAttribute&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;href&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;mai&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;lto&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;:&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; parts&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      mObserver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;unobserve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;isIntersecting &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;classList&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;contains&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;oma&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;innerText &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; parts&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
      mObserver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;unobserve&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;e&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;target&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;observe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;o &lt;span class=&quot;token keyword&quot;&gt;of&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;querySelectorAll&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;.oml,.oma&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    mObserver&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;observe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;o&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;readyState &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;loading&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;addEventListener&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;DOMContentLoaded&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; observe&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token function&quot;&gt;observe&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To challenge the crawler a bit more, you could put that script into a dedicated file &lt;code&gt;mail.js&lt;/code&gt;, and load it from inside of your &lt;code&gt;head&lt;/code&gt;, like:&lt;/p&gt;
&lt;pre class=&quot;language-js&quot; data-language=&quot;JavaScript&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;//challenge the crawler!&lt;/span&gt;
  &lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; s &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;createElement&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;script&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
  s&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;src &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;/js/mail.js&quot;&lt;/span&gt;
  document&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;head&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;appendChild&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;s&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt;script&lt;span class=&quot;token operator&quot;&gt;&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This will require the crawler to&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;execute JS,&lt;/li&gt;
&lt;li&gt;discover the dynamic script,&lt;/li&gt;
&lt;li&gt;load the script, and&lt;/li&gt;
&lt;li&gt;execute it,&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;to get your email address.&lt;/p&gt;

    <hr/><p><strong><a href="">Keep your email address away from spammers</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2026-04-10-obfuscate-email/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Have fun</title>
    <link href="https://ulfschneider.io/2026-04-03-have-fun/" />
    <updated>2026-04-03T08:14:10Z</updated>
    <id>https://ulfschneider.io/2026-04-03-have-fun/</id>
    <content type="html"> &lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/Xnm4fx19er-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/Xnm4fx19er-200.webp 200w, https://ulfschneider.io/img/Xnm4fx19er-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
    <hr/><p><strong><a href="">Have fun</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2026-04-03-have-fun/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>JSON Web Tokens</title>
    <link href="https://ulfschneider.io/2026-03-25-jwt/" />
    <updated>2026-03-25T09:34:52Z</updated>
    <id>https://ulfschneider.io/2026-03-25-jwt/</id>
    <content type="html"> &lt;p&gt;&lt;a href=&quot;https://www.jwt.io/introduction&quot;&gt;&lt;cite&gt;jwt.io/introduction&lt;/cite&gt;&lt;/a&gt; is a good introduction to JWTs.&lt;/p&gt;
&lt;p&gt;Tool-wise &lt;a href=&quot;https://www.authgear.com/tools/jwt-jwe-debugger&quot;&gt;&lt;cite&gt;authgear.com/tools/jwt-jwe-debugger&lt;/cite&gt;&lt;/a&gt; is probably a good choice, as it runs completely in the web browser. Authgear claims:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Your data security is our top priority. All encoding, decoding, encryption and decryption happen in this browser. This tool does not store or send your JWT and JWE outside of the browser.&lt;/p&gt;
&lt;/blockquote&gt;

    <hr/><p><strong><a href="">JSON Web Tokens</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2026-03-25-jwt/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Come, join our cycling route from Paderborn to Aarhus</title>
    <link href="https://ulfschneider.io/2026-03-14-44444/" />
    <updated>2026-04-10T16:22:08Z</updated>
    <id>https://ulfschneider.io/2026-03-14-44444/</id>
    <content type="html">&lt;p&gt;From May 30 to June 3, we will ride from Paderborn in Germany to Aarhus in Denmark in four days. The route covers 625 kilometers of road cycling with 3,190 meters of elevation gain. The event is organized by the &lt;a href=&quot;https://www.cyclingtoserve.org&quot;&gt;Rotary Fellowship Cycling to Serve&lt;/a&gt; in collaboration with local cycling clubs and everyone is invited to join! The &lt;a href=&quot;https://rad-treff-borchen.de/projekt-4-444-4/&quot;&gt;Rad-Treff Borchen planned the day-to-day routes&lt;/a&gt;.&lt;/p&gt;
 &lt;figure&gt;
&lt;iframe src=&quot;https://www.komoot.com/de-de/tour/2874466421/embed?share_token=aKv38DM6wNpIarZA6ON4Lf3qN5XtZfuXgg2W02fvQO9dWvXS4i&amp;amp;profile=1&quot; width=&quot;100%&quot; height=&quot;700&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;/figure&gt;
&lt;p&gt;This is not only an inspiring cycling event; it is a fantastic way to help! We&#39;re aiming to gather donations to buy &lt;a href=&quot;https://fund.worldbicyclerelief.org/de-DE/project/rotary-cycling-team?tab=ubersicht&amp;amp;yby6rfrrwwbr7xhah335hpglly=qLswiCWUFUZ1L3g2UXlSmGRfFxunUjgHxUAYBrnGf_VMOr4tOvUqUXbGdTD86ryAv54uklRx&quot;&gt;444 Buffalo Bikes&lt;/a&gt; for &lt;a href=&quot;https://worldbicyclerelief.org/&quot;&gt;World Bicycle Relief&lt;/a&gt;. 147 euros will fund a Buffalo Bike for someone in need.&lt;/p&gt;
&lt;p&gt;As we arrive in Aarhus, the &lt;a href=&quot;https://4days-favrskov.dk&quot;&gt;4Days of Favrskov&lt;/a&gt; will begin, and that&#39;s another cycling event aiming to contribute to the donation goal. So, the name &lt;span class=&quot;inline-block&quot;&gt;4 444 4&lt;/span&gt; might make more sense now – ride 4 days to help fund 444 bikes, and if you like, take part in the 4Days of Favrskov 😃!&lt;/p&gt;
&lt;p&gt;On our ride to Aarhus you’re welcome to join us 🚴 for a day or a part of a day! The route is divided into nine sections with clear meeting spots, so you can easily hop on. Riders with a German Cycling license can even earn official kilometers for their clubs during the event. Though, it´s not required to have a license nor to be organized with Rotary. Your passion for road cycling will bring you in.&lt;/p&gt;
&lt;dl class=&quot;line-list marker&quot;&gt;
&lt;dt&gt;May 29, 19:00 Warm up and fundraising party&lt;/dt&gt;
&lt;dd&gt;
Meet us at&lt;br&gt;
Deelenhaus&lt;br&gt;
Krämerstraße 8&lt;br&gt;
Paderborn&lt;/dd&gt;
&lt;dt&gt;May 30, 09:30 Paderborn → Detmold
&lt;/dt&gt;
&lt;dd&gt;
Starting point is&lt;br&gt;
Zahnmedizinisches Zentrum&lt;br&gt;
Mersingweg 26&lt;br&gt;
Paderborn
&lt;iframe src=&quot;https://www.komoot.com/de-de/tour/2843597669/embed?share_token=av4Et9Gvnn6crJsz5XEfCnMQ40MUh8PjB0JYOZgG2xVntVLH4S&amp;amp;profile=1&quot; width=&quot;100%&quot; height=&quot;700&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;/dd&gt;
&lt;dt&gt;May 30, 12:00 Detmold → Nienburg
&lt;/dt&gt;
&lt;dd&gt;
Starting point is&lt;br&gt;
Arminstraße 65A&lt;br&gt;
Detmold
&lt;iframe src=&quot;https://www.komoot.com/de-de/tour/2843606385/embed?profile=1&quot; width=&quot;100%&quot; height=&quot;700&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;/dd&gt;
&lt;dt&gt;May 31, 09:30 Nienburg → Rothenburg (Wümme)
&lt;/dt&gt;
&lt;dd&gt;
Starting point is&lt;br&gt;
Schlossplatz&lt;br&gt;
Nienburg
&lt;iframe src=&quot;https://www.komoot.com/de-de/tour/2874378512/embed?share_token=azYwp3gt3Mt7uTGsIuXONaWtiMGLYhyrO92fNLej6WZSenXjp5&amp;amp;profile=1&quot; width=&quot;100%&quot; height=&quot;700&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;/dd&gt;
&lt;dt&gt;May 31, 13:30 Rothenburg (Wümme) → Hamburg/Hagenbeck
&lt;/dt&gt;
&lt;dd&gt;
Starting point is&lt;br&gt;
Große Str. 1&lt;br&gt;
Rothenburg (Wümme)
&lt;iframe src=&quot;https://www.komoot.com/de-de/tour/2874383615/embed?share_token=aGOT2T4MDlEi8is6ClUl3Z6v3KT8gWnX2MGhYORqeQsmqdQsH7&amp;amp;profile=1&quot; width=&quot;100%&quot; height=&quot;700&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;/dd&gt;
&lt;dt&gt;June 1, 09:30 Hamburg → Aukrug
&lt;/dt&gt;
&lt;dd&gt;
Starting point is&lt;br&gt;
Tierpark Hagenbeck&lt;br&gt;
Lokstedter Grenzstraße 2&lt;br&gt;
Hamburg
&lt;iframe src=&quot;https://www.komoot.com/de-de/tour/2874384244/embed?share_token=aaRfo8uzsfbkycXx4gAsY46U2uwTHV62ajlZy45Zv0auv5rP5O&amp;amp;profile=1&quot; width=&quot;100%&quot; height=&quot;700&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;/dd&gt;
&lt;dt&gt;June 1, 13:30 Aukrug → Schleswig
&lt;/dt&gt;
&lt;dd&gt;
Starting point is&lt;br&gt;
Fahrrad Raststation und Eisdiele&lt;br&gt;
Itzehoer Str. 2&lt;br&gt;
Aukrug
&lt;iframe src=&quot;https://www.komoot.com/de-de/tour/2874385215/embed?share_token=a894QQDW0C2bD19Iv80Tjg9Pv2IbBor62XUoWKo1sMa0UE0AHy&amp;amp;profile=1&quot; width=&quot;100%&quot; height=&quot;700&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;/dd&gt;
&lt;dt&gt;June 2, 09:30 Schleswig → Flensburg
&lt;/dt&gt;
&lt;dd&gt;
Starting point is&lt;br&gt;
F-Ritz Hotel Schleswig&lt;br&gt;
Friedrichstr. 100&lt;br&gt;
Schleswig
&lt;iframe src=&quot;https://www.komoot.com/de-de/tour/2874386024/embed?share_token=aSY9TP25GZnYk0qbdkq4mVsitO44twvyI5EBzH3fK23FJOrjZG&amp;amp;profile=1&quot; width=&quot;100%&quot; height=&quot;700&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;/dd&gt;
&lt;dt&gt;June 2, 12:00 Flensburg → Vejle
&lt;/dt&gt;
&lt;dd&gt;
Starting point is&lt;br&gt;
Ben´s Fischhütte&lt;br&gt;
Museumshafen&lt;br&gt;
Flensburg
&lt;iframe src=&quot;https://www.komoot.com/de-de/tour/2874387064/embed?share_token=a5jKvS14D4rDht39G5Ou3OtrymKBOyRwnsF4rNp8n304Ld2zVD&amp;amp;profile=1&quot; width=&quot;100%&quot; height=&quot;700&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;/dd&gt;
&lt;dt&gt;June 3, 10:00 Vejle → Aarhus
&lt;/dt&gt;
&lt;dd&gt;
Starting point is&lt;br&gt;
Willy Sørensens Plads 3&lt;br&gt;
7100 Vejle
&lt;iframe src=&quot;https://www.komoot.com/de-de/tour/2874389414/embed?share_token=aXaKnPFzRs3ZrRZOJBAmxhyoOQsjPN6pk1Nxi3jQGE2kbiCHI8&amp;amp;profile=1&quot; width=&quot;100%&quot; height=&quot;700&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;
&lt;/dd&gt;
&lt;dt&gt;June 4, 15:00 Our final destination and the beginning of the &lt;a href=&quot;https://4days-favrskov.dk&quot;&gt;4Days of Favrskov&lt;/a&gt; in Aarhus&lt;/dt&gt;
&lt;/dl&gt;
&lt;figure&gt;&lt;img src=&quot;https://ulfschneider.io/img/0P_1ylXRJW-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;726&quot; srcset=&quot;https://ulfschneider.io/img/0P_1ylXRJW-200.webp 200w, https://ulfschneider.io/img/0P_1ylXRJW-1600.webp 1600w&quot; sizes=&quot;100vw&quot;&gt;&lt;/figure&gt;
    <hr/><p><strong><a href="">Come, join our cycling route from Paderborn to Aarhus</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2026-03-14-44444/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Coziness</title>
    <link href="https://ulfschneider.io/2026-03-09-coziness/" />
    <updated>2026-04-03T08:14:01Z</updated>
    <id>https://ulfschneider.io/2026-03-09-coziness/</id>
    <content type="html"> &lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/bjhgYUKAxQ-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/bjhgYUKAxQ-200.webp 200w, https://ulfschneider.io/img/bjhgYUKAxQ-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
    <hr/><p><strong><a href="">Coziness</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2026-03-09-coziness/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Laughter</title>
    <link href="https://ulfschneider.io/2026-02-03-laughter/" />
    <updated>2026-02-03T18:46:40Z</updated>
    <id>https://ulfschneider.io/2026-02-03-laughter/</id>
    <content type="html"> &lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/9GWAE6IfH9-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/9GWAE6IfH9-200.webp 200w, https://ulfschneider.io/img/9GWAE6IfH9-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
    <hr/><p><strong><a href="">Laughter</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2026-02-03-laughter/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Accessibility for everyone</title>
    <link href="https://ulfschneider.io/2026-02-03-accessibility-for-everyone/" />
    <updated>2026-02-03T18:46:33Z</updated>
    <id>https://ulfschneider.io/2026-02-03-accessibility-for-everyone/</id>
    <content type="html"> &lt;p&gt;&lt;a href=&quot;https://accessibilityforeveryone.site&quot;&gt;&lt;cite&gt;Accessibility for everyone&lt;/cite&gt;&lt;/a&gt; by Laura Kalbag is now available online for free.&lt;/p&gt;

    <hr/><p><strong><a href="">Accessibility for everyone</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2026-02-03-accessibility-for-everyone/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>pure prompt</title>
    <link href="https://ulfschneider.io/2026-01-27-pure/" />
    <updated>2026-01-28T06:06:31Z</updated>
    <id>https://ulfschneider.io/2026-01-27-pure/</id>
    <content type="html">&lt;p&gt;Pretty, minimal and fast ZSH prompt&lt;/p&gt;
 &lt;p&gt;&lt;a href=&quot;https://github.com/sindresorhus/pure&quot;&gt;&lt;cite&gt;pure&lt;/cite&gt;&lt;/a&gt; by Sindre Sorhus is a prompt enhancement for ZSH.&lt;/p&gt;
&lt;figure class=&quot;max-w-sm&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/cLqdfO9FTf-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;724&quot; height=&quot;138&quot; srcset=&quot;https://ulfschneider.io/img/cLqdfO9FTf-200.webp 200w, https://ulfschneider.io/img/cLqdfO9FTf-724.webp 724w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;My pure prompt. I like to see my current folder and the Git status in a dedicated line, followed by a new line for inputting my commands.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;My settings in the &lt;code&gt;.zshrc&lt;/code&gt; file:&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;# .zshrc &lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;# Pure prompt&lt;/span&gt;
&lt;span class=&quot;token assign-left variable&quot;&gt;fpath&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;&lt;span class=&quot;token variable&quot;&gt;&lt;span class=&quot;token variable&quot;&gt;$(&lt;/span&gt;brew &lt;span class=&quot;token parameter variable&quot;&gt;--prefix&lt;/span&gt;&lt;span class=&quot;token variable&quot;&gt;)&lt;/span&gt;&lt;/span&gt;/share/zsh/site-functions&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
autoload &lt;span class=&quot;token parameter variable&quot;&gt;-U&lt;/span&gt; promptinit&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; promptinit
prompt pure
zstyle :prompt:pure:path color cyan
zstyle :prompt:pure:git:branch color yellow&lt;/code&gt;&lt;/pre&gt;

    <hr/><p><strong><a href="">pure prompt</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2026-01-27-pure/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Learning Go</title>
    <link href="https://ulfschneider.io/2026-01-24-golang-resources/" />
    <updated>2026-02-14T11:47:37Z</updated>
    <id>https://ulfschneider.io/2026-01-24-golang-resources/</id>
    <content type="html">&lt;p&gt;I find these resources useful for learning Go&lt;/p&gt;
 &lt;div class=&quot;table-of-contents&quot;&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2026-01-24-golang-resources/#go&quot;&gt;Go&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2026-01-24-golang-resources/#test&quot;&gt;Test&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2026-01-24-golang-resources/#error-handling&quot;&gt;Error handling&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2026-01-24-golang-resources/#vulnerability-management&quot;&gt;Vulnerability management&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2026-01-24-golang-resources/#folder-structure&quot;&gt;Folder structure&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2026-01-24-golang-resources/#logging&quot;&gt;Logging&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2026-01-24-golang-resources/#json&quot;&gt;JSON&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
&lt;h2 id=&quot;go&quot; tabindex=&quot;-1&quot;&gt;Go&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://gobyexample.com&quot;&gt;&lt;cite&gt;gobyexample.com&lt;/cite&gt;&lt;/a&gt; excellent examples with short and clear explanations, by &lt;a href=&quot;https://markmcgranaghan.com&quot;&gt;Mark McGranaghan&lt;/a&gt; and &lt;a href=&quot;https://eli.thegreenplace.net&quot;&gt;Eli Bendersky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://threedots.tech/go-in-one-evening/&quot;&gt;&lt;cite&gt;Go in one evening&lt;/cite&gt;&lt;/a&gt; a practical course for experienced programmers. It´s excellent, but it took me more than one evening.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/@FloWoelki&quot;&gt;&lt;cite&gt;youtube.com/@FloWoelki&lt;/cite&gt;&lt;/a&gt; watch and listen while Florian is coding&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://google.github.io/styleguide/go/index&quot;&gt;&lt;cite&gt;Google Go Styleguide&lt;/cite&gt;&lt;/a&gt; &lt;q&gt;The Go Style Guide and accompanying documents codify the current best approaches for writing readable and idiomatic Go&lt;/q&gt; at Google. It has three parts: the style guide, a more verbose style decisions, and best practices.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://100go.co&quot;&gt;&lt;cite&gt;100 Go mistakes and how to avoid them&lt;/cite&gt;&lt;/a&gt; a summary of the original book with the same title by Teiva Harsanyi&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;test&quot; tabindex=&quot;-1&quot;&gt;Test&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=TG5cRcBihCM&quot;&gt;&lt;cite&gt;Testen in Go (Golang) in 90 Minuten // deutsch&lt;/cite&gt;&lt;/a&gt;, Golo Roden, the native web GmbH&lt;/p&gt;
&lt;h2 id=&quot;error-handling&quot; tabindex=&quot;-1&quot;&gt;Error handling&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://www.jetbrains.com/guide/go/tutorials/handle_errors_in_go/&quot;&gt;&lt;cite&gt;How to Handle Errors in Go&lt;/cite&gt;&lt;/a&gt;, JetBrains blog&lt;/p&gt;
&lt;h2 id=&quot;vulnerability-management&quot; tabindex=&quot;-1&quot;&gt;Vulnerability management&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck&quot;&gt;&lt;cite&gt;govulncheck&lt;/cite&gt;&lt;/a&gt; Go documentation&lt;/p&gt;
&lt;h2 id=&quot;folder-structure&quot; tabindex=&quot;-1&quot;&gt;Folder structure&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://go.dev/doc/modules/layout&quot;&gt;&lt;cite&gt;Organizing a Go module&lt;/cite&gt;&lt;/a&gt; the official Go guide&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/golang-standards/project-layout&quot;&gt;&lt;cite&gt;Standard Go Project Layout&lt;/cite&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=2k0GYWBGGFM&quot;&gt;&lt;cite&gt;Go (Golang): Endlich Struktur im Code // deutsch&lt;/cite&gt;&lt;/a&gt;, Golo Roden, the native Web GmbH, the recommendation is to not create a pkg folder&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/golang-learn/go-project-layout-e5213cdcfaa2&quot;&gt;&lt;cite&gt;Go Project Layout&lt;/cite&gt;&lt;/a&gt; article on Medium by Kyle C. Quest&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bontus.medium.com/embrace-the-internal-package-a-go-project-structure-for-clarity-2207bacb4bed&quot;&gt;&lt;cite&gt;Embrace the Internal Package: A Go-Project Structure for Clarity.&lt;/cite&gt;&lt;/a&gt; article on Medium by Ikwechegh Ukandu&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;logging&quot; tabindex=&quot;-1&quot;&gt;Logging&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://betterstack.com/community/guides/logging/logging-in-go/&quot;&gt;&lt;cite&gt;Logging in Go with Slog: The Ultimate Guide&lt;/cite&gt;&lt;/a&gt; a betterstack.com article by Ayooluwa Isaiah&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://betterstack.com/community/guides/logging/golang-contextual-logging/&quot;&gt;&lt;cite&gt;Contextual Logging in Go with Slog&lt;/cite&gt;&lt;/a&gt; a betterstack.com article by Percy Bolmér&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://dusted.codes/creating-a-pretty-console-logger-using-gos-slog-package&quot;&gt;&lt;cite&gt;Creating a pretty console logger using Go&#39;s slog package&lt;/cite&gt;&lt;/a&gt;, a concrete explanation resulting in a pretty useful slog TextHandler with colored console output that does not add any dependency to your code, Dusted Codes&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/golang/example/tree/master/slog-handler-guide&quot;&gt;&lt;cite&gt;A guide to writing slog handlers&lt;/cite&gt;&lt;/a&gt;, Jonathan Amsterdam, jba@google.com&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://pkuebler.de/posts/slog-glossy/&quot;&gt;&lt;cite&gt;Slog Handler für bessere Lesbarkeit in lokalen Logs&lt;/cite&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@thisara.weerakoon2001/implementing-a-dynamic-package-level-logger-in-go-949d573a2192&quot;&gt;&lt;cite&gt;Implementing a Dynamic Package-Level Logger in Go&lt;/cite&gt;&lt;/a&gt; a medium.com article by Thisara Weerakoon, this shows how to dynamically set log levels for certain packages and touches the &lt;a href=&quot;https://github.com/knadh/koanf&quot;&gt;&lt;cite&gt;koanf&lt;/cite&gt;&lt;/a&gt; package to manage the logging configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;json&quot; tabindex=&quot;-1&quot;&gt;JSON&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Convert JSON to Go structs with &lt;a href=&quot;https://mholt.github.io/json-to-go/&quot;&gt;&lt;cite&gt;JSON to Go&lt;/cite&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

    <hr/><p><strong><a href="">Learning Go</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2026-01-24-golang-resources/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Creating a scroll-spy with two lines of CSS</title>
    <link href="https://ulfschneider.io/2026-01-20-scroll-spy/" />
    <updated>2026-01-20T07:35:35Z</updated>
    <id>https://ulfschneider.io/2026-01-20-scroll-spy/</id>
    <content type="html"> &lt;p&gt;Two incredible lines of CSS code to reflect the current scroll position in a table of contents, by Una Kravets: &lt;a href=&quot;https://una.im/scroll-target-group/&quot;&gt;&lt;cite&gt;Creating a scroll-spy with 2 lines of CSS&lt;/cite&gt;&lt;/a&gt;. This required JavaScript coding in the past.&lt;/p&gt;

    <hr/><p><strong><a href="">Creating a scroll-spy with two lines of CSS</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2026-01-20-scroll-spy/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Good Luck and Success</title>
    <link href="https://ulfschneider.io/2026-01-01-good-luck-and-success/" />
    <updated>2026-01-01T13:16:23Z</updated>
    <id>https://ulfschneider.io/2026-01-01-good-luck-and-success/</id>
    <content type="html"> &lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/oVszQFleUw-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/oVszQFleUw-200.webp 200w, https://ulfschneider.io/img/oVszQFleUw-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
    <hr/><p><strong><a href="">Good Luck and Success</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2026-01-01-good-luck-and-success/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>bikeinsights.com</title>
    <link href="https://ulfschneider.io/2025-12-27-bike-insights/" />
    <updated>2025-12-28T06:37:22Z</updated>
    <id>https://ulfschneider.io/2025-12-27-bike-insights/</id>
    <content type="html"> &lt;p&gt;&lt;a href=&quot;https://bikeinsights.com&quot;&gt;&lt;cite&gt;bikeinsights.com&lt;/cite&gt;&lt;/a&gt; offers a bike geometry database that allows to search and compare bike frames. Their blog article &lt;a href=&quot;https://blog.bikeinsights.com/how-bikes-are-measured/&quot;&gt;&lt;cite&gt;How Bikes are Measured&lt;/cite&gt;&lt;/a&gt; made me aware normalizing the different ways of measuring bikes is absolutely required to come to meaningful comparisons of bike frames.&lt;/p&gt;

    <hr/><p><strong><a href="">bikeinsights.com</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-12-27-bike-insights/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Sentimental Chaos</title>
    <link href="https://ulfschneider.io/2025-12-23-sentimental-chaos/" />
    <updated>2025-12-23T14:38:49Z</updated>
    <id>https://ulfschneider.io/2025-12-23-sentimental-chaos/</id>
    <content type="html"> &lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/_V0enbw67o-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/_V0enbw67o-200.webp 200w, https://ulfschneider.io/img/_V0enbw67o-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Sentimental Chaos&lt;/figcaption&gt;
&lt;/figure&gt;
    <hr/><p><strong><a href="">Sentimental Chaos</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-12-23-sentimental-chaos/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>qrvc</title>
    <link href="https://ulfschneider.io/tools/qrvc/" />
    <updated>2026-01-07T13:43:04Z</updated>
    <id>https://ulfschneider.io/tools/qrvc/</id>
    <content type="html">&lt;p&gt;Use the command line to make a QR code from a vCard&lt;/p&gt;
 &lt;p&gt;&lt;a href=&quot;https://pkg.go.dev/github.com/ulfschneider/qrvc&quot;&gt;&lt;cite&gt;qrvc&lt;/cite&gt;&lt;/a&gt; is a command line tool that allows to prepare a QR code from vCard data.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/LZAIatoE45-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;400&quot; height=&quot;400&quot; srcset=&quot;https://ulfschneider.io/img/LZAIatoE45-200.webp 200w, https://ulfschneider.io/img/LZAIatoE45-400.webp 400w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;A QR code for a fictional vCard&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;One way to create the QR code is by providing a vCard file as input and process that. If you do not have a vCard file, &lt;strong&gt;qrvc&lt;/strong&gt; will ask you for data input and will then create a vCard file and a QR code for you.&lt;/p&gt;
&lt;p&gt;Your data remains on your computer and nowhere else.&lt;/p&gt;
&lt;figure class=&quot;max-w-prose&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/pceeBgJtmS-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1090&quot; height=&quot;1012&quot; srcset=&quot;https://ulfschneider.io/img/pceeBgJtmS-200.webp 200w, https://ulfschneider.io/img/pceeBgJtmS-1090.webp 1090w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;&lt;strong&gt;qrvc&lt;/strong&gt; in interactive mode&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;installation&quot; tabindex=&quot;-1&quot;&gt;Installation&lt;/h2&gt;
&lt;h3 id=&quot;install-with-homebrew-on-mac-and-linux&quot; tabindex=&quot;-1&quot;&gt;Install with Homebrew on Mac and Linux&lt;/h3&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;brew tap ulfschneider/tap
brew &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;--cask&lt;/span&gt; qrvc&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;install-with-go-on-any-machine-that-has-go-on-board&quot; tabindex=&quot;-1&quot;&gt;Install with Go on any machine that has Go on board&lt;/h3&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;go &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; github.com/ulfschneider/qrvc@latest&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;manual-install&quot; tabindex=&quot;-1&quot;&gt;Manual install&lt;/h3&gt;
&lt;p&gt;You can also download the appropriate binary directly from GitHub Releases:&lt;/p&gt;
&lt;p&gt;Visit &lt;a href=&quot;https://github.com/ulfschneider/qrvc/releases&quot;&gt;github.com/ulfschneider/qrvc/releases&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download the archive matching your OS and architecture&lt;/li&gt;
&lt;li&gt;Extract it&lt;/li&gt;
&lt;li&gt;Move the binary to a directory included in your PATH (for example /usr/local/bin)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;verify-the-installation&quot; tabindex=&quot;-1&quot;&gt;Verify the installation&lt;/h3&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;qrvc &lt;span class=&quot;token parameter variable&quot;&gt;--version&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This command should print out the qrvc version you are using.&lt;/p&gt;
&lt;h2 id=&quot;usage&quot; tabindex=&quot;-1&quot;&gt;Usage&lt;/h2&gt;
&lt;p&gt;After installation, start the tool by typing:&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;qrvc&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;When using the &lt;code&gt;-h&lt;/code&gt; flag, you get information about how to use it:&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;qrvc &lt;span class=&quot;token parameter variable&quot;&gt;-h&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

    <hr/><p><strong><a href="">qrvc</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/tools/qrvc/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Freeze</title>
    <link href="https://ulfschneider.io/2025-11-23-freeze/" />
    <updated>2025-11-28T05:37:37Z</updated>
    <id>https://ulfschneider.io/2025-11-23-freeze/</id>
    <content type="html">&lt;p&gt;Make images from text&lt;/p&gt;
 &lt;p&gt;&lt;a href=&quot;https://github.com/charmbracelet/freeze&quot;&gt;&lt;cite&gt;Freeze&lt;/cite&gt;&lt;/a&gt; can create images from text files and from shell command output. E.g.&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;freeze &lt;span class=&quot;token parameter variable&quot;&gt;--execute&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;ls -ls&quot;&lt;/span&gt; &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; freeze-ls-ls.png&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;will create a file &lt;code&gt;freeze-ls-ls.png&lt;/code&gt; that shows the result of the &lt;code&gt;ls -ls&lt;/code&gt; command, which looks like:&lt;/p&gt;
&lt;figure class=&quot;max-w-prose&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/3bLZaNAsQ9-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2207&quot; height=&quot;468&quot; srcset=&quot;https://ulfschneider.io/img/3bLZaNAsQ9-200.webp 200w, https://ulfschneider.io/img/3bLZaNAsQ9-2207.webp 2207w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Output of &lt;code&gt;freeze --execute &quot;ls -ls&quot; -o freeze-ls-ls.png&lt;/code&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;You can get an image of a text file, like a &lt;code&gt;go.mod&lt;/code&gt; file, as well. Issue the command&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;freeze go.mod &lt;span class=&quot;token parameter variable&quot;&gt;-o&lt;/span&gt; freeze-go-mod.png&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and get the following image:&lt;/p&gt;
&lt;figure class=&quot;max-w-prose&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/lxLgYFILF1-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2840&quot; height=&quot;1744&quot; srcset=&quot;https://ulfschneider.io/img/lxLgYFILF1-200.webp 200w, https://ulfschneider.io/img/lxLgYFILF1-2840.webp 2840w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Output of &lt;code&gt;freeze go.mod -o freeze-go-mod.png&lt;/code&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Because Freeze is written in Go, you can use it on any operating system.&lt;/p&gt;

    <hr/><p><strong><a href="">Freeze</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-11-23-freeze/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Adjust pointer size and pointer color on a Mac</title>
    <link href="https://ulfschneider.io/2025-11-15-pointer-color/" />
    <updated>2025-11-15T06:31:34Z</updated>
    <id>https://ulfschneider.io/2025-11-15-pointer-color/</id>
    <content type="html"> &lt;p&gt;I often struggle to spot the current mouse pointer location. By default the pointer is small and the white color does not have enough contrast. To help with that I change those settings on MacOS in the menu:&lt;/p&gt;
&lt;p&gt;System settings → Accessibility → Display → Pointer&lt;/p&gt;
&lt;p&gt;There it is possible to set size, border color and fill color for the pointer.&lt;/p&gt;

    <hr/><p><strong><a href="">Adjust pointer size and pointer color on a Mac</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-11-15-pointer-color/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>One-time passcodes without JavaScript</title>
    <link href="https://ulfschneider.io/2025-11-12-simple-otps/" />
    <updated>2025-11-12T16:58:13Z</updated>
    <id>https://ulfschneider.io/2025-11-12-simple-otps/</id>
    <content type="html"> &lt;p&gt;Tyler Sticka shows how to do OTP´s (one-time passcodes) in his article &lt;a href=&quot;https://cloudfour.com/thinks/simple-one-time-passcode-inputs/&quot;&gt;&lt;cite&gt;Simple One-Time Passcode Inputs&lt;/cite&gt;&lt;/a&gt;. The key element is the &lt;code&gt;autocomplete=&amp;quot;one-time-code&amp;quot;&lt;/code&gt; setting on the &lt;code&gt;input&lt;/code&gt; element, which adds support for autofill from password managers or via SMS. The other attributes make typing in the code more convenient and activate client-side input validation:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; data-language=&quot;HTML&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;form&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;action&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;…&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;method&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;post&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Verify Account&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;label&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;otp&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    Enter the 6-digit numeric code sent to +1 (555) 555-5555
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;label&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;input&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;otp&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;inputmode&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;numeric&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;autocomplete&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;one-time-code&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;maxlength&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;6&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;pattern&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&#92;d{6}&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
    &lt;span class=&quot;token attr-name&quot;&gt;required&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    Continue
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;button&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;a&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;…&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
    Try another way…
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;a&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;form&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One by one:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;code&gt;type=&amp;quot;text&amp;quot;&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;OTP´s appear as a number, but a six digit &lt;code&gt;000004&lt;/code&gt; is not the a countable number, but a sequence of 6 digits, therefore the OTP is treated as text&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;inputmode=&amp;quot;numeric&amp;quot;&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;enable the numeric virtual keyboard on touch devices&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;autocomplete=&amp;quot;one-time-code&amp;quot;&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;this add´s support for &lt;a href=&quot;https://cloudfour.com/thinks/autofill-what-web-devs-should-know-but-dont/&quot;&gt;autofill&lt;/a&gt; from password managers or via &lt;a href=&quot;https://web.dev/articles/sms-otp-form&quot;&gt;SMS&lt;/a&gt;&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;maxlength=&amp;quot;6&amp;quot;&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;prevent users putting in more than 6 digits&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;pattern=&amp;quot;&#92;d{6}&amp;quot;&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;we want 6 digits, and no other values&lt;/dd&gt;
&lt;dt&gt;&lt;code&gt;required&lt;/code&gt;&lt;/dt&gt;
&lt;dd&gt;make the field mandatory&lt;/dd&gt;
&lt;/dl&gt;

    <hr/><p><strong><a href="">One-time passcodes without JavaScript</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-11-12-simple-otps/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>SmoothCSV</title>
    <link href="https://ulfschneider.io/2025-10-17-smoothcsv/" />
    <updated>2025-10-17T05:44:25Z</updated>
    <id>https://ulfschneider.io/2025-10-17-smoothcsv/</id>
    <content type="html">&lt;p&gt;A cross-platform editor for &lt;code&gt;.csv&lt;/code&gt; files&lt;/p&gt;
 &lt;p&gt;This feels like Markdown for spreadsheets: &lt;a href=&quot;https://smoothcsv.com&quot;&gt;&lt;cite&gt;SmoothCSV&lt;/cite&gt;&lt;/a&gt; is a cross-platform app made by &lt;a href=&quot;https://github.com/kohii&quot;&gt;kohii&lt;/a&gt;, which allows to comfortably edit &lt;code&gt;.csv&lt;/code&gt; files.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;.csv&lt;/code&gt; files are text files that can be created, read, and shared with any tool capable of handling text. SmoothCSV can pick up and create &lt;code&gt;.csv&lt;/code&gt;  files with a comprehensive editing experience – on Mac and Windows. SmoothCSV is fast, probably because it´s written in Rust. kohii explains how he created the tool in his dev.to article &lt;a href=&quot;https://dev.to/kohii/the-technology-behind-smoothcsv-the-ultimate-csv-editor-3lg0&quot;&gt;&lt;cite&gt;The Technology Behind SmoothCSV - The Ultimate CSV Editor&lt;/cite&gt;&lt;/a&gt;.&lt;/p&gt;

    <hr/><p><strong><a href="">SmoothCSV</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-10-17-smoothcsv/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Build possibility</title>
    <link href="https://ulfschneider.io/2025-10-17-build-possibility/" />
    <updated>2026-01-07T09:27:10Z</updated>
    <id>https://ulfschneider.io/2025-10-17-build-possibility/</id>
    <content type="html"> &lt;blockquote&gt;
&lt;p&gt;Buy stability. Build possibility.&lt;/p&gt;
&lt;footer&gt;Ben Werdmüller, &lt;a href=&quot;https://werd.io/build-what-makes-you-special-buy-the-rest/&quot;&gt;&lt;cite&gt;Build what makes you special. Buy the rest.&lt;/cite&gt;&lt;/a&gt;&lt;/footer&gt;
&lt;/blockquote&gt;
&lt;p&gt;This sounds true! When deciding to buy or to build a software solution, build what makes you special, what differentiates you.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Getting your build vs buy balance right is how you achieve table stakes: stable infrastructure, reliable publishing, sustainable engineering. But that sets you up for &lt;em&gt;today&lt;/em&gt;. In order for any business to future-proof itself, it needs to make a bet on what the future will look like and build for &lt;em&gt;that&lt;/em&gt;.&lt;/p&gt;
&lt;footer&gt;Ben Werdmüller&lt;/footer&gt;
&lt;/blockquote&gt;

    <hr/><p><strong><a href="">Build possibility</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-10-17-build-possibility/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Plex</title>
    <link href="https://ulfschneider.io/tools/plex/" />
    <updated>2025-10-24T20:00:38Z</updated>
    <id>https://ulfschneider.io/tools/plex/</id>
    <content type="html">&lt;p&gt;The iA Presenter theme based on the IBM Plex® typeface&lt;/p&gt;
 &lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/J-TDPU_FNh-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;2400&quot; height=&quot;1452&quot; srcset=&quot;https://ulfschneider.io/img/J-TDPU_FNh-200.webp 200w, https://ulfschneider.io/img/J-TDPU_FNh-2400.webp 2400w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Plex is a custom theme for iA Presenter&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://ia.net/presenter&quot;&gt;iA Presenter&lt;/a&gt; is my favorite software for writing and presenting a &lt;em&gt;story&lt;/em&gt;. Presenter comes with a set of themes to provide a suitable visual style for your message. You can add your own &lt;em&gt;custom themes&lt;/em&gt; to fit the tool even better to your needs. That´s what I did with Plex: It is a custom iA Presenter theme based on the IBM Plex® typeface with vibrant dynamic background colors.&lt;/p&gt;
&lt;p&gt;See it here: &lt;a href=&quot;https://ulfschneider.io/assets/plex/&quot;&gt;&lt;strong&gt;Plex in action&lt;/strong&gt;&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Download Plex at &lt;a href=&quot;https://github.com/ulfschneider/plex&quot;&gt;&lt;cite&gt;github.com/ulfschneider/plex&lt;/cite&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tell your story.&lt;/p&gt;

    <hr/><p><strong><a href="">Plex</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/tools/plex/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>fork .</title>
    <link href="https://ulfschneider.io/2025-10-15-fork-from-the-terminal/" />
    <updated>2025-10-15T05:56:04Z</updated>
    <id>https://ulfschneider.io/2025-10-15-fork-from-the-terminal/</id>
    <content type="html"> &lt;p&gt;When you are in the Terminal on a Mac inside of a Git repository, and you use the &lt;a href=&quot;https://git-fork.com&quot;&gt;Fork Git client&lt;/a&gt;, it´s perfectly doable to open the current repo in Fork by issuing the command:&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;fork &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As a one-time prerequisite, install the Fork Command Line Tools from the Fork menu bar by navigating to Fork → Install Command Line Tools.&lt;/p&gt;
&lt;p&gt;From any folder within the terminal, to open the current folder in the Finder, issue the command:&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;span class=&quot;token function&quot;&gt;open&lt;/span&gt; &lt;span class=&quot;token builtin class-name&quot;&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

    <hr/><p><strong><a href="">fork .</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-10-15-fork-from-the-terminal/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Pure Paste</title>
    <link href="https://ulfschneider.io/2025-10-01-pure-paste/" />
    <updated>2025-10-01T05:46:15Z</updated>
    <id>https://ulfschneider.io/2025-10-01-pure-paste/</id>
    <content type="html"> &lt;p&gt;The tiny &lt;em&gt;Sindre Sorhus-style&lt;/em&gt; app &lt;a href=&quot;https://sindresorhus.com/pure-paste&quot;&gt;&lt;cite&gt;Pure Paste&lt;/cite&gt;&lt;/a&gt; sits in the menu bar and clears the formatting of text pasted from the clipboard.&lt;/p&gt;
&lt;p&gt;For example, you can paste text into an email and avoid polluting your message with the source formatting. That makes a lot of sense to me and is probably useful in any text-authoring situation.&lt;/p&gt;
&lt;p&gt;The app can do even more clever things when pasting. From the following list of options I have activated the ones marked with (on):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preserve links&lt;/li&gt;
&lt;li&gt;Remove tracking parameters from URLs (on)&lt;/li&gt;
&lt;li&gt;Trim leading and trailing whitespace&lt;/li&gt;
&lt;li&gt;Normalize quotes (on)&lt;/li&gt;
&lt;li&gt;Normalize newlines (on)&lt;/li&gt;
&lt;li&gt;Normalize unordered lists (on)&lt;/li&gt;
&lt;li&gt;Remove invisible characters (on)&lt;/li&gt;
&lt;li&gt;Remove footnote references (on)&lt;/li&gt;
&lt;li&gt;Remove mailto: prefix from email addresses (on)&lt;/li&gt;
&lt;/ul&gt;

    <hr/><p><strong><a href="">Pure Paste</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-10-01-pure-paste/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Unknown at rules with Tailwind CSS in Zed</title>
    <link href="https://ulfschneider.io/2025-09-25-unknown-at-rule/" />
    <updated>2025-09-27T16:29:36Z</updated>
    <id>https://ulfschneider.io/2025-09-25-unknown-at-rule/</id>
    <content type="html"> &lt;p&gt;My Zed editor was complaining about unknown at rules (like &lt;code&gt;@apply&lt;/code&gt;) when using Tailwind CSS.&lt;/p&gt;
&lt;figure class=&quot;max-w-prose&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/1UJeejr0hJ-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1516&quot; height=&quot;214&quot; srcset=&quot;https://ulfschneider.io/img/1UJeejr0hJ-200.webp 200w, https://ulfschneider.io/img/1UJeejr0hJ-1516.webp 1516w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Unknown at rule @apply&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;You can solve this issue by adding the following lines to your Zed &lt;code&gt;settings.json&lt;/code&gt;:&lt;/p&gt;
&lt;pre class=&quot;language-json&quot; data-language=&quot;JSON&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token property&quot;&gt;&quot;languages&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;&quot;CSS&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token property&quot;&gt;&quot;language_servers&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;tailwindcss-language-server&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

    <hr/><p><strong><a href="">Unknown at rules with Tailwind CSS in Zed</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-09-25-unknown-at-rule/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Riding with the RMC</title>
    <link href="https://ulfschneider.io/2025-09-18-riding-with-the-rmc/" />
    <updated>2025-09-24T15:54:54Z</updated>
    <id>https://ulfschneider.io/2025-09-18-riding-with-the-rmc/</id>
    <content type="html"> &lt;figure&gt;
&lt;video controls=&quot;&quot;&gt;
&lt;source src=&quot;https://ulfschneider.io/assets/2025-09-18-riding-with-the-rmc.mp4&quot; type=&quot;video/mp4&quot;&gt;
&lt;/video&gt;
&lt;figcaption&gt;The high season of bike riding is ending. Yesterday, the RMC Schloss Neuhaus held its regular training session. Though I ride at the RTB in Borchen, the RMC welcomes guest riders, and we know each other from biking events, therefore I took a chance for a pleasant ride in the beautiful landscape with great company.
&lt;/figcaption&gt;
&lt;/figure&gt;

    <hr/><p><strong><a href="">Riding with the RMC</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-09-18-riding-with-the-rmc/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Remove the pedals</title>
    <link href="https://ulfschneider.io/2025-09-06-remove-pedals/" />
    <updated>2025-09-06T07:03:31Z</updated>
    <id>https://ulfschneider.io/2025-09-06-remove-pedals/</id>
    <content type="html"> &lt;figure&gt;
&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/t42lXHGtUp4?si=5NuRlWjjy-mEkghQ&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot; referrerpolicy=&quot;strict-origin-when-cross-origin&quot; allowfullscreen=&quot;&quot; style=&quot;aspect-ratio:560/315; max-width:100%; height:auto; width:65ch;&quot;&gt;&lt;/iframe&gt;
&lt;figcaption&gt; If you’ve ever wondered what the correct thread direction is to remove a pedal from a crank arm, this video is for you! Excellent practical advice. &lt;a href=&quot;https://youtu.be/t42lXHGtUp4?si=ym0KYXjHmcLWloEb&quot;&gt;Get it right every time&lt;/a&gt;.&lt;/figcaption&gt;
&lt;/figure&gt;
    <hr/><p><strong><a href="">Remove the pedals</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-09-06-remove-pedals/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Tuesday evening</title>
    <link href="https://ulfschneider.io/2025-09-05-tuesday-training-ride/" />
    <updated>2025-09-05T05:56:47Z</updated>
    <id>https://ulfschneider.io/2025-09-05-tuesday-training-ride/</id>
    <content type="html"> &lt;p&gt;My cycling club’s Tuesday training ride was exceptional this week. The beautiful light, mild temperature, and inspiring comrades made it unforgettable. We will meet again on Sunday, for the &lt;a href=&quot;https://www.komoot.com/de-de/collection/3731022/-herbst-rtf-die-maehdreschertour-2025&quot;&gt;Mähdrescher Tour&lt;/a&gt;, organized by the RSG Harsewinkel.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/sKVdPytZNf-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/sKVdPytZNf-200.webp 200w, https://ulfschneider.io/img/sKVdPytZNf-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/GWFUuuWgTL-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/GWFUuuWgTL-200.webp 200w, https://ulfschneider.io/img/GWFUuuWgTL-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/3DY144ABbE-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/3DY144ABbE-200.webp 200w, https://ulfschneider.io/img/3DY144ABbE-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;

    <hr/><p><strong><a href="">Tuesday evening</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-09-05-tuesday-training-ride/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Tools for Designers</title>
    <link href="https://ulfschneider.io/2025-08-26-tools-for-designers/" />
    <updated>2025-08-26T06:06:03Z</updated>
    <id>https://ulfschneider.io/2025-08-26-tools-for-designers/</id>
    <content type="html"> &lt;p&gt;&lt;a href=&quot;https://www.learnui.design/tools/&quot;&gt;&lt;cite&gt;Tools for Designers&lt;/cite&gt;&lt;/a&gt; provides great (and free) tools to help with colors and web typography:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.learnui.design/tools/gradient-generator.html&quot;&gt;Gradient Generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.learnui.design/tools/mesh-gradient-generator.html&quot;&gt;Mesh Gradient Generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.learnui.design/tools/data-color-picker.html&quot;&gt;Data Visualization Color Picker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.learnui.design/tools/accessible-color-generator.html&quot;&gt;Accessible Color Generator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.learnui.design/tools/typography-tutorial.html&quot;&gt;Interactive Typography Tutorial&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

    <hr/><p><strong><a href="">Tools for Designers</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-08-26-tools-for-designers/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>An official logo for CSS</title>
    <link href="https://ulfschneider.io/2025-08-26-css-logo/" />
    <updated>2025-08-28T05:03:32Z</updated>
    <id>https://ulfschneider.io/2025-08-26-css-logo/</id>
    <content type="html"> &lt;p&gt;CSS, the &lt;em&gt;awesome&lt;/em&gt; language that controls how HTML looks in the browser, &lt;a href=&quot;https://github.com/CSS-Next/logo.css&quot;&gt;has a new logo&lt;/a&gt; . The background is &lt;code&gt;rebeccapurple&lt;/code&gt;, which I find a &lt;a href=&quot;https://meyerweb.com/eric/thoughts/2014/06/19/rebeccapurple/&quot;&gt;beautiful color choice&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At some point there was the idea by Amit Sheen to spill the CSS text &lt;a href=&quot;https://www.ondrejkonecny.com/blog/kind-of-rebeccapurple/&quot;&gt;slightly out of the framing container&lt;/a&gt;, which, as a nod to &lt;a href=&quot;https://css-tricks.com/css-is-awesome/&quot;&gt;CSS is Awesome&lt;/a&gt;, I liked even more. It seems the participants of the discussion disliked the association of CSS with something unpredictable and chaotic, so they refrained from going into that direction. Unfortunately. Here is the &lt;a href=&quot;https://github.com/CSS-Next/css-next/issues/105&quot;&gt;discussion thread&lt;/a&gt;.&lt;/p&gt;
&lt;figure class=&quot;max-w-sm&quot;&gt;
&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://ulfschneider.io/img/q5hl2Gyv4G-200.webp 200w, https://ulfschneider.io/img/q5hl2Gyv4G-1000.webp 1000w&quot; sizes=&quot;100vw&quot;&gt;&lt;img alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://ulfschneider.io/img/q5hl2Gyv4G-1000.svg&quot; width=&quot;1000&quot; height=&quot;1000&quot;&gt;&lt;/picture&gt;
&lt;figcaption&gt;The official CSS logo&lt;/figcaption&gt;
&lt;/figure&gt;
    <hr/><p><strong><a href="">An official logo for CSS</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-08-26-css-logo/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Color Lisa</title>
    <link href="https://ulfschneider.io/2025-08-26-color-lisa/" />
    <updated>2025-08-26T06:11:27Z</updated>
    <id>https://ulfschneider.io/2025-08-26-color-lisa/</id>
    <content type="html"> &lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;https://colorlisa.com&quot;&gt;&lt;cite&gt;colorlisa.com&lt;/cite&gt;&lt;/a&gt; is a curated list of color palettes based on masterpieces of the worlds greatest artists. Each palette was painstakingly created by color obsessed designers, artists, museum curators, and masters of color theory. Palettes are constantly being added to help keep your designs colorful and fresh.&lt;/p&gt;
&lt;footer&gt;&lt;a href=&quot;https://www.mcguiremade.com&quot;&gt;Ryan McGuire&lt;/a&gt;, community artist and creator of Color Lisa&lt;/footer&gt;&lt;/blockquote&gt;

    <hr/><p><strong><a href="">Color Lisa</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-08-26-color-lisa/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Lidl Deutschland Tour – Course Festival in Borchen</title>
    <link href="https://ulfschneider.io/2025-08-22-deutschland-tour-borchen/" />
    <updated>2025-08-22T05:11:35Z</updated>
    <id>https://ulfschneider.io/2025-08-22-deutschland-tour-borchen/</id>
    <content type="html"> &lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/ZYxgkZCIg8-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1754&quot; height=&quot;2480&quot; srcset=&quot;https://ulfschneider.io/img/ZYxgkZCIg8-200.webp 200w, https://ulfschneider.io/img/ZYxgkZCIg8-1754.webp 1754w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;The Lidl Deutschland Tour passes through Borchen today. On this occasion, the Rad-Treff Borchen is hosting a course festival with delicious food and drinks at the parish hall in Borchen, right next to the route. Come, have a good time and see the racers passing by. More information on the  &lt;a href=&quot;https://rad-treff-borchen.de/deutschland-tour-streckenfest/&quot;&gt;Rad-Treff Borchen&lt;/a&gt; website and on &lt;a href=&quot;https://www.deutschland-tour.com/&quot;&gt;deutschland-tour.com&lt;/a&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

    <hr/><p><strong><a href="">Lidl Deutschland Tour – Course Festival in Borchen</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-08-22-deutschland-tour-borchen/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Text-to-Chart</title>
    <link href="https://ulfschneider.io/2025-08-16-text-to-chart/" />
    <updated>2025-09-04T06:08:08Z</updated>
    <id>https://ulfschneider.io/2025-08-16-text-to-chart/</id>
    <content type="html">&lt;p&gt;&lt;em&gt;Text-to-chart&lt;/em&gt; is the process of describing a diagram in text form,  and letting software render the actual output. I´ve been investigating the topic by examining &lt;a href=&quot;https://mermaid.js.org&quot;&gt;Mermaid&lt;/a&gt;, a free software library created in 2014 by Knut Sveidqvist with a focus on &lt;em&gt;development related charts&lt;/em&gt;, and &lt;a href=&quot;https://echarts.apache.org/&quot;&gt;ECharts&lt;/a&gt;, a flexible general-purpose diagramming solution that follows the &lt;em&gt;code-to-chart&lt;/em&gt; approach. Unlike Mermaid, which uses a domain-specific language, ECharts is relying on JavaScript to describe the diagrams it renders.&lt;/p&gt;
&lt;p&gt;Along the way I couldn´t resist to write two markdown-it plugins, allowing to integrate the charting solutions into your &lt;a href=&quot;https://daringfireball.net/projects/markdown/syntax&quot;&gt;Markdown&lt;/a&gt; writing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/markdown-it-mermaid-server&quot;&gt;markdown-it-mermaid-server&lt;/a&gt;, and&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.npmjs.com/package/markdown-it-responsive-echarts&quot;&gt;markdown-it-responsive-echarts&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This document is my current state of learning the topic. All example charts are rendered by the mentioned plugins.&lt;/p&gt;
 &lt;div class=&quot;table-of-contents&quot;&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#text-to-chart%2C-what-is-it-good-for%3F&quot;&gt;Text-to-chart, what is it good for?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#could-there-be-problems%3F&quot;&gt;Could there be problems?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#mermaid&quot;&gt;Mermaid&lt;/a&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#mermaid-flowchart&quot;&gt;Mermaid Flowchart&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#mermaid-radar-chart&quot;&gt;Mermaid Radar Chart&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#mermaid-sankey-chart&quot;&gt;Mermaid Sankey Chart&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#mermaid-pie-chart&quot;&gt;Mermaid Pie Chart&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#mermaid-xy-chart&quot;&gt;Mermaid XY Chart&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#mermaid-chart-appearance&quot;&gt;Mermaid Chart Appearance&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#echarts&quot;&gt;ECharts&lt;/a&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#echarts-pie-chart&quot;&gt;ECharts Pie Chart&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#echarts-xy-chart&quot;&gt;ECharts XY Chart&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#echarts-radar-chart&quot;&gt;ECharts Radar Chart&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#echarts-sankey-chart&quot;&gt;ECharts Sankey Chart&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#echarts-large-area-chart&quot;&gt;ECharts Large Area Chart&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-08-16-text-to-chart/#conclusion&quot;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
&lt;h2 id=&quot;text-to-chart%2C-what-is-it-good-for%3F&quot; tabindex=&quot;-1&quot;&gt;Text-to-chart, what is it good for?&lt;/h2&gt;
&lt;p&gt;The idea of creating charts from text is appealing to me since I got aware of Mermaid several years ago. When creating output for the web by writing Markdown, text-to-chart has similar advantages as &lt;a href=&quot;https://daringfireball.net/projects/markdown/syntax&quot;&gt;Markdown&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Use your environment&lt;/strong&gt;: Write chart definitions with any text editor, which means, you can stay in your familiar writing environment without installing additional software to create the charts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Quick&lt;/strong&gt;: Save time because your focus is on data, content and writing, and not on formatting. It´s important to mention, the time-saving aspect is only achieved if the text-to-chart software suits your context in terms of syntax and available diagram types!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ideal web output&lt;/strong&gt;: The charts can be created in a web-friendly output format – in the case of Mermaid it can be SVG, PNG or PDF. SVG, I believe, is a good starting point for charts on the web, because it is lightweight and scales well up and down.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Standardized output&lt;/strong&gt;: The resulting charts have a standardized appearance and can be themed to a certain look, which means you can fit the charts into your design language. This again might help to improve shared understanding in collaborative contexts, because even with multiple people creating charts, the charts are rendered by the same rules and thus create a kind of a shared language.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Up-to-date charts&lt;/strong&gt;: The possibility of quick text-based changes leading to optimal output rendering helps to avoid what the Mermaid creator Knut Sveidqvist calls &lt;em&gt;doc-rot,&lt;/em&gt; the gap between a current development state and the outdated diagram documentation aiming to describe that state. This gives a hint that Mermaid has a tendency to provide diagrams that fit well into the software development domain, like flowcharts or sequence diagrams. Other text-to-chart software can have a different focus and produce different diagram types with the same general advantages for your workflow. The benefit of always having up-to-date charts published in the correct standardized look on even a large website is huge, in my view.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Version control&lt;/strong&gt;: The chart definitions are made of text and as such can be versioned in an excellent way by Git.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fast and lightweight delivery&lt;/strong&gt;: Sometimes the charts can be rendered as part of the build process of a static website on the server, which means users get the charts as quick and as lean as possible delivered to their web browsers, without the need to run JavaScript on the browser. This can be done with Mermaid and it makes sense in that case, because Mermaid charts do not offer options for interactive changes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interaction&lt;/strong&gt;: When the charts are rendered by JavaScript on the browser client, as opposed to the server, you can have other advantages, like interactive charts, allowing to filter out certain visualization aspects to analyze the data. ECharts delivers charts this way.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;could-there-be-problems%3F&quot; tabindex=&quot;-1&quot;&gt;Could there be problems?&lt;/h2&gt;
&lt;p&gt;There can be downsides.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Syntax&lt;/strong&gt;: The syntax of text-to-chart, in this case the Mermaid-syntax, as simple as the maintainers are aiming to keep it, takes time to learn. I sometimes have to visit the Mermaid website to understand how to achieve certain results. Same comes true with code-to-chart in ECharts. There are certain building blocks which appear repeatedly, which helps a lot getting into the concepts, but the resulting charts can cover such a wide range of visualization variants that it´s natural the code handling requires learning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Feedback loop&lt;/strong&gt;: When rendering the charts within the build process of a static website, the feedback cycle to see what chart is getting produced by processing your textual definition is slowed down, because every change of the chart definition requires a build step to get the chart results.  To overcome this problem, Mermaid has a free online editor &lt;a href=&quot;https://mermaid.live/&quot;&gt;mermaid.live&lt;/a&gt; which you can use to set up diagrams and see immediately how your chart does look like. Once you have your desired result, you can copy your chart definition and paste it into the final location. ECharts is the same. Their online editor is &lt;a href=&quot;https://echarts.apache.org/examples/editor.html&quot;&gt;echarts.apache.org/examples/editor.html&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Software complexity&lt;/strong&gt;: Generating charts at build time or at run time is more complex than creating an image once and referencing that image in your website. You can be sure a web browser is able to visualize a .png image or a .jpg image 20 years into the future without the need for you to ever touch it. Generating charts on the other hand will touch your chart definition with every build or with every page view and will carry out computational tasks to translate your text into a graphic. Sure there are chances something might break and your users will end up seeing no chart at all. You have to have your software stack under control to keep this in a working state.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;mermaid&quot; tabindex=&quot;-1&quot;&gt;Mermaid&lt;/h2&gt;
&lt;p&gt;Mermaid has its roots in creating &lt;em&gt;development charts&lt;/em&gt; from text, like flowcharts, sequence diagrams, and state diagrams. The mind map chart  can as well be seen to be in this domain. A strength of Mermaid is the lean syntax for describing the charts, and Sveidqvist´s intent to fight doc-rot is well addressed in my view. There are good ideas in Mermaid, but the actual execution could be more standardized. The different chart types sometimes appear to me as not generated by the same software but by different software stacks.&lt;/p&gt;
&lt;p&gt;Mermaid supports class diagrams, but generating them directly from your code base with a different software might be more effective.&lt;/p&gt;
&lt;h3 id=&quot;mermaid-flowchart&quot; tabindex=&quot;-1&quot;&gt;Mermaid Flowchart&lt;/h3&gt;
&lt;p&gt;You can create a flowchart by adding a few lines of text to your Markdown document, like below:&lt;/p&gt;
&lt;pre class=&quot;language-markdown&quot; data-language=&quot;Markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;mermaid&lt;/span&gt;
&lt;span class=&quot;token code-block language-mermaid language-mermaid language-mermaid&quot;&gt;flowchart LR

start --&gt; decision
decision --&gt; optionA &amp;amp; optionB

start([&quot;Start&quot;])
decision{&quot;Decision&quot;}
optionA[&quot;Option A&quot;]
optionB[&quot;Option B&quot;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above  chart definition will produce the following diagram, and the simplicity of the creation is a source of joy to me.&lt;/p&gt;
&lt;figure class=&quot;mermaid&quot;&gt;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;svg id=&quot;mermaid-hwlewqnilcww&quot; width=&quot;100%&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;flowchart&quot; style=&quot;max-width: 431.4174499511719px;&quot; viewBox=&quot;0.0000019073486328125 0 431.4174499511719 174&quot; role=&quot;graphics-document document&quot; aria-roledescription=&quot;flowchart-v2&quot; aria-label=&quot;A flowchart starting at a node &amp;amp;quot;Start&amp;amp;quot;, flowing to a decision point &amp;amp;quot;Decision&amp;amp;quot;, from where the flow can go further to either node &amp;amp;quot;Option A&amp;amp;quot; or &amp;amp;quot;Option B&amp;amp;quot;&quot;&gt;&lt;style&gt;#mermaid-hwlewqnilcww{font-family:arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-hwlewqnilcww .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-hwlewqnilcww .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-hwlewqnilcww .error-icon{fill:#552222;}#mermaid-hwlewqnilcww .error-text{fill:#552222;stroke:#552222;}#mermaid-hwlewqnilcww .edge-thickness-normal{stroke-width:1px;}#mermaid-hwlewqnilcww .edge-thickness-thick{stroke-width:3.5px;}#mermaid-hwlewqnilcww .edge-pattern-solid{stroke-dasharray:0;}#mermaid-hwlewqnilcww .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-hwlewqnilcww .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-hwlewqnilcww .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-hwlewqnilcww .marker{fill:#333333;stroke:#333333;}#mermaid-hwlewqnilcww .marker.cross{stroke:#333333;}#mermaid-hwlewqnilcww svg{font-family:arial,sans-serif;font-size:16px;}#mermaid-hwlewqnilcww p{margin:0;}#mermaid-hwlewqnilcww .label{font-family:arial,sans-serif;color:#333;}#mermaid-hwlewqnilcww .cluster-label text{fill:#333;}#mermaid-hwlewqnilcww .cluster-label span{color:#333;}#mermaid-hwlewqnilcww .cluster-label span p{background-color:transparent;}#mermaid-hwlewqnilcww .label text,#mermaid-hwlewqnilcww span{fill:#333;color:#333;}#mermaid-hwlewqnilcww .node rect,#mermaid-hwlewqnilcww .node circle,#mermaid-hwlewqnilcww .node ellipse,#mermaid-hwlewqnilcww .node polygon,#mermaid-hwlewqnilcww .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-hwlewqnilcww .rough-node .label text,#mermaid-hwlewqnilcww .node .label text,#mermaid-hwlewqnilcww .image-shape .label,#mermaid-hwlewqnilcww .icon-shape .label{text-anchor:middle;}#mermaid-hwlewqnilcww .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-hwlewqnilcww .rough-node .label,#mermaid-hwlewqnilcww .node .label,#mermaid-hwlewqnilcww .image-shape .label,#mermaid-hwlewqnilcww .icon-shape .label{text-align:center;}#mermaid-hwlewqnilcww .node.clickable{cursor:pointer;}#mermaid-hwlewqnilcww .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-hwlewqnilcww .arrowheadPath{fill:#333333;}#mermaid-hwlewqnilcww .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-hwlewqnilcww .flowchart-link{stroke:#333333;fill:none;}#mermaid-hwlewqnilcww .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-hwlewqnilcww .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-hwlewqnilcww .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-hwlewqnilcww .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-hwlewqnilcww .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-hwlewqnilcww .cluster text{fill:#333;}#mermaid-hwlewqnilcww .cluster span{color:#333;}#mermaid-hwlewqnilcww div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-hwlewqnilcww .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-hwlewqnilcww rect.text{fill:none;stroke-width:0;}#mermaid-hwlewqnilcww .icon-shape,#mermaid-hwlewqnilcww .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-hwlewqnilcww .icon-shape p,#mermaid-hwlewqnilcww .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-hwlewqnilcww .icon-shape .label rect,#mermaid-hwlewqnilcww .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-hwlewqnilcww .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-hwlewqnilcww .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-hwlewqnilcww :root{--mermaid-font-family:arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;marker id=&quot;mermaid-hwlewqnilcww_flowchart-v2-pointEnd&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;5&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;8&quot; markerHeight=&quot;8&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 0 0 L 10 5 L 0 10 z&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 1; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;mermaid-hwlewqnilcww_flowchart-v2-pointStart&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;4.5&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;8&quot; markerHeight=&quot;8&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 0 5 L 10 10 L 10 0 z&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 1; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;mermaid-hwlewqnilcww_flowchart-v2-circleEnd&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;11&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11&quot; markerHeight=&quot;11&quot; orient=&quot;auto&quot;&gt;&lt;circle cx=&quot;5&quot; cy=&quot;5&quot; r=&quot;5&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 1; stroke-dasharray: 1, 0;&quot;&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id=&quot;mermaid-hwlewqnilcww_flowchart-v2-circleStart&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;-1&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11&quot; markerHeight=&quot;11&quot; orient=&quot;auto&quot;&gt;&lt;circle cx=&quot;5&quot; cy=&quot;5&quot; r=&quot;5&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 1; stroke-dasharray: 1, 0;&quot;&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id=&quot;mermaid-hwlewqnilcww_flowchart-v2-crossEnd&quot; class=&quot;marker cross flowchart-v2&quot; viewBox=&quot;0 0 11 11&quot; refX=&quot;12&quot; refY=&quot;5.2&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11&quot; markerHeight=&quot;11&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 1,1 l 9,9 M 10,1 l -9,9&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 2; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;mermaid-hwlewqnilcww_flowchart-v2-crossStart&quot; class=&quot;marker cross flowchart-v2&quot; viewBox=&quot;0 0 11 11&quot; refX=&quot;-1&quot; refY=&quot;5.2&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11&quot; markerHeight=&quot;11&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 1,1 l 9,9 M 10,1 l -9,9&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 2; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;g class=&quot;root&quot;&gt;&lt;g class=&quot;clusters&quot;&gt;&lt;/g&gt;&lt;g class=&quot;edgePaths&quot;&gt;&lt;path d=&quot;M72.324,87.5L76.407,87.417C80.49,87.333,88.657,87.167,96.24,87.083C103.824,87,110.824,87,114.324,87L117.824,87&quot; id=&quot;L_start_decision_0&quot; class=&quot;edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link&quot; style=&quot;;&quot; data-edge=&quot;true&quot; data-et=&quot;edge&quot; data-id=&quot;L_start_decision_0&quot; data-points=&quot;W3sieCI6NzIuMzIzNzEyNDMxODI2NzksInkiOjg3LjV9LHsieCI6OTYuODIzNzExMzk1MjYzNjcsInkiOjg3fSx7IngiOjEyMS44MjM3MTEzOTUyNjM2NywieSI6ODd9XQ==&quot; marker-end=&quot;url(#mermaid-hwlewqnilcww_flowchart-v2-pointEnd)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M220.95,64.001L228.95,59.168C236.95,54.334,252.949,44.667,264.452,39.834C275.954,35,282.959,35,286.462,35L289.964,35&quot; id=&quot;L_decision_optionA_0&quot; class=&quot;edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link&quot; style=&quot;;&quot; data-edge=&quot;true&quot; data-et=&quot;edge&quot; data-id=&quot;L_decision_optionA_0&quot; data-points=&quot;W3sieCI6MjIwLjk1MDA2OTQ3NTg0MzEyLCJ5Ijo2NC4wMDEzNTgwODA1Nzk0NX0seyJ4IjoyNjguOTQ4NzExMzk1MjYzNywieSI6MzV9LHsieCI6MjkzLjk2NDMzNjM5NTI2MzcsInkiOjM1fV0=&quot; marker-end=&quot;url(#mermaid-hwlewqnilcww_flowchart-v2-pointEnd)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M220.95,109.999L228.95,114.832C236.95,119.666,252.949,129.333,264.449,134.166C275.949,139,282.949,139,286.449,139L289.949,139&quot; id=&quot;L_decision_optionB_0&quot; class=&quot;edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link&quot; style=&quot;;&quot; data-edge=&quot;true&quot; data-et=&quot;edge&quot; data-id=&quot;L_decision_optionB_0&quot; data-points=&quot;W3sieCI6MjIwLjk1MDA2OTQ3NTg0MzEyLCJ5IjoxMDkuOTk4NjQxOTE5NDIwNTV9LHsieCI6MjY4Ljk0ODcxMTM5NTI2MzcsInkiOjEzOX0seyJ4IjoyOTMuOTQ4NzExMzk1MjYzNywieSI6MTM5fV0=&quot; marker-end=&quot;url(#mermaid-hwlewqnilcww_flowchart-v2-pointEnd)&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;edgeLabels&quot;&gt;&lt;g class=&quot;edgeLabel&quot;&gt;&lt;g class=&quot;label&quot; data-id=&quot;L_start_decision_0&quot; transform=&quot;translate(0, 0)&quot;&gt;&lt;foreignObject width=&quot;0&quot; height=&quot;0&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; class=&quot;labelBkg&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;edgeLabel&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;edgeLabel&quot;&gt;&lt;g class=&quot;label&quot; data-id=&quot;L_decision_optionA_0&quot; transform=&quot;translate(0, 0)&quot;&gt;&lt;foreignObject width=&quot;0&quot; height=&quot;0&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; class=&quot;labelBkg&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;edgeLabel&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;edgeLabel&quot;&gt;&lt;g class=&quot;label&quot; data-id=&quot;L_decision_optionB_0&quot; transform=&quot;translate(0, 0)&quot;&gt;&lt;foreignObject width=&quot;0&quot; height=&quot;0&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; class=&quot;labelBkg&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;edgeLabel&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;nodes&quot;&gt;&lt;g class=&quot;node default&quot; id=&quot;flowchart-start-0&quot; transform=&quot;translate(39.911855697631836, 87)&quot;&gt;&lt;g class=&quot;basic label-container outer-path&quot;&gt;&lt;path d=&quot;M-12.421875 -19.5 C-5.1821702323154035 -19.5, 2.057534535369193 -19.5, 12.421875 -19.5 C12.421875 -19.5, 12.421874999999998 -19.5, 12.421874999999998 -19.5 C12.71749665736574 -19.49051998884093, 13.01311831473148 -19.48103997768186, 13.6712442896239 -19.45993515863156 C14.126342413710677 -19.41603238993648, 14.581440537797455 -19.3721296212414, 14.915479652847864 -19.3399052695533 C15.39431795281403 -19.262490406661247, 15.873156252780193 -19.185075543769194, 16.14946825967676 -19.140403561325776 C16.59046760500258 -19.03974833854483, 17.0314669503284 -18.93909311576388, 17.36813938623539 -18.862249829261074 C17.79670786501894 -18.73505295435997, 18.225276343802495 -18.607856079458863, 18.566485251460602 -18.50658706670804 C18.936960450693967 -18.370248768754962, 19.307435649927328 -18.233910470801884, 19.739581595147794 -18.074876768247425 C19.979058088162024 -17.968867628607793, 20.218534581176254 -17.862858488968158, 20.88260791279238 -17.568892924097174 C21.12559155778321 -17.44212851214391, 21.36857520277404 -17.31536410019065, 21.990867264076783 -16.990714730406097 C22.398568021651606 -16.743564135248644, 22.806268779226425 -16.496413540091194, 23.059805573605697 -16.342718045390892 C23.46533227673864 -16.059840172253395, 23.87085897987158 -15.776962299115896, 24.085030344578712 -15.627565626425154 C24.368923152543722 -15.401168666777954, 24.652815960508736 -15.174771707130754, 25.06232870850187 -14.848196188198123 C25.357861122375326 -14.579801469277434, 25.653393536248778 -14.311406750356747, 25.987684736767985 -14.007812326905688 C26.24951698099417 -13.737449037915114, 26.511349225220354 -13.467085748924541, 26.857295942968648 -13.10986736009568 C27.07311384172692 -12.856355375827892, 27.288931740485186 -12.602843391560102, 27.667588908126582 -12.158051136245305 C27.872307336433096 -11.883747092547067, 28.07702576473961 -11.609443048848826, 28.415233964640635 -11.156274872382312 C28.647101449471904 -10.800064150543864, 28.878968934303174 -10.443853428705419, 29.097158878604247 -10.108655082055241 C29.31190660708917 -9.727348744564743, 29.526654335574094 -9.346042407074243, 29.7105614742735 -9.019496659696287 C29.83610070736827 -8.758811756065715, 29.96163994046304 -8.498126852435142, 30.25292114880834 -7.893275190886684 C30.41463820553663 -7.49383093418122, 30.57635526226492 -7.094386677475757, 30.722009229970325 -6.734618561215508 C30.86987772100847 -6.289262225853201, 31.017746212046614 -5.843905890490894, 31.11589813421488 -5.548287939305138 C31.234528675752543 -5.0958982696201, 31.353159217290205 -4.6435085999350605, 31.43296928754556 -4.339158212148133 C31.508505697268486 -3.951294712846753, 31.584042106991415 -3.5634312135453734, 31.671919776581777 -3.1121979531509023 C31.713182711362244 -2.7921707792817037, 31.754445646142713 -2.472143605412505, 31.831767702509367 -1.872449005199798 C31.85809748729041 -1.4623413542152517, 31.88442727207146 -1.0522337032307054, 31.911856215913414 -0.6250057626472757 C31.911856215913414 -0.21843516336106528, 31.911856215913414 0.18813543592514514, 31.911856215913414 0.625005762647271 C31.88365238792751 1.0643031492479453, 31.855448559941603 1.5036005358486195, 31.831767702509367 1.8724490051997846 C31.79572772716687 2.1519679370580933, 31.75968775182437 2.4314868689164024, 31.671919776581777 3.1121979531508885 C31.62110268893017 3.373132958046616, 31.570285601278563 3.634067962942343, 31.43296928754556 4.339158212148129 C31.313514237721723 4.794692089272514, 31.19405918789788 5.2502259663969, 31.115898134214884 5.548287939305125 C31.027973249418036 5.8131036833852905, 30.940048364621187 6.0779194274654555, 30.72200922997033 6.734618561215495 C30.539195695785452 7.186171525111379, 30.356382161600575 7.637724489007264, 30.252921148808344 7.893275190886679 C30.142271266799174 8.123042038406926, 30.031621384790004 8.352808885927171, 29.710561474273504 9.019496659696284 C29.582546066149664 9.246800979785892, 29.45453065802582 9.4741052998755, 29.09715887860425 10.108655082055236 C28.953556473061486 10.32926693961409, 28.80995406751872 10.549878797172946, 28.41523396464064 11.156274872382301 C28.215452219652082 11.423964210175582, 28.015670474663526 11.691653547968862, 27.667588908126582 12.158051136245302 C27.452647786717748 12.4105332079484, 27.237706665308917 12.663015279651498, 26.85729594296866 13.10986736009567 C26.590002631667094 13.385869649203519, 26.32270932036553 13.661871938311366, 25.98768473676799 14.007812326905684 C25.642247587760707 14.321529205867979, 25.296810438753425 14.635246084830275, 25.062328708501887 14.848196188198111 C24.708149464717323 15.130644710010795, 24.35397022093276 15.41309323182348, 24.085030344578715 15.627565626425152 C23.740301537844545 15.868033518933384, 23.395572731110377 16.108501411441615, 23.059805573605708 16.34271804539089 C22.67210072097918 16.577747005459702, 22.284395868352654 16.812775965528516, 21.990867264076787 16.990714730406093 C21.57680864210189 17.20672884827319, 21.162750020127 17.422742966140287, 20.882607912792388 17.56889292409717 C20.610264077519282 17.68945146117974, 20.337920242246177 17.81000999826231, 19.739581595147804 18.07487676824742 C19.36347037390921 18.21328917439724, 18.987359152670614 18.351701580547058, 18.566485251460616 18.506587066708033 C18.23911000739069 18.603750320720266, 17.911734763320766 18.700913574732496, 17.368139386235413 18.86224982926107 C16.9546626586031 18.956623194155338, 16.54118593097079 19.050996559049604, 16.149468259676766 19.140403561325773 C15.718614199150911 19.21006070450845, 15.287760138625055 19.27971784769113, 14.915479652847878 19.3399052695533 C14.536261471834381 19.37648799139908, 14.157043290820884 19.413070713244863, 13.6712442896239 19.45993515863156 C13.33465783605184 19.470728831071828, 12.998071382479777 19.481522503512096, 12.421875000000004 19.5 C12.421875000000002 19.5, 12.421875000000002 19.5, 12.421875 19.5 C3.761055505043691 19.5, -4.899763989912618 19.5, -12.421874999999996 19.5 C-12.899495320300133 19.48468364595953, -13.377115640600271 19.469367291919063, -13.671244289623893 19.45993515863156 C-13.963436481302775 19.43174772931282, -14.255628672981656 19.403560299994083, -14.915479652847871 19.3399052695533 C-15.171651094450446 19.298489457514194, -15.427822536053021 19.25707364547509, -16.14946825967676 19.140403561325773 C-16.49310848612022 19.0619699221021, -16.83674871256368 18.983536282878426, -17.368139386235388 18.862249829261074 C-17.661111331069204 18.775297293875518, -17.954083275903024 18.68834475848996, -18.56648525146059 18.506587066708043 C-18.83785711431045 18.406719712645295, -19.109228977160306 18.306852358582546, -19.739581595147797 18.074876768247425 C-20.15293318807917 17.891898279696054, -20.566284781010545 17.70891979114468, -20.88260791279238 17.568892924097174 C-21.16845588597241 17.41976621958352, -21.454303859152436 17.270639515069863, -21.99086726407678 16.990714730406097 C-22.313964633596914 16.794851206272092, -22.637062003117048 16.598987682138088, -23.059805573605686 16.3427180453909 C-23.407274188848035 16.100338981071765, -23.754742804090384 15.857959916752627, -24.085030344578712 15.627565626425156 C-24.42569379734436 15.355895588279754, -24.766357250110005 15.084225550134352, -25.06232870850187 14.848196188198125 C-25.377077039073416 14.562350082157526, -25.69182536964496 14.276503976116926, -25.987684736767974 14.007812326905697 C-26.20635925583292 13.782012932459237, -26.425033774897862 13.556213538012779, -26.857295942968655 13.109867360095677 C-27.155632763691667 12.759423954628424, -27.45396958441468 12.40898054916117, -27.66758890812658 12.158051136245307 C-27.921097438511854 11.818372800631266, -28.174605968897133 11.478694465017226, -28.415233964640635 11.156274872382316 C-28.607178145468865 10.861397066400729, -28.799122326297095 10.566519260419142, -29.097158878604244 10.108655082055249 C-29.2510494131905 9.835406854790946, -29.40493994777676 9.562158627526646, -29.7105614742735 9.019496659696289 C-29.884656735407887 8.65798412490889, -30.058751996542274 8.296471590121488, -30.25292114880834 7.893275190886686 C-30.34885391857404 7.656319394831479, -30.444786688339743 7.419363598776273, -30.722009229970325 6.73461856121551 C-30.831479249583484 6.404912303819666, -30.940949269196647 6.075206046423823, -31.11589813421488 5.5482879393051325 C-31.191995393926618 5.258096107263293, -31.268092653638355 4.967904275221453, -31.432969287545557 4.339158212148136 C-31.52134337651446 3.8853759431631585, -31.609717465483357 3.431593674178181, -31.671919776581777 3.112197953150904 C-31.72975610470723 2.663630813284675, -31.787592432832685 2.215063673418446, -31.831767702509364 1.872449005199809 C-31.86361724397658 1.3763666883607426, -31.8954667854438 0.880284371521676, -31.911856215913414 0.6250057626472781 C-31.911856215913414 0.25641294892686384, -31.911856215913414 -0.11217986479355047, -31.911856215913414 -0.6250057626472687 C-31.8945091106931 -0.8952009287849407, -31.87716200547279 -1.1653960949226128, -31.831767702509367 -1.8724490051997822 C-31.79698990347429 -2.1421787468626445, -31.76221210443921 -2.4119084885255067, -31.671919776581777 -3.112197953150895 C-31.580337981115296 -3.582451117051949, -31.488756185648814 -4.0527042809530025, -31.43296928754556 -4.339158212148126 C-31.358711111642062 -4.6223368205651845, -31.284452935738564 -4.905515428982242, -31.115898134214884 -5.548287939305123 C-30.963846803738083 -6.006242320611705, -30.81179547326128 -6.464196701918286, -30.722009229970332 -6.734618561215485 C-30.585504124016513 -7.071788812068101, -30.448999018062697 -7.408959062920717, -30.252921148808344 -7.893275190886676 C-30.065542411285925 -8.282371148614695, -29.878163673763503 -8.671467106342714, -29.710561474273504 -9.019496659696282 C-29.503765287821146 -9.38668422912702, -29.296969101368788 -9.75387179855776, -29.097158878604247 -10.108655082055243 C-28.907242433401958 -10.400417741592133, -28.717325988199665 -10.69218040112902, -28.41523396464064 -11.156274872382308 C-28.24768082271103 -11.380780818162739, -28.08012768078142 -11.60528676394317, -27.667588908126586 -12.158051136245302 C-27.39434106749864 -12.479023598089478, -27.1210932268707 -12.799996059933656, -26.857295942968662 -13.10986736009567 C-26.656916595589443 -13.31677548771509, -26.45653724821022 -13.523683615334509, -25.987684736767996 -14.007812326905677 C-25.69185738817118 -14.276474897738577, -25.396030039574363 -14.545137468571479, -25.062328708501887 -14.848196188198107 C-24.806831323732162 -15.051948553481012, -24.55133393896244 -15.255700918763916, -24.08503034457872 -15.627565626425149 C-23.765312899974866 -15.850586675435688, -23.445595455371013 -16.073607724446227, -23.05980557360571 -16.342718045390885 C-22.73883521356447 -16.53729216387909, -22.417864853523227 -16.731866282367296, -21.99086726407679 -16.99071473040609 C-21.674148264238084 -17.15594682975374, -21.357429264399382 -17.321178929101393, -20.882607912792388 -17.56889292409717 C-20.622566093556696 -17.684005723606315, -20.362524274321007 -17.799118523115464, -19.739581595147804 -18.07487676824742 C-19.33231105994641 -18.22475608996909, -18.925040524745018 -18.37463541169076, -18.56648525146062 -18.506587066708033 C-18.32247790809004 -18.579007165399737, -18.078470564719463 -18.651427264091446, -17.368139386235413 -18.862249829261067 C-16.96582321601935 -18.954075869754522, -16.563507045803288 -19.045901910247974, -16.149468259676766 -19.140403561325773 C-15.689731985943109 -19.21473015675498, -15.229995712209451 -19.289056752184187, -14.91547965284788 -19.3399052695533 C-14.662102569659318 -19.364348252037974, -14.408725486470757 -19.388791234522646, -13.671244289623903 -19.45993515863156 C-13.17210969891356 -19.475941433449098, -12.67297510820322 -19.491947708266633, -12.421875000000005 -19.5 C-12.421875000000004 -19.5, -12.421875000000002 -19.5, -12.421875 -19.5&quot; stroke=&quot;none&quot; stroke-width=&quot;0&quot; fill=&quot;#ECECFF&quot; style=&quot;&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M-12.421875 -19.5 C-2.6193626193586024 -19.5, 7.183149761282795 -19.5, 12.421875 -19.5 M-12.421875 -19.5 C-5.868859607229818 -19.5, 0.6841557855403639 -19.5, 12.421875 -19.5 M12.421875 -19.5 C12.421875 -19.5, 12.421875 -19.5, 12.421874999999998 -19.5 M12.421875 -19.5 C12.421875 -19.5, 12.421874999999998 -19.5, 12.421874999999998 -19.5 M12.421874999999998 -19.5 C12.764879115952773 -19.489000525618405, 13.107883231905546 -19.47800105123681, 13.6712442896239 -19.45993515863156 M12.421874999999998 -19.5 C12.701575787463645 -19.491030540150597, 12.98127657492729 -19.482061080301193, 13.6712442896239 -19.45993515863156 M13.6712442896239 -19.45993515863156 C14.108777509594562 -19.417726855111674, 14.546310729565226 -19.37551855159179, 14.915479652847864 -19.3399052695533 M13.6712442896239 -19.45993515863156 C13.999194125054409 -19.42829823242496, 14.32714396048492 -19.39666130621836, 14.915479652847864 -19.3399052695533 M14.915479652847864 -19.3399052695533 C15.24559911208486 -19.286534115498505, 15.575718571321858 -19.233162961443707, 16.14946825967676 -19.140403561325776 M14.915479652847864 -19.3399052695533 C15.384814621863578 -19.264026831509884, 15.854149590879292 -19.18814839346647, 16.14946825967676 -19.140403561325776 M16.14946825967676 -19.140403561325776 C16.432421238742336 -19.075821390294806, 16.715374217807913 -19.011239219263835, 17.36813938623539 -18.862249829261074 M16.14946825967676 -19.140403561325776 C16.572464400835603 -19.043857452414056, 16.995460541994447 -18.947311343502335, 17.36813938623539 -18.862249829261074 M17.36813938623539 -18.862249829261074 C17.755289492032965 -18.74734571005273, 18.14243959783054 -18.632441590844383, 18.566485251460602 -18.50658706670804 M17.36813938623539 -18.862249829261074 C17.784025468974107 -18.738817022934818, 18.199911551712823 -18.615384216608565, 18.566485251460602 -18.50658706670804 M18.566485251460602 -18.50658706670804 C18.85151018976411 -18.401695254670702, 19.136535128067614 -18.296803442633365, 19.739581595147794 -18.074876768247425 M18.566485251460602 -18.50658706670804 C18.837159075753043 -18.406976597287017, 19.107832900045484 -18.307366127865997, 19.739581595147794 -18.074876768247425 M19.739581595147794 -18.074876768247425 C20.119003384178647 -17.90691799739094, 20.4984251732095 -17.73895922653446, 20.88260791279238 -17.568892924097174 M19.739581595147794 -18.074876768247425 C20.145857990773557 -17.895030259664978, 20.552134386399317 -17.715183751082527, 20.88260791279238 -17.568892924097174 M20.88260791279238 -17.568892924097174 C21.111808166122746 -17.44931929874449, 21.341008419453107 -17.329745673391812, 21.990867264076783 -16.990714730406097 M20.88260791279238 -17.568892924097174 C21.17599004028667 -17.415835656103624, 21.46937216778096 -17.262778388110075, 21.990867264076783 -16.990714730406097 M21.990867264076783 -16.990714730406097 C22.235068362543334 -16.842678589430726, 22.479269461009885 -16.694642448455358, 23.059805573605697 -16.342718045390892 M21.990867264076783 -16.990714730406097 C22.33521958397635 -16.781966330444128, 22.679571903875914 -16.573217930482155, 23.059805573605697 -16.342718045390892 M23.059805573605697 -16.342718045390892 C23.397608558690926 -16.107081306250976, 23.735411543776156 -15.871444567111059, 24.085030344578712 -15.627565626425154 M23.059805573605697 -16.342718045390892 C23.39711723429686 -16.107424032879187, 23.734428894988024 -15.87213002036748, 24.085030344578712 -15.627565626425154 M24.085030344578712 -15.627565626425154 C24.306709857515415 -15.450782113997722, 24.528389370452114 -15.27399860157029, 25.06232870850187 -14.848196188198123 M24.085030344578712 -15.627565626425154 C24.335177548633645 -15.428079887888007, 24.58532475268858 -15.22859414935086, 25.06232870850187 -14.848196188198123 M25.06232870850187 -14.848196188198123 C25.279953433621277 -14.650555170879374, 25.497578158740684 -14.452914153560624, 25.987684736767985 -14.007812326905688 M25.06232870850187 -14.848196188198123 C25.412057587859813 -14.53058167328432, 25.761786467217757 -14.21296715837052, 25.987684736767985 -14.007812326905688 M25.987684736767985 -14.007812326905688 C26.19318396431596 -13.795617502662047, 26.398683191863938 -13.583422678418408, 26.857295942968648 -13.10986736009568 M25.987684736767985 -14.007812326905688 C26.29129083758027 -13.694314101292555, 26.59489693839256 -13.380815875679422, 26.857295942968648 -13.10986736009568 M26.857295942968648 -13.10986736009568 C27.11675143575036 -12.805096174838514, 27.376206928532074 -12.500324989581348, 27.667588908126582 -12.158051136245305 M26.857295942968648 -13.10986736009568 C27.17044377996352 -12.7420260921448, 27.483591616958396 -12.37418482419392, 27.667588908126582 -12.158051136245305 M27.667588908126582 -12.158051136245305 C27.954694147441646 -11.773356271388494, 28.241799386756714 -11.388661406531682, 28.415233964640635 -11.156274872382312 M27.667588908126582 -12.158051136245305 C27.948019682966866 -11.782299445728478, 28.228450457807153 -11.40654775521165, 28.415233964640635 -11.156274872382312 M28.415233964640635 -11.156274872382312 C28.58793187514104 -10.890964505971482, 28.76062978564145 -10.62565413956065, 29.097158878604247 -10.108655082055241 M28.415233964640635 -11.156274872382312 C28.643980640229703 -10.804858551594506, 28.87272731581877 -10.4534422308067, 29.097158878604247 -10.108655082055241 M29.097158878604247 -10.108655082055241 C29.26686611140999 -9.807322705487875, 29.436573344215734 -9.50599032892051, 29.7105614742735 -9.019496659696287 M29.097158878604247 -10.108655082055241 C29.28693680063094 -9.771685164398416, 29.47671472265763 -9.434715246741591, 29.7105614742735 -9.019496659696287 M29.7105614742735 -9.019496659696287 C29.878667238057226 -8.670421444312243, 30.046773001840954 -8.321346228928201, 30.25292114880834 -7.893275190886684 M29.7105614742735 -9.019496659696287 C29.874790456119857 -8.678471664955035, 30.039019437966218 -8.337446670213783, 30.25292114880834 -7.893275190886684 M30.25292114880834 -7.893275190886684 C30.403060904909154 -7.5224270905629655, 30.553200661009967 -7.151578990239248, 30.722009229970325 -6.734618561215508 M30.25292114880834 -7.893275190886684 C30.3595457682149 -7.629910319505707, 30.46617038762146 -7.36654544812473, 30.722009229970325 -6.734618561215508 M30.722009229970325 -6.734618561215508 C30.811757906679894 -6.464309846476006, 30.901506583389466 -6.1940011317365045, 31.11589813421488 -5.548287939305138 M30.722009229970325 -6.734618561215508 C30.854954598131297 -6.334208294282511, 30.987899966292268 -5.933798027349513, 31.11589813421488 -5.548287939305138 M31.11589813421488 -5.548287939305138 C31.235464782858113 -5.092328487515174, 31.355031431501345 -4.6363690357252105, 31.43296928754556 -4.339158212148133 M31.11589813421488 -5.548287939305138 C31.181617596838517 -5.297671145325943, 31.24733705946215 -5.0470543513467465, 31.43296928754556 -4.339158212148133 M31.43296928754556 -4.339158212148133 C31.487676135287533 -4.058250111289478, 31.5423829830295 -3.7773420104308224, 31.671919776581777 -3.1121979531509023 M31.43296928754556 -4.339158212148133 C31.49567251218786 -4.017190405941155, 31.558375736830158 -3.6952225997341763, 31.671919776581777 -3.1121979531509023 M31.671919776581777 -3.1121979531509023 C31.72574876760026 -2.694710928548152, 31.77957775861874 -2.2772239039454014, 31.831767702509367 -1.872449005199798 M31.671919776581777 -3.1121979531509023 C31.71172920725187 -2.803443870134906, 31.751538637921968 -2.4946897871189098, 31.831767702509367 -1.872449005199798 M31.831767702509367 -1.872449005199798 C31.860303393924806 -1.4279825778088235, 31.88883908534024 -0.983516150417849, 31.911856215913414 -0.6250057626472757 M31.831767702509367 -1.872449005199798 C31.8582645922194 -1.4597385600616466, 31.884761481929427 -1.0470281149234955, 31.911856215913414 -0.6250057626472757 M31.911856215913414 -0.6250057626472757 C31.911856215913414 -0.3174507164662356, 31.911856215913414 -0.009895670285195557, 31.911856215913414 0.625005762647271 M31.911856215913414 -0.6250057626472757 C31.911856215913414 -0.13091883401554377, 31.911856215913414 0.36316809461618815, 31.911856215913414 0.625005762647271 M31.911856215913414 0.625005762647271 C31.89005060310661 0.964645783287096, 31.868244990299807 1.3042858039269212, 31.831767702509367 1.8724490051997846 M31.911856215913414 0.625005762647271 C31.883667383479278 1.0640695814249341, 31.855478551045145 1.5031334002025973, 31.831767702509367 1.8724490051997846 M31.831767702509367 1.8724490051997846 C31.795754663500624 2.1517590241726685, 31.75974162449188 2.431069043145553, 31.671919776581777 3.1121979531508885 M31.831767702509367 1.8724490051997846 C31.77414273057008 2.3193769082230977, 31.716517758630793 2.7663048112464104, 31.671919776581777 3.1121979531508885 M31.671919776581777 3.1121979531508885 C31.592872078152435 3.5180911778485906, 31.51382437972309 3.9239844025462927, 31.43296928754556 4.339158212148129 M31.671919776581777 3.1121979531508885 C31.61331232845263 3.413134812605517, 31.55470488032348 3.714071672060145, 31.43296928754556 4.339158212148129 M31.43296928754556 4.339158212148129 C31.353417053910626 4.642525357154286, 31.273864820275694 4.945892502160443, 31.115898134214884 5.548287939305125 M31.43296928754556 4.339158212148129 C31.331622464633725 4.725637571901862, 31.23027564172189 5.112116931655596, 31.115898134214884 5.548287939305125 M31.115898134214884 5.548287939305125 C31.033508704666055 5.796431774133282, 30.95111927511722 6.044575608961439, 30.72200922997033 6.734618561215495 M31.115898134214884 5.548287939305125 C30.996888910209552 5.906724760464369, 30.87787968620422 6.265161581623612, 30.72200922997033 6.734618561215495 M30.72200922997033 6.734618561215495 C30.612861287395507 7.004216089607214, 30.50371334482069 7.2738136179989334, 30.252921148808344 7.893275190886679 M30.72200922997033 6.734618561215495 C30.54591885008841 7.169565203999732, 30.369828470206485 7.60451184678397, 30.252921148808344 7.893275190886679 M30.252921148808344 7.893275190886679 C30.048634450861968 8.31748089020744, 29.844347752915592 8.741686589528202, 29.710561474273504 9.019496659696284 M30.252921148808344 7.893275190886679 C30.11463768207147 8.180423768357993, 29.9763542153346 8.467572345829307, 29.710561474273504 9.019496659696284 M29.710561474273504 9.019496659696284 C29.47158831404945 9.44381770433058, 29.23261515382539 9.86813874896488, 29.09715887860425 10.108655082055236 M29.710561474273504 9.019496659696284 C29.528763289737114 9.342297745403041, 29.34696510520072 9.665098831109798, 29.09715887860425 10.108655082055236 M29.09715887860425 10.108655082055236 C28.936392371287933 10.355635609144944, 28.775625863971616 10.602616136234651, 28.41523396464064 11.156274872382301 M29.09715887860425 10.108655082055236 C28.859706618812602 10.473445517954886, 28.622254359020953 10.838235953854534, 28.41523396464064 11.156274872382301 M28.41523396464064 11.156274872382301 C28.153689070172604 11.506721203739412, 27.89214417570457 11.857167535096524, 27.667588908126582 12.158051136245302 M28.41523396464064 11.156274872382301 C28.159038111580173 11.499553975560968, 27.902842258519705 11.842833078739634, 27.667588908126582 12.158051136245302 M27.667588908126582 12.158051136245302 C27.482787710896833 12.375129137997376, 27.297986513667087 12.592207139749451, 26.85729594296866 13.10986736009567 M27.667588908126582 12.158051136245302 C27.504217485329317 12.349956505560273, 27.34084606253205 12.541861874875245, 26.85729594296866 13.10986736009567 M26.85729594296866 13.10986736009567 C26.51057072244668 13.467889616954627, 26.1638455019247 13.825911873813585, 25.98768473676799 14.007812326905684 M26.85729594296866 13.10986736009567 C26.63855131565656 13.335739147063311, 26.41980668834446 13.561610934030954, 25.98768473676799 14.007812326905684 M25.98768473676799 14.007812326905684 C25.666818949813887 14.299214144973893, 25.34595316285979 14.590615963042103, 25.062328708501887 14.848196188198111 M25.98768473676799 14.007812326905684 C25.62864017193486 14.333887100888518, 25.26959560710174 14.65996187487135, 25.062328708501887 14.848196188198111 M25.062328708501887 14.848196188198111 C24.769235761042488 15.081930014266092, 24.47614281358309 15.315663840334071, 24.085030344578715 15.627565626425152 M25.062328708501887 14.848196188198111 C24.83303039039472 15.031055495004072, 24.603732072287546 15.213914801810033, 24.085030344578715 15.627565626425152 M24.085030344578715 15.627565626425152 C23.85841189070657 15.785644849691606, 23.631793436834425 15.943724072958059, 23.059805573605708 16.34271804539089 M24.085030344578715 15.627565626425152 C23.846579844313176 15.793898373054605, 23.608129344047633 15.960231119684057, 23.059805573605708 16.34271804539089 M23.059805573605708 16.34271804539089 C22.837338213442404 16.477579066485205, 22.6148708532791 16.612440087579525, 21.990867264076787 16.990714730406093 M23.059805573605708 16.34271804539089 C22.789341986190585 16.506674661502398, 22.51887839877546 16.67063127761391, 21.990867264076787 16.990714730406093 M21.990867264076787 16.990714730406093 C21.592544844070424 17.198519281785725, 21.194222424064062 17.40632383316536, 20.882607912792388 17.56889292409717 M21.990867264076787 16.990714730406093 C21.747346000619338 17.117759617569032, 21.50382473716189 17.244804504731967, 20.882607912792388 17.56889292409717 M20.882607912792388 17.56889292409717 C20.498139173166237 17.739085830269723, 20.113670433540083 17.909278736442275, 19.739581595147804 18.07487676824742 M20.882607912792388 17.56889292409717 C20.53319766209623 17.723566477193536, 20.18378741140008 17.878240030289902, 19.739581595147804 18.07487676824742 M19.739581595147804 18.07487676824742 C19.470419246362848 18.17393100070976, 19.201256897577892 18.272985233172104, 18.566485251460616 18.506587066708033 M19.739581595147804 18.07487676824742 C19.357411520535756 18.2155188884461, 18.97524144592371 18.356161008644772, 18.566485251460616 18.506587066708033 M18.566485251460616 18.506587066708033 C18.30292523439406 18.584810296318626, 18.039365217327504 18.663033525929222, 17.368139386235413 18.86224982926107 M18.566485251460616 18.506587066708033 C18.261974807482282 18.596964168072866, 17.957464363503952 18.687341269437695, 17.368139386235413 18.86224982926107 M17.368139386235413 18.86224982926107 C17.03916601433934 18.937335854644473, 16.71019264244327 19.012421880027873, 16.149468259676766 19.140403561325773 M17.368139386235413 18.86224982926107 C16.924186069077173 18.9635792768363, 16.480232751918933 19.064908724411527, 16.149468259676766 19.140403561325773 M16.149468259676766 19.140403561325773 C15.781586215979276 19.199879877182926, 15.413704172281786 19.259356193040077, 14.915479652847878 19.3399052695533 M16.149468259676766 19.140403561325773 C15.858635422874151 19.187423158937683, 15.567802586071538 19.234442756549598, 14.915479652847878 19.3399052695533 M14.915479652847878 19.3399052695533 C14.465098463097807 19.38335300126586, 14.014717273347735 19.42680073297842, 13.6712442896239 19.45993515863156 M14.915479652847878 19.3399052695533 C14.464064130340116 19.383452782103028, 14.012648607832352 19.427000294652753, 13.6712442896239 19.45993515863156 M13.6712442896239 19.45993515863156 C13.268023812713107 19.472865654505043, 12.864803335802314 19.485796150378526, 12.421875000000004 19.5 M13.6712442896239 19.45993515863156 C13.194704157178457 19.475216873149986, 12.718164024733014 19.490498587668412, 12.421875000000004 19.5 M12.421875000000004 19.5 C12.421875000000002 19.5, 12.421875000000002 19.5, 12.421875 19.5 M12.421875000000004 19.5 C12.421875000000002 19.5, 12.421875000000002 19.5, 12.421875 19.5 M12.421875 19.5 C4.156026093101708 19.5, -4.109822813796583 19.5, -12.421874999999996 19.5 M12.421875 19.5 C6.4799134362363136 19.5, 0.5379518724726271 19.5, -12.421874999999996 19.5 M-12.421874999999996 19.5 C-12.896137024608915 19.484791339965824, -13.370399049217832 19.469582679931644, -13.671244289623893 19.45993515863156 M-12.421874999999996 19.5 C-12.81931620612421 19.487254834091974, -13.216757412248423 19.47450966818395, -13.671244289623893 19.45993515863156 M-13.671244289623893 19.45993515863156 C-14.084247110648215 19.420093273195906, -14.497249931672537 19.380251387760254, -14.915479652847871 19.3399052695533 M-13.671244289623893 19.45993515863156 C-13.989151884444627 19.429266995299024, -14.30705947926536 19.39859883196649, -14.915479652847871 19.3399052695533 M-14.915479652847871 19.3399052695533 C-15.34158451110654 19.271015940562567, -15.76768936936521 19.20212661157183, -16.14946825967676 19.140403561325773 M-14.915479652847871 19.3399052695533 C-15.233190748217217 19.288540203540325, -15.550901843586564 19.237175137527352, -16.14946825967676 19.140403561325773 M-16.14946825967676 19.140403561325773 C-16.453467095040445 19.071017810931806, -16.75746593040413 19.00163206053784, -17.368139386235388 18.862249829261074 M-16.14946825967676 19.140403561325773 C-16.533909918687463 19.052657261372858, -16.918351577698168 18.96491096141994, -17.368139386235388 18.862249829261074 M-17.368139386235388 18.862249829261074 C-17.66265680625446 18.7748386049529, -17.95717422627353 18.687427380644724, -18.56648525146059 18.506587066708043 M-17.368139386235388 18.862249829261074 C-17.79854905070169 18.73450650011391, -18.22895871516799 18.606763170966744, -18.56648525146059 18.506587066708043 M-18.56648525146059 18.506587066708043 C-19.03217387870457 18.335209347103778, -19.49786250594855 18.163831627499516, -19.739581595147797 18.074876768247425 M-18.56648525146059 18.506587066708043 C-18.877867664375078 18.39199546036804, -19.18925007728956 18.277403854028037, -19.739581595147797 18.074876768247425 M-19.739581595147797 18.074876768247425 C-20.12852522538005 17.902702960746467, -20.5174688556123 17.730529153245506, -20.88260791279238 17.568892924097174 M-19.739581595147797 18.074876768247425 C-20.159237325486284 17.889107625071514, -20.578893055824775 17.703338481895607, -20.88260791279238 17.568892924097174 M-20.88260791279238 17.568892924097174 C-21.22783578436327 17.388787764627647, -21.573063655934153 17.20868260515812, -21.99086726407678 16.990714730406097 M-20.88260791279238 17.568892924097174 C-21.297239032958515 17.35258013429041, -21.711870153124654 17.13626734448364, -21.99086726407678 16.990714730406097 M-21.99086726407678 16.990714730406097 C-22.389727738185385 16.748923167037137, -22.78858821229399 16.507131603668178, -23.059805573605686 16.3427180453909 M-21.99086726407678 16.990714730406097 C-22.363089464742185 16.76507144494228, -22.735311665407586 16.539428159478458, -23.059805573605686 16.3427180453909 M-23.059805573605686 16.3427180453909 C-23.368966900882103 16.127060486861026, -23.678128228158524 15.911402928331155, -24.085030344578712 15.627565626425156 M-23.059805573605686 16.3427180453909 C-23.400281463954943 16.105216803247004, -23.7407573543042 15.867715561103104, -24.085030344578712 15.627565626425156 M-24.085030344578712 15.627565626425156 C-24.286136138675896 15.467189107282588, -24.48724193277308 15.30681258814002, -25.06232870850187 14.848196188198125 M-24.085030344578712 15.627565626425156 C-24.294390107242045 15.460606786998413, -24.503749869905374 15.29364794757167, -25.06232870850187 14.848196188198125 M-25.06232870850187 14.848196188198125 C-25.38391132584911 14.55614336373316, -25.70549394319635 14.264090539268196, -25.987684736767974 14.007812326905697 M-25.06232870850187 14.848196188198125 C-25.269889156938806 14.659695280676225, -25.477449605375746 14.471194373154326, -25.987684736767974 14.007812326905697 M-25.987684736767974 14.007812326905697 C-26.28386349080086 13.701983446638806, -26.58004224483375 13.396154566371916, -26.857295942968655 13.109867360095677 M-25.987684736767974 14.007812326905697 C-26.228411691554168 13.759241982038402, -26.469138646340365 13.510671637171107, -26.857295942968655 13.109867360095677 M-26.857295942968655 13.109867360095677 C-27.157774590002745 12.756908043570059, -27.45825323703684 12.40394872704444, -27.66758890812658 12.158051136245307 M-26.857295942968655 13.109867360095677 C-27.1485543697297 12.767738638948178, -27.43981279649074 12.425609917800678, -27.66758890812658 12.158051136245307 M-27.66758890812658 12.158051136245307 C-27.940684221696127 11.792128295556997, -28.213779535265676 11.426205454868688, -28.415233964640635 11.156274872382316 M-27.66758890812658 12.158051136245307 C-27.908032008652693 11.835879286357397, -28.148475109178808 11.513707436469488, -28.415233964640635 11.156274872382316 M-28.415233964640635 11.156274872382316 C-28.59012958990677 10.887588225922281, -28.765025215172905 10.618901579462246, -29.097158878604244 10.108655082055249 M-28.415233964640635 11.156274872382316 C-28.595374651468124 10.879530402867804, -28.775515338295612 10.602785933353292, -29.097158878604244 10.108655082055249 M-29.097158878604244 10.108655082055249 C-29.31063127563972 9.729613224694551, -29.524103672675203 9.350571367333854, -29.7105614742735 9.019496659696289 M-29.097158878604244 10.108655082055249 C-29.338118423230227 9.680807010772098, -29.57907796785621 9.252958939488947, -29.7105614742735 9.019496659696289 M-29.7105614742735 9.019496659696289 C-29.8676433014017 8.693312884651904, -30.0247251285299 8.36712910960752, -30.25292114880834 7.893275190886686 M-29.7105614742735 9.019496659696289 C-29.833020003034814 8.76520890453065, -29.95547853179613 8.510921149365013, -30.25292114880834 7.893275190886686 M-30.25292114880834 7.893275190886686 C-30.377723142187005 7.585011854358987, -30.502525135565673 7.2767485178312885, -30.722009229970325 6.73461856121551 M-30.25292114880834 7.893275190886686 C-30.358205201601116 7.633221544959844, -30.46348925439389 7.373167899033003, -30.722009229970325 6.73461856121551 M-30.722009229970325 6.73461856121551 C-30.83736197926109 6.387194459316418, -30.95271472855185 6.039770357417326, -31.11589813421488 5.5482879393051325 M-30.722009229970325 6.73461856121551 C-30.80991667372754 6.4698553467678686, -30.897824117484753 6.205092132320226, -31.11589813421488 5.5482879393051325 M-31.11589813421488 5.5482879393051325 C-31.21374386915586 5.175159745365404, -31.311589604096838 4.802031551425674, -31.432969287545557 4.339158212148136 M-31.11589813421488 5.5482879393051325 C-31.221765090305134 5.144571352703981, -31.32763204639539 4.74085476610283, -31.432969287545557 4.339158212148136 M-31.432969287545557 4.339158212148136 C-31.485362876296993 4.07012820729842, -31.537756465048428 3.8010982024487037, -31.671919776581777 3.112197953150904 M-31.432969287545557 4.339158212148136 C-31.48165277751043 4.089178780437767, -31.530336267475302 3.839199348727399, -31.671919776581777 3.112197953150904 M-31.671919776581777 3.112197953150904 C-31.705902525635196 2.848634462145404, -31.739885274688618 2.585070971139904, -31.831767702509364 1.872449005199809 M-31.671919776581777 3.112197953150904 C-31.724072935408078 2.7077083521001932, -31.776226094234378 2.3032187510494824, -31.831767702509364 1.872449005199809 M-31.831767702509364 1.872449005199809 C-31.85077984575929 1.5763195277563642, -31.86979198900922 1.2801900503129193, -31.911856215913414 0.6250057626472781 M-31.831767702509364 1.872449005199809 C-31.85257798529042 1.5483120531269587, -31.873388268071473 1.2241751010541084, -31.911856215913414 0.6250057626472781 M-31.911856215913414 0.6250057626472781 C-31.911856215913414 0.21462258277356455, -31.911856215913414 -0.19576059710014904, -31.911856215913414 -0.6250057626472687 M-31.911856215913414 0.6250057626472781 C-31.911856215913414 0.29404143349656864, -31.911856215913414 -0.036922895654140864, -31.911856215913414 -0.6250057626472687 M-31.911856215913414 -0.6250057626472687 C-31.88094695277382 -1.1064424855546122, -31.850037689634224 -1.5878792084619557, -31.831767702509367 -1.8724490051997822 M-31.911856215913414 -0.6250057626472687 C-31.88778848892882 -0.9998800375518867, -31.863720761944226 -1.3747543124565047, -31.831767702509367 -1.8724490051997822 M-31.831767702509367 -1.8724490051997822 C-31.79815493540695 -2.1331429892545093, -31.76454216830453 -2.393836973309236, -31.671919776581777 -3.112197953150895 M-31.831767702509367 -1.8724490051997822 C-31.78670765652475 -2.2219258237439496, -31.741647610540134 -2.5714026422881173, -31.671919776581777 -3.112197953150895 M-31.671919776581777 -3.112197953150895 C-31.62075464542044 -3.374920087910056, -31.569589514259103 -3.637642222669217, -31.43296928754556 -4.339158212148126 M-31.671919776581777 -3.112197953150895 C-31.62096539580274 -3.373837929239059, -31.570011015023702 -3.6354779053272233, -31.43296928754556 -4.339158212148126 M-31.43296928754556 -4.339158212148126 C-31.306652988669747 -4.8208570055918365, -31.180336689793936 -5.302555799035547, -31.115898134214884 -5.548287939305123 M-31.43296928754556 -4.339158212148126 C-31.33438215708514 -4.7151136685263335, -31.23579502662472 -5.091069124904541, -31.115898134214884 -5.548287939305123 M-31.115898134214884 -5.548287939305123 C-30.992749154821798 -5.919193044111835, -30.86960017542871 -6.290098148918548, -30.722009229970332 -6.734618561215485 M-31.115898134214884 -5.548287939305123 C-30.9610833488996 -6.0145654062884795, -30.806268563584318 -6.480842873271836, -30.722009229970332 -6.734618561215485 M-30.722009229970332 -6.734618561215485 C-30.61460498609334 -6.999909120111445, -30.507200742216348 -7.265199679007406, -30.252921148808344 -7.893275190886676 M-30.722009229970332 -6.734618561215485 C-30.611807127681864 -7.006819884480708, -30.501605025393395 -7.279021207745932, -30.252921148808344 -7.893275190886676 M-30.252921148808344 -7.893275190886676 C-30.088056804051494 -8.235619530306158, -29.92319245929464 -8.57796386972564, -29.710561474273504 -9.019496659696282 M-30.252921148808344 -7.893275190886676 C-30.043128502712833 -8.328914109347533, -29.83333585661732 -8.764553027808391, -29.710561474273504 -9.019496659696282 M-29.710561474273504 -9.019496659696282 C-29.53225430399251 -9.336099096089056, -29.353947133711518 -9.652701532481828, -29.097158878604247 -10.108655082055243 M-29.710561474273504 -9.019496659696282 C-29.5488785448904 -9.306581072987921, -29.387195615507295 -9.593665486279562, -29.097158878604247 -10.108655082055243 M-29.097158878604247 -10.108655082055243 C-28.84883965688034 -10.490140089670705, -28.600520435156437 -10.871625097286165, -28.41523396464064 -11.156274872382308 M-29.097158878604247 -10.108655082055243 C-28.919769795185967 -10.38117234982424, -28.742380711767687 -10.653689617593235, -28.41523396464064 -11.156274872382308 M-28.41523396464064 -11.156274872382308 C-28.209200985791842 -11.432340294049192, -28.003168006943042 -11.708405715716076, -27.667588908126586 -12.158051136245302 M-28.41523396464064 -11.156274872382308 C-28.161823329332176 -11.495822037511847, -27.908412694023713 -11.835369202641386, -27.667588908126586 -12.158051136245302 M-27.667588908126586 -12.158051136245302 C-27.435400355957466 -12.430793021526044, -27.203211803788346 -12.703534906806787, -26.857295942968662 -13.10986736009567 M-27.667588908126586 -12.158051136245302 C-27.420913314519506 -12.447810324735084, -27.174237720912426 -12.737569513224866, -26.857295942968662 -13.10986736009567 M-26.857295942968662 -13.10986736009567 C-26.63728937238427 -13.337042207099422, -26.417282801799878 -13.564217054103175, -25.987684736767996 -14.007812326905677 M-26.857295942968662 -13.10986736009567 C-26.5319292039242 -13.445835231265146, -26.20656246487974 -13.781803102434623, -25.987684736767996 -14.007812326905677 M-25.987684736767996 -14.007812326905677 C-25.63025396030973 -14.332421500984964, -25.27282318385146 -14.657030675064249, -25.062328708501887 -14.848196188198107 M-25.987684736767996 -14.007812326905677 C-25.752844598349316 -14.22108792708795, -25.518004459930637 -14.434363527270222, -25.062328708501887 -14.848196188198107 M-25.062328708501887 -14.848196188198107 C-24.804543465145642 -15.053773059821287, -24.5467582217894 -15.259349931444467, -24.08503034457872 -15.627565626425149 M-25.062328708501887 -14.848196188198107 C-24.807283108589207 -15.051588267080021, -24.552237508676523 -15.254980345961933, -24.08503034457872 -15.627565626425149 M-24.08503034457872 -15.627565626425149 C-23.695364621759754 -15.899379566306386, -23.305698898940793 -16.171193506187624, -23.05980557360571 -16.342718045390885 M-24.08503034457872 -15.627565626425149 C-23.779948756887592 -15.840377335229405, -23.47486716919646 -16.05318904403366, -23.05980557360571 -16.342718045390885 M-23.05980557360571 -16.342718045390885 C-22.726552240836075 -16.5447381741298, -22.39329890806644 -16.74675830286872, -21.99086726407679 -16.99071473040609 M-23.05980557360571 -16.342718045390885 C-22.74132720985021 -16.535781501086078, -22.422848846094706 -16.728844956781273, -21.99086726407679 -16.99071473040609 M-21.99086726407679 -16.99071473040609 C-21.710997859016796 -17.13672241976098, -21.431128453956802 -17.28273010911587, -20.882607912792388 -17.56889292409717 M-21.99086726407679 -16.99071473040609 C-21.637228455324657 -17.175207870415612, -21.283589646572523 -17.35970101042513, -20.882607912792388 -17.56889292409717 M-20.882607912792388 -17.56889292409717 C-20.503914664789935 -17.736529191451783, -20.125221416787483 -17.904165458806396, -19.739581595147804 -18.07487676824742 M-20.882607912792388 -17.56889292409717 C-20.528017162896457 -17.72585973051523, -20.173426413000527 -17.882826536933287, -19.739581595147804 -18.07487676824742 M-19.739581595147804 -18.07487676824742 C-19.496039556208945 -18.16450248985485, -19.25249751727009 -18.254128211462277, -18.56648525146062 -18.506587066708033 M-19.739581595147804 -18.07487676824742 C-19.46014447364661 -18.177712212048295, -19.180707352145415 -18.28054765584917, -18.56648525146062 -18.506587066708033 M-18.56648525146062 -18.506587066708033 C-18.25806794373193 -18.598123704726422, -17.949650636003245 -18.689660342744812, -17.368139386235413 -18.862249829261067 M-18.56648525146062 -18.506587066708033 C-18.325448668955044 -18.57812545916885, -18.08441208644947 -18.64966385162966, -17.368139386235413 -18.862249829261067 M-17.368139386235413 -18.862249829261067 C-16.94699781566498 -18.958372644538187, -16.525856245094545 -19.05449545981531, -16.149468259676766 -19.140403561325773 M-17.368139386235413 -18.862249829261067 C-17.088746535532685 -18.926019424225228, -16.809353684829954 -18.989789019189388, -16.149468259676766 -19.140403561325773 M-16.149468259676766 -19.140403561325773 C-15.840625519892933 -19.190334860382805, -15.531782780109102 -19.240266159439837, -14.91547965284788 -19.3399052695533 M-16.149468259676766 -19.140403561325773 C-15.826519503172824 -19.19261541177232, -15.503570746668881 -19.244827262218866, -14.91547965284788 -19.3399052695533 M-14.91547965284788 -19.3399052695533 C-14.656021125546603 -19.36493492163752, -14.396562598245326 -19.38996457372174, -13.671244289623903 -19.45993515863156 M-14.91547965284788 -19.3399052695533 C-14.561400652922762 -19.374062844833773, -14.207321652997644 -19.40822042011425, -13.671244289623903 -19.45993515863156 M-13.671244289623903 -19.45993515863156 C-13.274454009407613 -19.472659450612667, -12.877663729191324 -19.485383742593775, -12.421875000000005 -19.5 M-13.671244289623903 -19.45993515863156 C-13.319302633527212 -19.471221242529705, -12.967360977430518 -19.482507326427847, -12.421875000000005 -19.5 M-12.421875000000005 -19.5 C-12.421875000000004 -19.5, -12.421875000000002 -19.5, -12.421875 -19.5 M-12.421875000000005 -19.5 C-12.421875000000004 -19.5, -12.421875000000002 -19.5, -12.421875 -19.5&quot; stroke=&quot;#9370DB&quot; stroke-width=&quot;1.3&quot; fill=&quot;none&quot; stroke-dasharray=&quot;0 0&quot; style=&quot;&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;label&quot; style=&quot;&quot; transform=&quot;translate(-19.546875, -12)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;39.09375&quot; height=&quot;24&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Start&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;node default&quot; id=&quot;flowchart-decision-1&quot; transform=&quot;translate(182.88621139526367, 87)&quot;&gt;&lt;polygon points=&quot;61.0625,0 122.125,-61.0625 61.0625,-122.125 0,-61.0625&quot; class=&quot;label-container&quot; transform=&quot;translate(-60.5625, 61.0625)&quot;&gt;&lt;/polygon&gt;&lt;g class=&quot;label&quot; style=&quot;&quot; transform=&quot;translate(-34.0625, -12)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;68.125&quot; height=&quot;24&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Decision&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;node default&quot; id=&quot;flowchart-optionA-3&quot; transform=&quot;translate(358.6830863952637, 35)&quot;&gt;&lt;rect class=&quot;basic label-container&quot; style=&quot;&quot; x=&quot;-64.71875&quot; y=&quot;-27&quot; width=&quot;129.4375&quot; height=&quot;54&quot;&gt;&lt;/rect&gt;&lt;g class=&quot;label&quot; style=&quot;&quot; transform=&quot;translate(-34.71875, -12)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;69.4375&quot; height=&quot;24&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Option A&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;node default&quot; id=&quot;flowchart-optionB-4&quot; transform=&quot;translate(358.6830863952637, 139)&quot;&gt;&lt;rect class=&quot;basic label-container&quot; style=&quot;&quot; x=&quot;-64.734375&quot; y=&quot;-27&quot; width=&quot;129.46875&quot; height=&quot;54&quot;&gt;&lt;/rect&gt;&lt;g class=&quot;label&quot; style=&quot;&quot; transform=&quot;translate(-34.734375, -12)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;69.46875&quot; height=&quot;24&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Option B&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/body&gt;&lt;/html&gt;&lt;figcaption&gt;A basic Mermaid-generated flowchart. I usually start with describing the flows between the nodes and then add a second block to describe how the nodes should be shaped.&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;The flowchart syntax is powerful and simple. It´s basically nodes and edges to connect nodes, which, as a general concept, can be applied in many communication situations. You get the complete syntax on the Mermaid site at &lt;a href=&quot;https://mermaid.js.org/syntax/flowchart.html&quot;&gt;Flowcharts – basic syntax&lt;/a&gt;. Visit the &lt;a href=&quot;https://mermaid.js.org/intro/&quot;&gt;Mermaid docs&lt;/a&gt; to get an overview of all available diagram types.&lt;/p&gt;
&lt;h3 id=&quot;mermaid-radar-chart&quot; tabindex=&quot;-1&quot;&gt;Mermaid Radar Chart&lt;/h3&gt;
&lt;p&gt;Mermaid does also have more &lt;em&gt;exotic&lt;/em&gt; chart types, like the radar or the Sankey.&lt;/p&gt;
&lt;figure class=&quot;mermaid&quot;&gt;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;svg id=&quot;mermaid-eidkvgvxrrhr&quot; width=&quot;100%&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; style=&quot;max-width: 700px;&quot; viewBox=&quot;0 0 700 700&quot; role=&quot;graphics-document document&quot; aria-roledescription=&quot;radar&quot;&gt;&lt;style&gt;#mermaid-eidkvgvxrrhr{font-family:arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-eidkvgvxrrhr .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-eidkvgvxrrhr .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-eidkvgvxrrhr .error-icon{fill:#552222;}#mermaid-eidkvgvxrrhr .error-text{fill:#552222;stroke:#552222;}#mermaid-eidkvgvxrrhr .edge-thickness-normal{stroke-width:1px;}#mermaid-eidkvgvxrrhr .edge-thickness-thick{stroke-width:3.5px;}#mermaid-eidkvgvxrrhr .edge-pattern-solid{stroke-dasharray:0;}#mermaid-eidkvgvxrrhr .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-eidkvgvxrrhr .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-eidkvgvxrrhr .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-eidkvgvxrrhr .marker{fill:#333333;stroke:#333333;}#mermaid-eidkvgvxrrhr .marker.cross{stroke:#333333;}#mermaid-eidkvgvxrrhr svg{font-family:arial,sans-serif;font-size:16px;}#mermaid-eidkvgvxrrhr p{margin:0;}#mermaid-eidkvgvxrrhr .radarTitle{font-size:16px;color:#333;dominant-baseline:hanging;text-anchor:middle;}#mermaid-eidkvgvxrrhr .radarAxisLine{stroke:#333333;stroke-width:2;}#mermaid-eidkvgvxrrhr .radarAxisLabel{dominant-baseline:middle;text-anchor:middle;font-size:12px;color:#333333;}#mermaid-eidkvgvxrrhr .radarGraticule{fill:#DEDEDE;fill-opacity:0.3;stroke:#DEDEDE;stroke-width:1;}#mermaid-eidkvgvxrrhr .radarLegendText{text-anchor:start;font-size:12px;dominant-baseline:hanging;}#mermaid-eidkvgvxrrhr .radarCurve-0{color:hsl(240, 100%, 76.2745098039%);fill:hsl(240, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(240, 100%, 76.2745098039%);stroke-width:2;}#mermaid-eidkvgvxrrhr .radarLegendBox-0{fill:hsl(240, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(240, 100%, 76.2745098039%);}#mermaid-eidkvgvxrrhr .radarCurve-1{color:hsl(60, 100%, 73.5294117647%);fill:hsl(60, 100%, 73.5294117647%);fill-opacity:0.5;stroke:hsl(60, 100%, 73.5294117647%);stroke-width:2;}#mermaid-eidkvgvxrrhr .radarLegendBox-1{fill:hsl(60, 100%, 73.5294117647%);fill-opacity:0.5;stroke:hsl(60, 100%, 73.5294117647%);}#mermaid-eidkvgvxrrhr .radarCurve-2{color:hsl(80, 100%, 76.2745098039%);fill:hsl(80, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(80, 100%, 76.2745098039%);stroke-width:2;}#mermaid-eidkvgvxrrhr .radarLegendBox-2{fill:hsl(80, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(80, 100%, 76.2745098039%);}#mermaid-eidkvgvxrrhr .radarCurve-3{color:hsl(270, 100%, 76.2745098039%);fill:hsl(270, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(270, 100%, 76.2745098039%);stroke-width:2;}#mermaid-eidkvgvxrrhr .radarLegendBox-3{fill:hsl(270, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(270, 100%, 76.2745098039%);}#mermaid-eidkvgvxrrhr .radarCurve-4{color:hsl(300, 100%, 76.2745098039%);fill:hsl(300, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(300, 100%, 76.2745098039%);stroke-width:2;}#mermaid-eidkvgvxrrhr .radarLegendBox-4{fill:hsl(300, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(300, 100%, 76.2745098039%);}#mermaid-eidkvgvxrrhr .radarCurve-5{color:hsl(330, 100%, 76.2745098039%);fill:hsl(330, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(330, 100%, 76.2745098039%);stroke-width:2;}#mermaid-eidkvgvxrrhr .radarLegendBox-5{fill:hsl(330, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(330, 100%, 76.2745098039%);}#mermaid-eidkvgvxrrhr .radarCurve-6{color:hsl(0, 100%, 76.2745098039%);fill:hsl(0, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(0, 100%, 76.2745098039%);stroke-width:2;}#mermaid-eidkvgvxrrhr .radarLegendBox-6{fill:hsl(0, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(0, 100%, 76.2745098039%);}#mermaid-eidkvgvxrrhr .radarCurve-7{color:hsl(30, 100%, 76.2745098039%);fill:hsl(30, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(30, 100%, 76.2745098039%);stroke-width:2;}#mermaid-eidkvgvxrrhr .radarLegendBox-7{fill:hsl(30, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(30, 100%, 76.2745098039%);}#mermaid-eidkvgvxrrhr .radarCurve-8{color:hsl(90, 100%, 76.2745098039%);fill:hsl(90, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(90, 100%, 76.2745098039%);stroke-width:2;}#mermaid-eidkvgvxrrhr .radarLegendBox-8{fill:hsl(90, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(90, 100%, 76.2745098039%);}#mermaid-eidkvgvxrrhr .radarCurve-9{color:hsl(150, 100%, 76.2745098039%);fill:hsl(150, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(150, 100%, 76.2745098039%);stroke-width:2;}#mermaid-eidkvgvxrrhr .radarLegendBox-9{fill:hsl(150, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(150, 100%, 76.2745098039%);}#mermaid-eidkvgvxrrhr .radarCurve-10{color:hsl(180, 100%, 76.2745098039%);fill:hsl(180, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(180, 100%, 76.2745098039%);stroke-width:2;}#mermaid-eidkvgvxrrhr .radarLegendBox-10{fill:hsl(180, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(180, 100%, 76.2745098039%);}#mermaid-eidkvgvxrrhr .radarCurve-11{color:hsl(210, 100%, 76.2745098039%);fill:hsl(210, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(210, 100%, 76.2745098039%);stroke-width:2;}#mermaid-eidkvgvxrrhr .radarLegendBox-11{fill:hsl(210, 100%, 76.2745098039%);fill-opacity:0.5;stroke:hsl(210, 100%, 76.2745098039%);}#mermaid-eidkvgvxrrhr :root{--mermaid-font-family:arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;/g&gt;&lt;g transform=&quot;translate(350, 350)&quot;&gt;&lt;circle r=&quot;60&quot; class=&quot;radarGraticule&quot;&gt;&lt;/circle&gt;&lt;circle r=&quot;120&quot; class=&quot;radarGraticule&quot;&gt;&lt;/circle&gt;&lt;circle r=&quot;180&quot; class=&quot;radarGraticule&quot;&gt;&lt;/circle&gt;&lt;circle r=&quot;240&quot; class=&quot;radarGraticule&quot;&gt;&lt;/circle&gt;&lt;circle r=&quot;300&quot; class=&quot;radarGraticule&quot;&gt;&lt;/circle&gt;&lt;line x1=&quot;0&quot; y1=&quot;0&quot; x2=&quot;1.8369701987210297e-14&quot; y2=&quot;-300&quot; class=&quot;radarAxisLine&quot;&gt;&lt;/line&gt;&lt;text x=&quot;1.9288187086570814e-14&quot; y=&quot;-315&quot; class=&quot;radarAxisLabel&quot;&gt;Math&lt;/text&gt;&lt;line x1=&quot;0&quot; y1=&quot;0&quot; x2=&quot;259.8076211353316&quot; y2=&quot;-150&quot; class=&quot;radarAxisLine&quot;&gt;&lt;/line&gt;&lt;text x=&quot;272.7980021920982&quot; y=&quot;-157.5&quot; class=&quot;radarAxisLabel&quot;&gt;Science&lt;/text&gt;&lt;line x1=&quot;0&quot; y1=&quot;0&quot; x2=&quot;259.8076211353316&quot; y2=&quot;149.99999999999994&quot; class=&quot;radarAxisLine&quot;&gt;&lt;/line&gt;&lt;text x=&quot;272.7980021920982&quot; y=&quot;157.49999999999994&quot; class=&quot;radarAxisLabel&quot;&gt;English&lt;/text&gt;&lt;line x1=&quot;0&quot; y1=&quot;0&quot; x2=&quot;1.8369701987210297e-14&quot; y2=&quot;300&quot; class=&quot;radarAxisLine&quot;&gt;&lt;/line&gt;&lt;text x=&quot;1.9288187086570814e-14&quot; y=&quot;315&quot; class=&quot;radarAxisLabel&quot;&gt;History&lt;/text&gt;&lt;line x1=&quot;0&quot; y1=&quot;0&quot; x2=&quot;-259.80762113533154&quot; y2=&quot;150.0000000000001&quot; class=&quot;radarAxisLine&quot;&gt;&lt;/line&gt;&lt;text x=&quot;-272.7980021920981&quot; y=&quot;157.5000000000001&quot; class=&quot;radarAxisLabel&quot;&gt;Geography&lt;/text&gt;&lt;line x1=&quot;0&quot; y1=&quot;0&quot; x2=&quot;-259.8076211353316&quot; y2=&quot;-150.00000000000003&quot; class=&quot;radarAxisLine&quot;&gt;&lt;/line&gt;&lt;text x=&quot;-272.7980021920982&quot; y=&quot;-157.50000000000003&quot; class=&quot;radarAxisLabel&quot;&gt;Art&lt;/text&gt;&lt;path d=&quot;M1.5614246689128753e-14,-255 C79.50113206741148,-255 198.4930225473933,-198.75 233.8268590217984,-135 C269.1606954962035,-71.25 247.596662941971,61.34999999999995 207.84609690826528,119.99999999999996 C168.09553087455956,178.64999999999998 68.45930816915988,211.27499999999998 1.2858791391047208e-14,210 C-68.45930816915985,208.72500000000002 -155.10514981779295,171.1500000000001 -194.85571585149867,112.50000000000007 C-234.6062818852044,53.850000000000065 -266.9523307165532,-72.525 -233.8268590217984,-135.00000000000003 C-200.70138732704362,-197.47500000000005 -79.50113206741145,-255 1.5614246689128753e-14,-255 Z&quot; class=&quot;radarCurve-0&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M1.2858791391047208e-14,-210 C70.6676729488102,-207.45 157.31351459744326,-169.875 194.85571585149867,-112.5 C232.3979171055541,-55.12500000000001 253.96194965978663,67.57499999999996 220.83647796503186,127.49999999999996 C187.7110062702771,187.42499999999995 77.29276728776117,238.72499999999997 1.469576158976824e-14,240 C-77.29276728776114,241.27500000000003 -196.28465776774297,197.47500000000008 -233.82685902179838,135.00000000000009 C-271.3690602758538,72.52500000000009 -260.58704399873756,-68.85 -220.83647796503183,-127.50000000000003 C-181.0859119313261,-186.15000000000006 -70.66767294881018,-212.55 1.2858791391047208e-14,-210 Z&quot; class=&quot;radarCurve-1&quot;&gt;&lt;/path&gt;&lt;g transform=&quot;translate(262.5, -262.5)&quot;&gt;&lt;rect width=&quot;12&quot; height=&quot;12&quot; class=&quot;radarLegendBox-0&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;16&quot; y=&quot;0&quot; class=&quot;radarLegendText&quot;&gt;Alice&lt;/text&gt;&lt;/g&gt;&lt;g transform=&quot;translate(262.5, -242.5)&quot;&gt;&lt;rect width=&quot;12&quot; height=&quot;12&quot; class=&quot;radarLegendBox-1&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;16&quot; y=&quot;0&quot; class=&quot;radarLegendText&quot;&gt;Bob&lt;/text&gt;&lt;/g&gt;&lt;text class=&quot;radarTitle&quot; x=&quot;0&quot; y=&quot;-350&quot;&gt;&lt;/text&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/body&gt;&lt;/html&gt;&lt;figcaption&gt;A Mermaid-generated radar chart, made with a few lines of text&lt;/figcaption&gt;&lt;/figure&gt;&lt;details&gt;
&lt;summary&gt;&lt;span class=&quot;details-marker&quot;&gt;&lt;/span&gt;How to embed into Markdown&lt;/summary&gt;&lt;pre class=&quot;language-markdown&quot; data-language=&quot;Markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;mermaid&lt;/span&gt;
&lt;span class=&quot;token code-block language-mermaid language-mermaid language-mermaid&quot;&gt;radar-beta

axis m[&quot;Math&quot;], s[&quot;Science&quot;], e[&quot;English&quot;], h[&quot;History&quot;], g[&quot;Geography&quot;], a[&quot;Art&quot;]
curve a[&quot;Alice&quot;]{85, 90, 80, 70, 75, 90}
curve b[&quot;Bob&quot;]{70, 75, 85, 80, 90, 85}

max 100
min 0&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/details&gt;
&lt;h3 id=&quot;mermaid-sankey-chart&quot; tabindex=&quot;-1&quot;&gt;Mermaid Sankey Chart&lt;/h3&gt;
&lt;figure class=&quot;mermaid&quot;&gt;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;svg id=&quot;mermaid-eyqfqqlrjqui&quot; width=&quot;100%&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; style=&quot;max-width: 600px;&quot; viewBox=&quot;0 0 600 403.91900634765625&quot; role=&quot;graphics-document document&quot; aria-roledescription=&quot;sankey&quot;&gt;&lt;style&gt;#mermaid-eyqfqqlrjqui{font-family:arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-eyqfqqlrjqui .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-eyqfqqlrjqui .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-eyqfqqlrjqui .error-icon{fill:#552222;}#mermaid-eyqfqqlrjqui .error-text{fill:#552222;stroke:#552222;}#mermaid-eyqfqqlrjqui .edge-thickness-normal{stroke-width:1px;}#mermaid-eyqfqqlrjqui .edge-thickness-thick{stroke-width:3.5px;}#mermaid-eyqfqqlrjqui .edge-pattern-solid{stroke-dasharray:0;}#mermaid-eyqfqqlrjqui .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-eyqfqqlrjqui .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-eyqfqqlrjqui .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-eyqfqqlrjqui .marker{fill:#333333;stroke:#333333;}#mermaid-eyqfqqlrjqui .marker.cross{stroke:#333333;}#mermaid-eyqfqqlrjqui svg{font-family:arial,sans-serif;font-size:16px;}#mermaid-eyqfqqlrjqui p{margin:0;}#mermaid-eyqfqqlrjqui .label{font-family:arial,sans-serif;}#mermaid-eyqfqqlrjqui :root{--mermaid-font-family:arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;/g&gt;&lt;g class=&quot;nodes&quot;&gt;&lt;g class=&quot;node&quot; id=&quot;node-1&quot; transform=&quot;translate(0,72.09567842889594)&quot; x=&quot;0&quot; y=&quot;72.09567842889594&quot;&gt;&lt;rect height=&quot;9.220636581860191&quot; width=&quot;10&quot; fill=&quot;#4e79a7&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-2&quot; transform=&quot;translate(84.28571428571429,88.20528658319179)&quot; x=&quot;84.28571428571429&quot; y=&quot;88.20528658319179&quot;&gt;&lt;rect height=&quot;28.751421743138962&quot; width=&quot;10&quot; fill=&quot;#f28e2c&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-3&quot; transform=&quot;translate(168.57142857142858,332.97985250039255)&quot; x=&quot;168.57142857142858&quot; y=&quot;332.97985250039255&quot;&gt;&lt;rect height=&quot;47.8731039464526&quot; width=&quot;10&quot; fill=&quot;#e15759&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-4&quot; transform=&quot;translate(590,0.18272916807304762)&quot; x=&quot;590&quot; y=&quot;0.18272916807304762&quot;&gt;&lt;rect height=&quot;64.93049431777976&quot; width=&quot;10&quot; fill=&quot;#76b7b2&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-5&quot; transform=&quot;translate(168.57142857142858,95.13615275845761)&quot; x=&quot;168.57142857142858&quot; y=&quot;95.13615275845761&quot;&gt;&lt;rect height=&quot;33.08012136432423&quot; width=&quot;10&quot; fill=&quot;#59a14f&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-6&quot; transform=&quot;translate(168.57142857142858,138.21627412278184)&quot; x=&quot;168.57142857142858&quot; y=&quot;138.21627412278184&quot;&gt;&lt;rect height=&quot;15.08794477986612&quot; width=&quot;10&quot; fill=&quot;#edc949&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-7&quot; transform=&quot;translate(0,332.17102949516357)&quot; x=&quot;0&quot; y=&quot;332.17102949516357&quot;&gt;&lt;rect height=&quot;2.587387699453302&quot; width=&quot;10&quot; fill=&quot;#af7aa1&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-8&quot; transform=&quot;translate(0,125.0948937639732)&quot; x=&quot;0&quot; y=&quot;125.0948937639732&quot;&gt;&lt;rect height=&quot;2.5873876994532594&quot; width=&quot;10&quot; fill=&quot;#ff9da7&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-9&quot; transform=&quot;translate(0,137.68228146342648)&quot; x=&quot;0&quot; y=&quot;137.68228146342648&quot;&gt;&lt;rect height=&quot;0.8579777611386987&quot; width=&quot;10&quot; fill=&quot;#9c755f&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-10&quot; transform=&quot;translate(84.28571428571429,158.44588836836448)&quot; x=&quot;84.28571428571429&quot; y=&quot;158.44588836836448&quot;&gt;&lt;rect height=&quot;5.586613595296626&quot; width=&quot;10&quot; fill=&quot;#bab0ab&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-11&quot; transform=&quot;translate(0,168.47560621437722)&quot; x=&quot;0&quot; y=&quot;168.47560621437722&quot;&gt;&lt;rect height=&quot;4.728635834157956&quot; width=&quot;10&quot; fill=&quot;#4e79a7&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-12&quot; transform=&quot;translate(337.14285714285717,63.864261550154154)&quot; x=&quot;337.14285714285717&quot; y=&quot;63.864261550154154&quot;&gt;&lt;rect height=&quot;5.86442510885513&quot; width=&quot;10&quot; fill=&quot;#f28e2c&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-13&quot; transform=&quot;translate(590,96.60216340475654)&quot; x=&quot;590&quot; y=&quot;96.60216340475654&quot;&gt;&lt;rect height=&quot;42.05813490533856&quot; width=&quot;10&quot; fill=&quot;#e15759&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-14&quot; transform=&quot;translate(590,186.1752444343467)&quot; x=&quot;590&quot; y=&quot;186.1752444343467&quot;&gt;&lt;rect height=&quot;9.91812238026995&quot; width=&quot;10&quot; fill=&quot;#76b7b2&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-15&quot; transform=&quot;translate(590,148.6602983100951)&quot; x=&quot;590&quot; y=&quot;148.6602983100951&quot;&gt;&lt;rect height=&quot;27.514946124251594&quot; width=&quot;10&quot; fill=&quot;#59a14f&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-16&quot; transform=&quot;translate(337.14285714285717,197.4656550581489)&quot; x=&quot;337.14285714285717&quot; y=&quot;197.4656550581489&quot;&gt;&lt;rect height=&quot;67.90835578376198&quot; width=&quot;10&quot; fill=&quot;#edc949&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-17&quot; transform=&quot;translate(590,78.88043747987103)&quot; x=&quot;590&quot; y=&quot;78.88043747987103&quot;&gt;&lt;rect height=&quot;7.721725924885504&quot; width=&quot;10&quot; fill=&quot;#af7aa1&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-18&quot; transform=&quot;translate(421.42857142857144,242.73268021576226)&quot; x=&quot;421.42857142857144&quot; y=&quot;242.73268021576226&quot;&gt;&lt;rect height=&quot;2.006334347518873&quot; width=&quot;10&quot; fill=&quot;#ff9da7&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-19&quot; transform=&quot;translate(590,298.3074464040654)&quot; x=&quot;590&quot; y=&quot;298.3074464040654&quot;&gt;&lt;rect height=&quot;14.380626908198394&quot; width=&quot;10&quot; fill=&quot;#9c755f&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-20&quot; transform=&quot;translate(590,233.9039735188384)&quot; x=&quot;590&quot; y=&quot;233.9039735188384&quot;&gt;&lt;rect height=&quot;0.8153967521419645&quot; width=&quot;10&quot; fill=&quot;#bab0ab&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-21&quot; transform=&quot;translate(590,322.6880733122638)&quot; x=&quot;590&quot; y=&quot;322.6880733122638&quot;&gt;&lt;rect height=&quot;0.9075077542424879&quot; width=&quot;10&quot; fill=&quot;#4e79a7&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-22&quot; transform=&quot;translate(590,217.2500994601987)&quot; x=&quot;590&quot; y=&quot;217.2500994601987&quot;&gt;&lt;rect height=&quot;6.653874058639701&quot; width=&quot;10&quot; fill=&quot;#f28e2c&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-23&quot; transform=&quot;translate(590,244.71937027098036)&quot; x=&quot;590&quot; y=&quot;244.71937027098036&quot;&gt;&lt;rect height=&quot;6.911577873505337&quot; width=&quot;10&quot; fill=&quot;#e15759&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-24&quot; transform=&quot;translate(0,183.20424204853518)&quot; x=&quot;0&quot; y=&quot;183.20424204853518&quot;&gt;&lt;rect height=&quot;3.010166849543907&quot; width=&quot;10&quot; fill=&quot;#76b7b2&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-25&quot; transform=&quot;translate(84.28571428571429,184.7650080756903)&quot; x=&quot;84.28571428571429&quot; y=&quot;184.7650080756903&quot;&gt;&lt;rect height=&quot;9.089271212090779&quot; width=&quot;10&quot; fill=&quot;#59a14f&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-26&quot; transform=&quot;translate(0,196.21440889807909)&quot; x=&quot;0&quot; y=&quot;196.21440889807909&quot;&gt;&lt;rect height=&quot;6.079104362546872&quot; width=&quot;10&quot; fill=&quot;#edc949&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-27&quot; transform=&quot;translate(252.8571428571429,4.1019553082988605)&quot; x=&quot;252.8571428571429&quot; y=&quot;4.1019553082988605&quot;&gt;&lt;rect height=&quot;102.9032918964073&quot; width=&quot;10&quot; fill=&quot;#af7aa1&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-28&quot; transform=&quot;translate(0,212.29351326062596)&quot; x=&quot;0&quot; y=&quot;212.29351326062596&quot;&gt;&lt;rect height=&quot;0.5184385696075822&quot; width=&quot;10&quot; fill=&quot;#ff9da7&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-29&quot; transform=&quot;translate(505.7142857142858,247.55307040930583)&quot; x=&quot;505.7142857142858&quot; y=&quot;247.55307040930583&quot;&gt;&lt;rect height=&quot;1.5448183072992947&quot; width=&quot;10&quot; fill=&quot;#9c755f&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-30&quot; transform=&quot;translate(0,268.15814958480337)&quot; x=&quot;0&quot; y=&quot;268.15814958480337&quot;&gt;&lt;rect height=&quot;0.5171079130764156&quot; width=&quot;10&quot; fill=&quot;#bab0ab&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-31&quot; transform=&quot;translate(590,333.59558106650627)&quot; x=&quot;590&quot; y=&quot;333.59558106650627&quot;&gt;&lt;rect height=&quot;9.513454944075534&quot; width=&quot;10&quot; fill=&quot;#4e79a7&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-32&quot; transform=&quot;translate(590,353.1090360105818)&quot; x=&quot;590&quot; y=&quot;353.1090360105818&quot;&gt;&lt;rect height=&quot;1.0688128959627647&quot; width=&quot;10&quot; fill=&quot;#f28e2c&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-33&quot; transform=&quot;translate(590,364.17784890654457)&quot; x=&quot;590&quot; y=&quot;364.17784890654457&quot;&gt;&lt;rect height=&quot;15.248362817232191&quot; width=&quot;10&quot; fill=&quot;#e15759&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-34&quot; transform=&quot;translate(590,389.42621172377676)&quot; x=&quot;590&quot; y=&quot;389.42621172377676&quot;&gt;&lt;rect height=&quot;2.4556527028696564&quot; width=&quot;10&quot; fill=&quot;#76b7b2&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-35&quot; transform=&quot;translate(0,91.31631501075613)&quot; x=&quot;0&quot; y=&quot;91.31631501075613&quot;&gt;&lt;rect height=&quot;0.32342346243166276&quot; width=&quot;10&quot; fill=&quot;#59a14f&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-36&quot; transform=&quot;translate(0,0)&quot; x=&quot;0&quot; y=&quot;0&quot;&gt;&lt;rect height=&quot;62.09567842889594&quot; width=&quot;10&quot; fill=&quot;#edc949&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-37&quot; transform=&quot;translate(0,344.75841719461687)&quot; x=&quot;0&quot; y=&quot;344.75841719461687&quot;&gt;&lt;rect height=&quot;37.279599451262754&quot; width=&quot;10&quot; fill=&quot;#af7aa1&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-38&quot; transform=&quot;translate(84.28571428571429,341.6162789921701)&quot; x=&quot;84.28571428571429&quot; y=&quot;341.6162789921701&quot;&gt;&lt;rect height=&quot;45.241582805382905&quot; width=&quot;10&quot; fill=&quot;#ff9da7&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-39&quot; transform=&quot;translate(0,392.0380166458796)&quot; x=&quot;0&quot; y=&quot;392.0380166458796&quot;&gt;&lt;rect height=&quot;7.961983354120434&quot; width=&quot;10&quot; fill=&quot;#9c755f&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-40&quot; transform=&quot;translate(0,148.54025922456518)&quot; x=&quot;0&quot; y=&quot;148.54025922456518&quot;&gt;&lt;rect height=&quot;9.935346989812047&quot; width=&quot;10&quot; fill=&quot;#bab0ab&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-41&quot; transform=&quot;translate(0,222.81195183023354)&quot; x=&quot;0&quot; y=&quot;222.81195183023354&quot;&gt;&lt;rect height=&quot;19.493970330583636&quot; width=&quot;10&quot; fill=&quot;#4e79a7&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-42&quot; transform=&quot;translate(84.28571428571429,242.0714175626971)&quot; x=&quot;84.28571428571429&quot; y=&quot;242.0714175626971&quot;&gt;&lt;rect height=&quot;4.428203159569989&quot; width=&quot;10&quot; fill=&quot;#f28e2c&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-43&quot; transform=&quot;translate(84.28571428571429,256.4996207222671)&quot; x=&quot;84.28571428571429&quot; y=&quot;256.4996207222671&quot;&gt;&lt;rect height=&quot;1.424024264416289&quot; width=&quot;10&quot; fill=&quot;#e15759&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-44&quot; transform=&quot;translate(0,252.30592216081718)&quot; x=&quot;0&quot; y=&quot;252.30592216081718&quot;&gt;&lt;rect height=&quot;5.852227423986193&quot; width=&quot;10&quot; fill=&quot;#76b7b2&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-45&quot; transform=&quot;translate(0,278.6752574978798)&quot; x=&quot;0&quot; y=&quot;278.6752574978798&quot;&gt;&lt;rect height=&quot;0.6987425295780554&quot; width=&quot;10&quot; fill=&quot;#59a14f&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-46&quot; transform=&quot;translate(0,101.63973847318779)&quot; x=&quot;0&quot; y=&quot;101.63973847318779&quot;&gt;&lt;rect height=&quot;13.455155290785413&quot; width=&quot;10&quot; fill=&quot;#edc949&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-47&quot; transform=&quot;translate(0,289.37400002745784)&quot; x=&quot;0&quot; y=&quot;289.37400002745784&quot;&gt;&lt;rect height=&quot;1.405542923705866&quot; width=&quot;10&quot; fill=&quot;#af7aa1&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;node&quot; id=&quot;node-48&quot; transform=&quot;translate(0,300.7795429511637)&quot; x=&quot;0&quot; y=&quot;300.7795429511637&quot;&gt;&lt;rect height=&quot;21.39148654399986&quot; width=&quot;10&quot; fill=&quot;#ff9da7&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;node-labels&quot; font-size=&quot;14&quot;&gt;&lt;text x=&quot;16&quot; y=&quot;76.70599671982603&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Agricultural waste&lt;/text&gt;&lt;text x=&quot;100.28571428571429&quot; y=&quot;102.58099745476127&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Bio-conversion&lt;/text&gt;&lt;text x=&quot;184.57142857142858&quot; y=&quot;356.91640447361885&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Liquid&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;32.64797632696293&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;Losses&lt;/text&gt;&lt;text x=&quot;184.57142857142858&quot; y=&quot;111.67621344061973&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Solid&lt;/text&gt;&lt;text x=&quot;184.57142857142858&quot; y=&quot;145.7602465127149&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Gas&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;333.4647233448902&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Biofuel imports&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;126.38858761369983&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Biomass imports&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;138.11127034399584&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Coal imports&lt;/text&gt;&lt;text x=&quot;100.28571428571429&quot; y=&quot;161.2391951660128&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Coal&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;170.8399241314562&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Coal reserves&lt;/text&gt;&lt;text x=&quot;331.14285714285717&quot; y=&quot;66.79647410458172&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;District heating&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;117.63123085742582&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;Industry&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;191.13430562448167&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;Heating and cooling - commercial&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;162.4177713722209&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;Heating and cooling - homes&lt;/text&gt;&lt;text x=&quot;331.14285714285717&quot; y=&quot;231.4198329500299&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;Electricity grid&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;82.74130044231379&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;Over generation / exports&lt;/text&gt;&lt;text x=&quot;415.42857142857144&quot; y=&quot;243.7358473895217&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;H2 conversion&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;305.4977598581646&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;Road transport&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;234.31167189490938&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;Agriculture&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;323.141827189385&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;Rail transport&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;220.57703648951855&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;Lighting &amp;amp; appliances - commercial&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;248.17515920773303&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;Lighting &amp;amp; appliances - homes&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;184.70932547330713&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Gas imports&lt;/text&gt;&lt;text x=&quot;100.28571428571429&quot; y=&quot;189.30964368173568&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;NGas&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;199.2539610793525&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Gas reserves&lt;/text&gt;&lt;text x=&quot;268.8571428571429&quot; y=&quot;55.5536012565025&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Thermal generation&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;212.55273254542976&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Geothermal&lt;/text&gt;&lt;text x=&quot;499.7142857142858&quot; y=&quot;248.32547956295548&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;H2&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;268.4167035413416&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Hydro&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;338.35230853854404&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;International shipping&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;353.6434424585632&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;Domestic aviation&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;371.80203031516066&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;International aviation&lt;/text&gt;&lt;text x=&quot;584&quot; y=&quot;390.6540380752116&quot; dy=&quot;0.35em&quot; text-anchor=&quot;end&quot;&gt;National navigation&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;91.47802674197196&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Marine algae&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;31.04783921444797&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Nuclear&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;363.3982169202483&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Oil imports&lt;/text&gt;&lt;text x=&quot;100.28571428571429&quot; y=&quot;364.2370703948616&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Oil&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;396.01900832293984&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Oil reserves&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;153.5079327194712&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Other waste&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;232.55893699552536&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Pumped heat&lt;/text&gt;&lt;text x=&quot;100.28571428571429&quot; y=&quot;244.2855191424821&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Solar PV&lt;/text&gt;&lt;text x=&quot;100.28571428571429&quot; y=&quot;257.2116328544752&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Solar Thermal&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;255.2320358728103&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Solar&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;279.02462876266884&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Tidal&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;108.3673161185805&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;UK land based bioenergy&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;290.0767714893108&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Wave&lt;/text&gt;&lt;text x=&quot;16&quot; y=&quot;311.4752862231636&quot; dy=&quot;0.35em&quot; text-anchor=&quot;start&quot;&gt;Wind&lt;/text&gt;&lt;/g&gt;&lt;g class=&quot;links&quot; fill=&quot;none&quot; stroke-opacity=&quot;0.5&quot;&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-49&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;84.28571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#4e79a7&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,76.70599671982603C47.142857142857146,76.70599671982603,47.142857142857146,92.81560487412189,84.28571428571429,92.81560487412189&quot; stroke=&quot;url(#linearGradient-49)&quot; stroke-width=&quot;9.220636581860193&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-50&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;94.28571428571429&quot; x2=&quot;168.57142857142858&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M94.28571428571429,116.93464160552253C131.42857142857144,116.93464160552253,131.42857142857144,333.00191922120075,168.57142857142858,333.00191922120075&quot; stroke=&quot;url(#linearGradient-50)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-51&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;94.28571428571429&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M94.28571428571429,89.19817813151627C342.14285714285717,89.19817813151627,342.14285714285717,59.36441764448186,590,59.36441764448186&quot; stroke=&quot;url(#linearGradient-51)&quot; stroke-width=&quot;1.9857830966489627&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-52&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;94.28571428571429&quot; x2=&quot;168.57142857142858&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M94.28571428571429,100.5525224610713C131.42857142857144,100.5525224610713,131.42857142857144,105.49760553968817,168.57142857142858,105.49760553968817&quot; stroke=&quot;url(#linearGradient-52)&quot; stroke-width=&quot;20.72290556246112&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-53&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;94.28571428571429&quot; x2=&quot;168.57142857142858&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M94.28571428571429,113.91327506350811C131.42857142857144,113.91327506350811,131.42857142857144,141.21557394398806,168.57142857142858,141.21557394398806&quot; stroke=&quot;url(#linearGradient-53)&quot; stroke-width=&quot;5.998599642412458&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-54&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;168.57142857142858&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#af7aa1&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,333.4647233448902C89.28571428571429,333.4647233448902,89.28571428571429,334.3176797917356,168.57142857142858,334.3176797917356&quot; stroke=&quot;url(#linearGradient-54)&quot; stroke-width=&quot;2.5873876994532683&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-55&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;168.57142857142858&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#ff9da7&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,126.38858761369984C89.28571428571429,126.38858761369984,89.28571428571429,117.15275217064537,168.57142857142858,117.15275217064537&quot; stroke=&quot;url(#linearGradient-55)&quot; stroke-width=&quot;2.5873876994532683&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-56&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;84.28571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#9c755f&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#bab0ab&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,138.11127034399584C47.142857142857146,138.11127034399584,47.142857142857146,158.87487724893384,84.28571428571429,158.87487724893384&quot; stroke=&quot;url(#linearGradient-56)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-57&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;84.28571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#4e79a7&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#bab0ab&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,170.8399241314562C47.142857142857146,170.8399241314562,47.142857142857146,161.66818404658216,84.28571428571429,161.66818404658216&quot; stroke=&quot;url(#linearGradient-57)&quot; stroke-width=&quot;4.728635834157952&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-58&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;94.28571428571429&quot; x2=&quot;168.57142857142858&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#bab0ab&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M94.28571428571429,161.23919516601282C131.42857142857144,161.23919516601282,131.42857142857144,125.42296732513354,168.57142857142858,125.42296732513354&quot; stroke=&quot;url(#linearGradient-58)&quot; stroke-width=&quot;5.586613595296655&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-59&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,64.25750751778963C468.57142857142856,64.25750751778963,468.57142857142856,96.99540937239202,590,96.99540937239202&quot; stroke=&quot;url(#linearGradient-59)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-60&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,68.89676758827218C468.57142857142856,68.89676758827218,468.57142857142856,187.0070895797209,590,187.0070895797209&quot; stroke=&quot;url(#linearGradient-60)&quot; stroke-width=&quot;1.6636902907484517&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-61&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,66.35783796416152C468.57142857142856,66.35783796416152,468.57142857142856,150.36738278883152,590,150.36738278883152&quot; stroke=&quot;url(#linearGradient-61)&quot; stroke-width=&quot;3.41416895747285&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-62&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#af7aa1&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,205.5174207654404C468.57142857142856,205.5174207654404,468.57142857142856,82.74130044231379,590,82.74130044231379&quot; stroke=&quot;url(#linearGradient-62)&quot; stroke-width=&quot;7.721725924885494&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-63&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,238.87657341180997C468.57142857142856,238.87657341180997,468.57142857142856,156.2780851748254,590,156.2780851748254&quot; stroke=&quot;url(#linearGradient-63)&quot; stroke-width=&quot;8.407235814514927&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-64&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;421.42857142857144&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#ff9da7&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,247.1038009678058C384.28571428571433,247.1038009678058,384.28571428571433,243.73584738952172,421.42857142857144,243.73584738952172&quot; stroke=&quot;url(#linearGradient-64)&quot; stroke-width=&quot;2.006334347518906&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-65&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,222.02561961621782C468.57142857142856,222.02561961621782,468.57142857142856,117.06311444398872,590,117.06311444398872&quot; stroke=&quot;url(#linearGradient-65)&quot; stroke-width=&quot;25.29467177666936&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-66&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#9c755f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,263.39565724422755C468.57142857142856,263.39565724422755,468.57142857142856,299.7045248737259,590,299.7045248737259&quot; stroke=&quot;url(#linearGradient-66)&quot; stroke-width=&quot;2.794156939321005&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-67&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#bab0ab&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,254.92392155063334C468.57142857142856,254.92392155063334,468.57142857142856,234.28720259980886,590,234.28720259980886&quot; stroke=&quot;url(#linearGradient-67)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-68&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,244.59041255655688C468.57142857142856,244.59041255655688,468.57142857142856,189.35869233439115,590,189.35869233439115&quot; stroke=&quot;url(#linearGradient-68)&quot; stroke-width=&quot;3.020442474978904&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-69&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,199.56110643057326C468.57142857142856,199.56110643057326,468.57142857142856,62.556329998571684,590,62.556329998571684&quot; stroke=&quot;url(#linearGradient-69)&quot; stroke-width=&quot;4.190902744848722&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-70&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#4e79a7&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,265.08337327789945C468.57142857142856,265.08337327789945,468.57142857142856,322.9787108762752,590,322.9787108762752&quot; stroke=&quot;url(#linearGradient-70)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-71&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,251.43390517088508C468.57142857142856,251.43390517088508,468.57142857142856,220.57703648951855,590,220.57703648951855&quot; stroke=&quot;url(#linearGradient-71)&quot; stroke-width=&quot;6.653874058639708&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-72&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;347.14285714285717&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M347.14285714285717,258.5427898378144C468.57142857142856,258.5427898378144,468.57142857142856,248.175159207733,590,248.175159207733&quot; stroke=&quot;url(#linearGradient-72)&quot; stroke-width=&quot;6.911577873505254&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-73&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;84.28571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,184.70932547330713C47.142857142857146,184.70932547330713,47.142857142857146,186.27009150046226,84.28571428571429,186.27009150046226&quot; stroke=&quot;url(#linearGradient-73)&quot; stroke-width=&quot;3.010166849543933&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-74&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;84.28571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,199.25396107935254C47.142857142857146,199.25396107935254,47.142857142857146,190.8147271065077,84.28571428571429,190.8147271065077&quot; stroke=&quot;url(#linearGradient-74)&quot; stroke-width=&quot;6.079104362546875&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-75&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,153.14450315622886C384.2857142857143,153.14450315622886,384.2857142857143,187.84370291099845,590,187.84370291099845&quot; stroke=&quot;url(#linearGradient-75)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-76&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,138.26805883945232C384.2857142857143,138.26805883945232,384.2857142857143,60.40909390947684,590,60.40909390947684&quot; stroke=&quot;url(#linearGradient-76)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-77&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;252.8571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#af7aa1&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,143.9341421998036C215.71428571428572,143.9341421998036,215.71428571428572,101.39094856102537,252.8571428571429,101.39094856102537&quot; stroke=&quot;url(#linearGradient-77)&quot; stroke-width=&quot;11.22859728736161&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-78&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#bab0ab&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,153.22674512239004C384.2857142857143,153.22674512239004,384.2857142857143,234.04664946912254,590,234.04664946912254&quot; stroke=&quot;url(#linearGradient-78)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-79&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,151.344087906905C384.2857142857143,151.344087906905,384.2857142857143,102.62013149223348,590,102.62013149223348&quot; stroke=&quot;url(#linearGradient-79)&quot; stroke-width=&quot;3.5912941268411367&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-80&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;337.14285714285717&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#ff9da7&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,212.55273254542976C173.57142857142858,212.55273254542976,173.57142857142858,236.5749442024206,337.14285714285717,236.5749442024206&quot; stroke=&quot;url(#linearGradient-80)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-81&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;431.42857142857144&quot; x2=&quot;505.7142857142858&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#ff9da7&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#9c755f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M431.42857142857144,243.9665314842687C468.5714285714286,243.9665314842687,468.5714285714286,248.32547956295548,505.7142857142858,248.32547956295548&quot; stroke=&quot;url(#linearGradient-81)&quot; stroke-width=&quot;1.5448183072992843&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-82&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;431.42857142857144&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#ff9da7&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M431.42857142857144,242.96340127319064C510.7142857142857,242.96340127319064,510.7142857142857,64.88250242842444,590,64.88250242842444&quot; stroke=&quot;url(#linearGradient-82)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-83&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;515.7142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#9c755f&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#9c755f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M515.7142857142858,248.32547956295548C552.8571428571429,248.32547956295548,552.8571428571429,301.874012497036,590,301.874012497036&quot; stroke=&quot;url(#linearGradient-83)&quot; stroke-width=&quot;1.5448183072992843&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-84&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;337.14285714285717&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#bab0ab&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,268.4167035413416C173.57142857142858,268.4167035413416,173.57142857142858,241.52092060333263,337.14285714285717,241.52092060333263&quot; stroke=&quot;url(#linearGradient-84)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-85&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,337.4547764892784C384.2857142857143,337.4547764892784,384.2857142857143,134.18537432120925,590,134.18537432120925&quot; stroke=&quot;url(#linearGradient-85)&quot; stroke-width=&quot;8.949847977771698&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-86&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#4e79a7&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,357.3234005587429C384.2857142857143,357.3234005587429,384.2857142857143,338.352308538544,590,338.352308538544&quot; stroke=&quot;url(#linearGradient-86)&quot; stroke-width=&quot;9.51345494407546&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-87&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#9c755f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,347.2196146296965C384.2857142857143,347.2196146296965,384.2857142857143,307.66724748147476,590,307.66724748147476&quot; stroke=&quot;url(#linearGradient-87)&quot; stroke-width=&quot;10.041651661578136&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-88&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,362.61453447876204C384.2857142857143,362.61453447876204,384.2857142857143,353.6434424585632,590,353.6434424585632&quot; stroke=&quot;url(#linearGradient-88)&quot; stroke-width=&quot;1.0688128959627246&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-89&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,370.77312233535946C384.2857142857143,370.77312233535946,384.2857142857143,371.80203031516066,590,371.80203031516066&quot; stroke=&quot;url(#linearGradient-89)&quot; stroke-width=&quot;15.24836281723221&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-90&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#bab0ab&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,342.0642446385358C384.2857142857143,342.0642446385358,384.2857142857143,234.58482611060884,590,234.58482611060884&quot; stroke=&quot;url(#linearGradient-90)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-91&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,379.6251300954104C384.2857142857143,379.6251300954104,384.2857142857143,390.6540380752116,590,390.6540380752116&quot; stroke=&quot;url(#linearGradient-91)&quot; stroke-width=&quot;2.455652702869677&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-92&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#4e79a7&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,352.40355677359537C384.2857142857143,352.40355677359537,384.2857142857143,323.43246475339646,590,323.43246475339646&quot; stroke=&quot;url(#linearGradient-92)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-93&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;84.28571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,91.47802674197196C47.142857142857146,91.47802674197196,47.142857142857146,97.58763489626782,84.28571428571429,97.58763489626782&quot; stroke=&quot;url(#linearGradient-93)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-94&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;94.28571428571429&quot; x2=&quot;168.57142857142858&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M94.28571428571429,189.3096436817357C131.42857142857144,189.3096436817357,131.42857142857144,148.7595093712397,168.57142857142858,148.7595093712397&quot; stroke=&quot;url(#linearGradient-94)&quot; stroke-width=&quot;9.089271212090807&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-95&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;252.8571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#af7aa1&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,31.047839214447965C131.42857142857144,31.047839214447965,131.42857142857144,35.149794522746824,252.8571428571429,35.149794522746824&quot; stroke=&quot;url(#linearGradient-95)&quot; stroke-width=&quot;62.09567842889593&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-96&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;84.28571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#af7aa1&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#ff9da7&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,363.39821692024816C47.142857142857146,363.39821692024816,47.142857142857146,360.2560787178014,84.28571428571429,360.2560787178014&quot; stroke=&quot;url(#linearGradient-96)&quot; stroke-width=&quot;37.279599451262584&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-97&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;84.28571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#9c755f&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#ff9da7&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,396.01900832293984C47.142857142857146,396.01900832293984,47.142857142857146,382.8768701204929,84.28571428571429,382.8768701204929&quot; stroke=&quot;url(#linearGradient-97)&quot; stroke-width=&quot;7.96198335412044&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-98&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;94.28571428571429&quot; x2=&quot;168.57142857142858&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#ff9da7&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M94.28571428571429,364.23707039486163C131.42857142857144,364.23707039486163,131.42857142857144,358.2321650441537,168.57142857142858,358.2321650441537&quot; stroke=&quot;url(#linearGradient-98)&quot; stroke-width=&quot;45.241582805383025&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-99&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;168.57142857142858&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#bab0ab&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,156.38399896082058C89.28571428571429,156.38399896082058,89.28571428571429,120.53805327392861,168.57142857142858,120.53805327392861&quot; stroke=&quot;url(#linearGradient-99)&quot; stroke-width=&quot;4.183214507113203&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-100&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;84.28571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#bab0ab&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,151.41632546591458C47.142857142857146,151.41632546591458,47.142857142857146,114.08056815961847,84.28571428571429,114.08056815961847&quot; stroke=&quot;url(#linearGradient-100)&quot; stroke-width=&quot;5.752132482698824&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-101&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#4e79a7&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,229.94671037415736C300,229.94671037415736,300,167.6164616260067,590,167.6164616260067&quot; stroke=&quot;url(#linearGradient-101)&quot; stroke-width=&quot;14.269517087847618&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-102&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#4e79a7&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,239.69369553944918C300,239.69369553944918,300,193.48114019324862,590,193.48114019324862&quot; stroke=&quot;url(#linearGradient-102)&quot; stroke-width=&quot;5.22445324273604&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-103&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;94.28571428571429&quot; x2=&quot;337.14285714285717&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M94.28571428571429,244.2855191424821C215.71428571428572,244.2855191424821,215.71428571428572,239.04826506700937,337.14285714285717,239.04826506700937&quot; stroke=&quot;url(#linearGradient-103)&quot; stroke-width=&quot;4.428203159570007&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-104&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;94.28571428571429&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M94.28571428571429,257.2116328544752C342.14285714285717,257.2116328544752,342.14285714285717,175.4632323021386,590,175.4632323021386&quot; stroke=&quot;url(#linearGradient-104)&quot; stroke-width=&quot;1.4240242644162375&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-105&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;84.28571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,257.44613745259534C47.142857142857146,257.44613745259534,47.142857142857146,257.2116328544752,84.28571428571429,257.2116328544752&quot; stroke=&quot;url(#linearGradient-105)&quot; stroke-width=&quot;1.4240242644162375&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-106&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;84.28571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,254.52002374060217C47.142857142857146,254.52002374060217,47.142857142857146,244.2855191424821,84.28571428571429,244.2855191424821&quot; stroke=&quot;url(#linearGradient-106)&quot; stroke-width=&quot;4.428203159570007&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-107&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#bab0ab&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,128.18359911240591C384.2857142857143,128.18359911240591,384.2857142857143,233.9365746038515,590,233.9365746038515&quot; stroke=&quot;url(#linearGradient-107)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-108&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;252.8571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#af7aa1&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,109.92566084853249C215.71428571428572,109.92566084853249,215.71428571428572,80.98714182726968,252.8571428571429,80.98714182726968&quot; stroke=&quot;url(#linearGradient-108)&quot; stroke-width=&quot;29.579016180149765&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-109&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;178.57142857142858&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#e15759&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M178.57142857142858,126.43308348300009C384.2857142857143,126.43308348300009,384.2857142857143,99.10656988442021,590,99.10656988442021&quot; stroke=&quot;url(#linearGradient-109)&quot; stroke-width=&quot;3.435829088785416&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-110&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;262.8571428571429&quot; x2=&quot;337.14285714285717&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#af7aa1&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M262.8571428571429,87.58021227497223C300,87.58021227497223,300,216.89068998788284,337.14285714285717,216.89068998788284&quot; stroke=&quot;url(#linearGradient-110)&quot; stroke-width=&quot;38.85006985946787&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-111&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;262.8571428571429&quot; x2=&quot;590&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#af7aa1&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#76b7b2&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M262.8571428571429,33.19635377234103C426.42857142857144,33.19635377234103,426.42857142857144,29.277127632115217,590,29.277127632115217&quot; stroke=&quot;url(#linearGradient-111)&quot; stroke-width=&quot;58.18879692808434&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-112&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;262.8571428571429&quot; x2=&quot;337.14285714285717&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#af7aa1&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M262.8571428571429,65.22296479081075C300,65.22296479081075,300,66.7964741045817,337.14285714285717,66.7964741045817&quot; stroke=&quot;url(#linearGradient-112)&quot; stroke-width=&quot;5.8644251088550945&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-113&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;337.14285714285717&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#59a14f&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,279.02462876266884C173.57142857142858,279.02462876266884,173.57142857142858,242.12884582465986,337.14285714285717,242.12884582465986&quot; stroke=&quot;url(#linearGradient-113)&quot; stroke-width=&quot;1&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-114&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;84.28571428571429&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#f28e2c&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,108.36731611858049C47.142857142857146,108.36731611858049,47.142857142857146,104.47692427287635,84.28571428571429,104.47692427287635&quot; stroke=&quot;url(#linearGradient-114)&quot; stroke-width=&quot;13.455155290785411&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-115&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;337.14285714285717&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#af7aa1&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,290.0767714893108C173.57142857142858,290.0767714893108,173.57142857142858,243.18098855130182,337.14285714285717,243.18098855130182&quot; stroke=&quot;url(#linearGradient-115)&quot; stroke-width=&quot;1.4055429237058572&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;link&quot; style=&quot;mix-blend-mode: multiply;&quot;&gt;&lt;linearGradient id=&quot;linearGradient-116&quot; gradientUnits=&quot;userSpaceOnUse&quot; x1=&quot;10&quot; x2=&quot;337.14285714285717&quot;&gt;&lt;stop offset=&quot;0%&quot; stop-color=&quot;#ff9da7&quot;&gt;&lt;/stop&gt;&lt;stop offset=&quot;100%&quot; stop-color=&quot;#edc949&quot;&gt;&lt;/stop&gt;&lt;/linearGradient&gt;&lt;path d=&quot;M10,311.4752862231636C173.57142857142858,311.4752862231636,173.57142857142858,254.5795032851547,337.14285714285717,254.5795032851547&quot; stroke=&quot;url(#linearGradient-116)&quot; stroke-width=&quot;21.391486543999843&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/body&gt;&lt;/html&gt;&lt;figcaption&gt;A Sankey chart generated by Mermaid&lt;/figcaption&gt;&lt;/figure&gt;&lt;details&gt;
&lt;summary&gt;&lt;span class=&quot;details-marker&quot;&gt;&lt;/span&gt;How to embed into Markdown&lt;/summary&gt;&lt;pre class=&quot;language-markdown&quot; data-language=&quot;Markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;mermaid&lt;/span&gt;
&lt;span class=&quot;token code-block language-mermaid language-mermaid language-mermaid&quot;&gt;---
config:
  sankey:
    showValues: false
---
sankey-beta

Agricultural &#39;waste&#39;,Bio-conversion,124.729
Bio-conversion,Liquid,0.597
Bio-conversion,Losses,26.862
Bio-conversion,Solid,280.322
Bio-conversion,Gas,81.144
Biofuel imports,Liquid,35
Biomass imports,Solid,35
Coal imports,Coal,11.606
Coal reserves,Coal,63.965
Coal,Solid,75.571
District heating,Industry,10.639
District heating,Heating and cooling - commercial,22.505
District heating,Heating and cooling - homes,46.184
Electricity grid,Over generation / exports,104.453
Electricity grid,Heating and cooling - homes,113.726
Electricity grid,H2 conversion,27.14
Electricity grid,Industry,342.165
Electricity grid,Road transport,37.797
Electricity grid,Agriculture,4.412
Electricity grid,Heating and cooling - commercial,40.858
Electricity grid,Losses,56.691
Electricity grid,Rail transport,7.863
Electricity grid,Lighting &amp;amp; appliances - commercial,90.008
Electricity grid,Lighting &amp;amp; appliances - homes,93.494
Gas imports,NGas,40.719
Gas reserves,NGas,82.233
Gas,Heating and cooling - commercial,0.129
Gas,Losses,1.401
Gas,Thermal generation,151.891
Gas,Agriculture,2.096
Gas,Industry,48.58
Geothermal,Electricity grid,7.013
H2 conversion,H2,20.897
H2 conversion,Losses,6.242
H2,Road transport,20.897
Hydro,Electricity grid,6.995
Liquid,Industry,121.066
Liquid,International shipping,128.69
Liquid,Road transport,135.835
Liquid,Domestic aviation,14.458
Liquid,International aviation,206.267
Liquid,Agriculture,3.64
Liquid,National navigation,33.218
Liquid,Rail transport,4.413
Marine algae,Bio-conversion,4.375
NGas,Gas,122.952
Nuclear,Thermal generation,839.978
Oil imports,Oil,504.287
Oil reserves,Oil,107.703
Oil,Liquid,611.99
Other waste,Solid,56.587
Other waste,Bio-conversion,77.81
Pumped heat,Heating and cooling - homes,193.026
Pumped heat,Heating and cooling - commercial,70.672
Solar PV,Electricity grid,59.901
Solar Thermal,Heating and cooling - homes,19.263
Solar,Solar Thermal,19.263
Solar,Solar PV,59.901
Solid,Agriculture,0.882
Solid,Thermal generation,400.12
Solid,Industry,46.477
Thermal generation,Electricity grid,525.531
Thermal generation,Losses,787.129
Thermal generation,District heating,79.329
Tidal,Electricity grid,9.452
UK land based bioenergy,Bio-conversion,182.01
Wave,Electricity grid,19.013
Wind,Electricity grid,289.366&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/details&gt;
&lt;h3 id=&quot;mermaid-pie-chart&quot; tabindex=&quot;-1&quot;&gt;Mermaid Pie Chart&lt;/h3&gt;
&lt;p&gt;Other examples are the xy chart or the pie chart. Those charts can be useful, but they are fairly simple and some might find they are not polished enough. The syntax isn´t consistent either. The xy chart requires a title to be in double quotes to avoid having all spaces removed from the title text, while for the pie chart double quotes are supported, but the title would be better without quotes because the quotes are rendered into the diagram. Also, the titles of the two diagram types are rendered in different font sizes. Generally, font sizes vary across the different Mermaid chart types. At the beginning of this document I mentioned standardized output creation from text definitions is a benefit of text-to-chart, but it is not to 100% achieved in this case. It is a probably a minor complaint, depending on your context, but I expect these things to be aligned when using a charting software.&lt;/p&gt;
&lt;figure class=&quot;mermaid&quot;&gt;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;svg id=&quot;mermaid-sfrxgynezsux&quot; width=&quot;100%&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; viewBox=&quot;0 0 573.2783203125 450&quot; style=&quot;max-width: 573.2783203125px;&quot; role=&quot;graphics-document document&quot; aria-roledescription=&quot;pie&quot;&gt;&lt;style&gt;#mermaid-sfrxgynezsux{font-family:arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-sfrxgynezsux .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-sfrxgynezsux .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-sfrxgynezsux .error-icon{fill:#552222;}#mermaid-sfrxgynezsux .error-text{fill:#552222;stroke:#552222;}#mermaid-sfrxgynezsux .edge-thickness-normal{stroke-width:1px;}#mermaid-sfrxgynezsux .edge-thickness-thick{stroke-width:3.5px;}#mermaid-sfrxgynezsux .edge-pattern-solid{stroke-dasharray:0;}#mermaid-sfrxgynezsux .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-sfrxgynezsux .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-sfrxgynezsux .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-sfrxgynezsux .marker{fill:#333333;stroke:#333333;}#mermaid-sfrxgynezsux .marker.cross{stroke:#333333;}#mermaid-sfrxgynezsux svg{font-family:arial,sans-serif;font-size:16px;}#mermaid-sfrxgynezsux p{margin:0;}#mermaid-sfrxgynezsux .pieCircle{stroke:black;stroke-width:2px;opacity:0.7;}#mermaid-sfrxgynezsux .pieOuterCircle{stroke:black;stroke-width:2px;fill:none;}#mermaid-sfrxgynezsux .pieTitleText{text-anchor:middle;font-size:25px;fill:black;font-family:arial,sans-serif;}#mermaid-sfrxgynezsux .slice{font-family:arial,sans-serif;fill:#333;font-size:17px;}#mermaid-sfrxgynezsux .legend text{fill:black;font-family:arial,sans-serif;font-size:17px;}#mermaid-sfrxgynezsux :root{--mermaid-font-family:arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;/g&gt;&lt;g transform=&quot;translate(225,225)&quot;&gt;&lt;circle cx=&quot;0&quot; cy=&quot;0&quot; r=&quot;186&quot; class=&quot;pieOuterCircle&quot;&gt;&lt;/circle&gt;&lt;path d=&quot;M0,-185A185,185,0,1,1,-108.74,-149.668L0,0Z&quot; fill=&quot;#ECECFF&quot; class=&quot;pieCircle&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M-108.74,-149.668A185,185,0,0,1,-46.008,-179.188L0,0Z&quot; fill=&quot;#ffffde&quot; class=&quot;pieCircle&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M-46.008,-179.188A185,185,0,0,1,0,-185L0,0Z&quot; fill=&quot;hsl(80, 100%, 56.2745098039%)&quot; class=&quot;pieCircle&quot;&gt;&lt;/path&gt;&lt;text transform=&quot;translate(42.87610796952391,131.95909163595257)&quot; class=&quot;slice&quot; style=&quot;text-anchor: middle;&quot;&gt;90%&lt;/text&gt;&lt;text transform=&quot;translate(-59.07687670465376,-125.54475352966024)&quot; class=&quot;slice&quot; style=&quot;text-anchor: middle;&quot;&gt;6%&lt;/text&gt;&lt;text transform=&quot;translate(-17.389986157047144,-137.6559148073838)&quot; class=&quot;slice&quot; style=&quot;text-anchor: middle;&quot;&gt;4%&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;-200&quot; class=&quot;pieTitleText&quot;&gt;What Voldemort doesn&#39;t have?&lt;/text&gt;&lt;g class=&quot;legend&quot; transform=&quot;translate(216,-33)&quot;&gt;&lt;rect width=&quot;18&quot; height=&quot;18&quot; style=&quot;fill: rgb(181, 255, 32); stroke: rgb(181, 255, 32);&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;22&quot; y=&quot;14&quot;&gt;Friends&lt;/text&gt;&lt;/g&gt;&lt;g class=&quot;legend&quot; transform=&quot;translate(216,-11)&quot;&gt;&lt;rect width=&quot;18&quot; height=&quot;18&quot; style=&quot;fill: rgb(255, 255, 222); stroke: rgb(255, 255, 222);&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;22&quot; y=&quot;14&quot;&gt;Family&lt;/text&gt;&lt;/g&gt;&lt;g class=&quot;legend&quot; transform=&quot;translate(216,11)&quot;&gt;&lt;rect width=&quot;18&quot; height=&quot;18&quot; style=&quot;fill: rgb(236, 236, 255); stroke: rgb(236, 236, 255);&quot;&gt;&lt;/rect&gt;&lt;text x=&quot;22&quot; y=&quot;14&quot;&gt;Nose&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/body&gt;&lt;/html&gt;&lt;figcaption&gt;A simple pie chart generated by Mermaid&lt;/figcaption&gt;&lt;/figure&gt;&lt;details&gt;
&lt;summary&gt;&lt;span class=&quot;details-marker&quot;&gt;&lt;/span&gt;How to embed into Markdown&lt;/summary&gt;&lt;pre class=&quot;language-markdown&quot; data-language=&quot;Markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;mermaid&lt;/span&gt;
&lt;span class=&quot;token code-block language-mermaid language-mermaid language-mermaid&quot;&gt;pie

title What Voldemort doesn&#39;t have?
&quot;Friends&quot; : 2
&quot;Family&quot; : 3
&quot;Nose&quot; : 45&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/details&gt;
&lt;h3 id=&quot;mermaid-xy-chart&quot; tabindex=&quot;-1&quot;&gt;Mermaid XY Chart&lt;/h3&gt;
&lt;figure class=&quot;mermaid&quot;&gt;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;svg id=&quot;mermaid-utiljgzwbahj&quot; width=&quot;100%&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; style=&quot;max-width: 700px;&quot; viewBox=&quot;0 0 700 500&quot; role=&quot;graphics-document document&quot; aria-roledescription=&quot;xychart&quot;&gt;&lt;style&gt;#mermaid-utiljgzwbahj{font-family:arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-utiljgzwbahj .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-utiljgzwbahj .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-utiljgzwbahj .error-icon{fill:#552222;}#mermaid-utiljgzwbahj .error-text{fill:#552222;stroke:#552222;}#mermaid-utiljgzwbahj .edge-thickness-normal{stroke-width:1px;}#mermaid-utiljgzwbahj .edge-thickness-thick{stroke-width:3.5px;}#mermaid-utiljgzwbahj .edge-pattern-solid{stroke-dasharray:0;}#mermaid-utiljgzwbahj .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-utiljgzwbahj .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-utiljgzwbahj .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-utiljgzwbahj .marker{fill:#333333;stroke:#333333;}#mermaid-utiljgzwbahj .marker.cross{stroke:#333333;}#mermaid-utiljgzwbahj svg{font-family:arial,sans-serif;font-size:16px;}#mermaid-utiljgzwbahj p{margin:0;}#mermaid-utiljgzwbahj :root{--mermaid-font-family:arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;/g&gt;&lt;g class=&quot;main&quot;&gt;&lt;rect width=&quot;700&quot; height=&quot;500&quot; class=&quot;background&quot; fill=&quot;white&quot;&gt;&lt;/rect&gt;&lt;g class=&quot;chart-title&quot;&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;20&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(350, 22) rotate(0)&quot;&gt;The week in data&lt;/text&gt;&lt;/g&gt;&lt;g class=&quot;plot&quot;&gt;&lt;g class=&quot;bar-plot-0&quot;&gt;&lt;rect x=&quot;74.18437690734864&quot; y=&quot;396.12263977302695&quot; width=&quot;55.099999999999994&quot; height=&quot;41.87735831962442&quot; fill=&quot;#ECECFF&quot; stroke=&quot;#ECECFF&quot; stroke-width=&quot;0&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;169.06198075612383&quot; y=&quot;413.95282836230297&quot; width=&quot;55.099999999999994&quot; height=&quot;24.0471697303484&quot; fill=&quot;#ECECFF&quot; stroke=&quot;#ECECFF&quot; stroke-width=&quot;0&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;263.93958460489904&quot; y=&quot;429.99999809265137&quot; width=&quot;55.099999999999994&quot; height=&quot;8&quot; fill=&quot;#ECECFF&quot; stroke=&quot;#ECECFF&quot; stroke-width=&quot;0&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;358.8171884536743&quot; y=&quot;413.95282836230297&quot; width=&quot;55.099999999999994&quot; height=&quot;24.0471697303484&quot; fill=&quot;#ECECFF&quot; stroke=&quot;#ECECFF&quot; stroke-width=&quot;0&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;453.6947923024495&quot; y=&quot;406.82075292659255&quot; width=&quot;55.099999999999994&quot; height=&quot;31.17924516605882&quot; fill=&quot;#ECECFF&quot; stroke=&quot;#ECECFF&quot; stroke-width=&quot;0&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;548.5723961512248&quot; y=&quot;396.12263977302695&quot; width=&quot;55.099999999999994&quot; height=&quot;41.87735831962442&quot; fill=&quot;#ECECFF&quot; stroke=&quot;#ECECFF&quot; stroke-width=&quot;0&quot;&gt;&lt;/rect&gt;&lt;rect x=&quot;643.45&quot; y=&quot;399.6886774908821&quot; width=&quot;55.099999999999994&quot; height=&quot;38.31132060176924&quot; fill=&quot;#ECECFF&quot; stroke=&quot;#ECECFF&quot; stroke-width=&quot;0&quot;&gt;&lt;/rect&gt;&lt;/g&gt;&lt;g class=&quot;line-plot-1&quot;&gt;&lt;path d=&quot;M101.734,396.123L196.612,342.632L291.49,305.189L386.367,251.698L481.245,191.075L576.122,119.755L671,52&quot; fill=&quot;none&quot; stroke=&quot;#8493A6&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;bottom-axis&quot;&gt;&lt;g class=&quot;axis-line&quot;&gt;&lt;path d=&quot;M 72.73437690734863,438.99999809265137 L 700,438.99999809265137&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;label&quot;&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;text-before-edge&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(101.73437690734863, 449.99999809265137) rotate(0)&quot;&gt;Mon&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;text-before-edge&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(196.61198075612384, 449.99999809265137) rotate(0)&quot;&gt;Tue&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;text-before-edge&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(291.48958460489905, 449.99999809265137) rotate(0)&quot;&gt;Wed&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;text-before-edge&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(386.3671884536743, 449.99999809265137) rotate(0)&quot;&gt;Thu&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;text-before-edge&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(481.2447923024495, 449.99999809265137) rotate(0)&quot;&gt;Fri&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;text-before-edge&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(576.1223961512247, 449.99999809265137) rotate(0)&quot;&gt;Sat&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;text-before-edge&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(671, 449.99999809265137) rotate(0)&quot;&gt;Sun&lt;/text&gt;&lt;/g&gt;&lt;g class=&quot;ticks&quot;&gt;&lt;path d=&quot;M 101.73437690734863,439.99999809265137 L 101.73437690734863,444.99999809265137&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 196.61198075612384,439.99999809265137 L 196.61198075612384,444.99999809265137&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 291.48958460489905,439.99999809265137 L 291.48958460489905,444.99999809265137&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 386.3671884536743,439.99999809265137 L 386.3671884536743,444.99999809265137&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 481.2447923024495,439.99999809265137 L 481.2447923024495,444.99999809265137&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 576.1223961512247,439.99999809265137 L 576.1223961512247,444.99999809265137&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 671,439.99999809265137 L 671,444.99999809265137&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;title&quot;&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;16&quot; dominant-baseline=&quot;text-before-edge&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(386.3671884536743, 475.99999809265137) rotate(0)&quot;&gt;Days of the week&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;left-axis&quot;&gt;&lt;g class=&quot;axisl-line&quot;&gt;&lt;path d=&quot;M 71.73437690734863,44 L 71.73437690734863,437.99999809265137&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;label&quot;&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;end&quot; transform=&quot;translate(60.73437690734863, 75.17924516605882) rotate(0)&quot;&gt;220&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;end&quot; transform=&quot;translate(60.73437690734863, 110.83962234461083) rotate(0)&quot;&gt;200&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;end&quot; transform=&quot;translate(60.73437690734863, 146.49999952316284) rotate(0)&quot;&gt;180&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;end&quot; transform=&quot;translate(60.73437690734863, 182.16037670171485) rotate(0)&quot;&gt;160&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;end&quot; transform=&quot;translate(60.73437690734863, 217.82075388026686) rotate(0)&quot;&gt;140&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;end&quot; transform=&quot;translate(60.73437690734863, 253.48113105881887) rotate(0)&quot;&gt;120&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;end&quot; transform=&quot;translate(60.73437690734863, 289.14150823737094) rotate(0)&quot;&gt;100&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;end&quot; transform=&quot;translate(60.73437690734863, 324.8018854159229) rotate(0)&quot;&gt;80&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;end&quot; transform=&quot;translate(60.73437690734863, 360.46226259447496) rotate(0)&quot;&gt;60&lt;/text&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;14&quot; dominant-baseline=&quot;middle&quot; text-anchor=&quot;end&quot; transform=&quot;translate(60.73437690734863, 396.12263977302695) rotate(0)&quot;&gt;40&lt;/text&gt;&lt;/g&gt;&lt;g class=&quot;ticks&quot;&gt;&lt;path d=&quot;M 70.73437690734863,75.17924516605882 L 65.73437690734863,75.17924516605882&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 70.73437690734863,110.83962234461083 L 65.73437690734863,110.83962234461083&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 70.73437690734863,146.49999952316284 L 65.73437690734863,146.49999952316284&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 70.73437690734863,182.16037670171485 L 65.73437690734863,182.16037670171485&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 70.73437690734863,217.82075388026686 L 65.73437690734863,217.82075388026686&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 70.73437690734863,253.48113105881887 L 65.73437690734863,253.48113105881887&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 70.73437690734863,289.14150823737094 L 65.73437690734863,289.14150823737094&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 70.73437690734863,324.8018854159229 L 65.73437690734863,324.8018854159229&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 70.73437690734863,360.46226259447496 L 65.73437690734863,360.46226259447496&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M 70.73437690734863,396.12263977302695 L 65.73437690734863,396.12263977302695&quot; fill=&quot;none&quot; stroke=&quot;#131300&quot; stroke-width=&quot;2&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;title&quot;&gt;&lt;text x=&quot;0&quot; y=&quot;0&quot; fill=&quot;#131300&quot; font-size=&quot;16&quot; dominant-baseline=&quot;text-before-edge&quot; text-anchor=&quot;middle&quot; transform=&quot;translate(5, 240.99999904632568) rotate(270)&quot;&gt;Data&lt;/text&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;mermaid-tmp-group&quot;&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/body&gt;&lt;/html&gt;&lt;figcaption&gt;A simple xy chart generated by Mermaid. The bars represent data points for each day of the week. The line represents the cumulated data points from day to day. This visualization is clear as long as you have a single data series to visualize (like only bars, or only the line). When having more than one data series, I´m missing an automatically generated legend to explain the data within the chart. The explanation can only be given in addition to what Mermaid does, for example by putting your own description as some sort of legend into a &lt;code&gt;figcaption&lt;/code&gt;, which is not ideal in my view. A legend should really be part of any information graphic.&lt;/figcaption&gt;&lt;/figure&gt;&lt;details&gt;
&lt;summary&gt;&lt;span class=&quot;details-marker&quot;&gt;&lt;/span&gt;How to embed into Markdown&lt;/summary&gt;&lt;pre class=&quot;language-markdown&quot; data-language=&quot;Markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;mermaid&lt;/span&gt;
&lt;span class=&quot;token code-block language-mermaid language-mermaid language-mermaid&quot;&gt;xychart-beta

title &quot;The week in data&quot;
x-axis &quot;Days of the week&quot; [Mon, Tue, Wed, Thu, Fri, Sat, Sun]
y-axis &quot;Data&quot;
bar &quot;Per day&quot; [40, 30, 21, 30, 34, 40, 38]
line &quot;Cumulated over days&quot; [40, 70, 91, 121, 155, 195, 233]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/details&gt;
&lt;h3 id=&quot;mermaid-chart-appearance&quot; tabindex=&quot;-1&quot;&gt;Mermaid Chart Appearance&lt;/h3&gt;
&lt;p&gt;The appearance of each Mermaid chart can be configured through a frontmatter configuration within the chart definition, see &lt;a href=&quot;https://mermaid.js.org/config/configuration.html#frontmatter-config&quot;&gt;&lt;cite&gt;Frontmatter config&lt;/cite&gt;&lt;/a&gt; in the Mermaid documentation. In addition, a software developer can apply a custom styling to all diagrams by using a Mermaid config object and a theme CSS.&lt;/p&gt;
&lt;p&gt;The application of styles to the diagrams is inconsistent, not well documented, and I didn´t find it straight forward. For example, you can set the colors of the bars and lines for the xy chart in the Mermaid config object (which is JSON), but the background of the xy chart needs to be set via the theme CSS. At some point I refrained from doing my own styling and now I just use the default. Unfortunately that means I do not have a dark mode switch, because Mermaid is not supporting an automatic switch by reacting to system settings out of the box, and the font size of the data series legends is too tiny, but I have to accept that.&lt;/p&gt;
&lt;p&gt;In the end, the limitations of Mermaid´s general purpose charts made me watch out for other solutions and I came to ECharts.&lt;/p&gt;
&lt;h2 id=&quot;echarts&quot; tabindex=&quot;-1&quot;&gt;ECharts&lt;/h2&gt;
&lt;p&gt;ECharts is a free and capable charting software under the Apache License 2.0. It covers general purpose charts in various flavours and can be used for specific charts that go well beyond of what I would expect to get from a charting software. The charts are rendered on the client and can be interactive in the sense that users are able to filter out certain data series to shift focus on other data series to better analyze the data.&lt;/p&gt;
&lt;p&gt;I´m impressed by the &lt;a href=&quot;https://echarts.apache.org/examples/index.html&quot;&gt;ECharts demo page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Other than Mermaid, ECharts does not rely on text to describe a chart. Instead the chart has to be defined with JavaScript. It´s a steeper learning curve, but the concepts are well thought through, pretty flexible, and the resulting charts can be tailored to certain needs much better than with Mermaid. To directly jump in, let´s pick up some chart types we rendered previously with Mermaid and do the same with ECharts.&lt;/p&gt;
&lt;h3 id=&quot;echarts-pie-chart&quot; tabindex=&quot;-1&quot;&gt;ECharts Pie Chart&lt;/h3&gt;
&lt;figure id=&quot;echarts-dmgcekbleatf&quot; class=&quot;echarts&quot;&gt;
  &lt;div id=&quot;echarts-vlyoyfepipzm&quot; class=&quot;echarts-container&quot;&gt;
  &lt;/div&gt;
  &lt;script src=&quot;https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;module&quot;&gt;
  function debounce(func, delay) {
    let timeoutId;
    return function(...args) {
      const context = this;
      clearTimeout(timeoutId);
      timeoutId = setTimeout(() =&gt; func.apply(context, args), delay);
    }
  }
  function deepMerge(target, ...sources) {
    for (const source of sources) {
      for (const k in source) {
        let vs = source[k], vt = target[k]
        if (Object(vs) == vs &amp;&amp; Object(vt) === vt) {
          target[k] = deepMerge(vt, vs)
          continue
        }
        target[k] = source[k]
      }
    }
    return target
  }
  function applyDefaults(defaults, config) {
     const isDarkMode = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches;
     let adjustedConfig;
     if (isDarkMode &amp;&amp; defaults.darkModeConfig) {
       defaults = deepMerge({}, defaults, defaults.darkModeConfig);
       adjustedConfig = deepMerge({}, config, config.darkModeConfig);
     } else {
       defaults = deepMerge({}, defaults);
       adjustedConfig = deepMerge({}, config);
     }
     delete defaults.darkModeConfig;
     delete adjustedConfig.darkModeConfig;
     if (defaults.series &amp;&amp; adjustedConfig.series) {
       for (const def in defaults.series) {
         for (const conf of adjustedConfig.series) {
           conf[def] = deepMerge({}, defaults.series[def], conf[def]);
         }
       }
     }
     delete defaults.series;
     adjustedConfig = deepMerge(defaults, adjustedConfig);
     return adjustedConfig;
  }
  function getDefaults() {
    return {&quot;color&quot;:[&quot;#007affa0&quot;,&quot;#ffa500a0&quot;,&quot;#008000a0&quot;,&quot;#9370DBa0&quot;,&quot;#FFD700a0&quot;,&quot;#ff0000a0&quot;],&quot;renderOptions&quot;:{&quot;renderer&quot;:&quot;svg&quot;},&quot;aria&quot;:{&quot;show&quot;:true},&quot;toolbox&quot;:{&quot;feature&quot;:{&quot;restore&quot;:{},&quot;saveAsImage&quot;:{},&quot;dataView&quot;:{}}},&quot;title&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:18,&quot;color&quot;:&quot;#262626&quot;}},&quot;legend&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}},&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:18,&quot;color&quot;:&quot;#262626&quot;},&quot;grid&quot;:{&quot;left&quot;:0,&quot;containLabel&quot;:true},&quot;radar&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#262626&quot;}},&quot;splitLine&quot;:{&quot;show&quot;:false},&quot;splitArea&quot;:{&quot;show&quot;:false}},&quot;series&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}},&quot;markPoint&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}}}},&quot;darkModeConfig&quot;:{&quot;title&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;radar&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}}},&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;},&quot;legend&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;series&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;label&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;markLine&quot;:{&quot;lineStyle&quot;:{&quot;color&quot;:&quot;#888&quot;}},&quot;splitLine&quot;:{&quot;lineStyle&quot;:{&quot;color&quot;:&quot;#888&quot;}},&quot;markPoint&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}}}}}};
  }
  function adjustConfig() {
    const defaults = getDefaults();
    const container = document.querySelector(&quot;#echarts-vlyoyfepipzm&quot;); //might be used by chart config
    const containerWidth = ctx.clientWidth; //might be used by chart config
    const containerHeight = ctx.clientHeight; //might be used by chart config
    const isDarkMode = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches;  //might be used by chart config
    const config = {
  title: {
    text: &#39;What Voldemort doesn´t have&#39;,
  },
  figcaption: `A simple pie chart rendered by ECharts.
  You will probably notice it´s more interactive,
  more polished, and much closer to the styling of the hosting website than the corresponding Mermaid chart.`,
  tooltip: {
    trigger: &#39;item&#39;
  },
  series: [
    {
      type: &#39;pie&#39;,
      radius: containerWidth &gt; 600 ? &#39;70%&#39; : &#39;50%&#39;,
      data: [
        { value: 2, name: &#39;Friends&#39; },
        { value: 3, name: &#39;Family&#39; },
        { value: 45, name: &#39;Nose&#39; }
      ],
      label: {
        show: true,
        formatter: containerWidth &gt; 600 ? &#39;{b}: {c} ≈ {d}%&#39; : &#39;{b} {c}&#39;
        // {b} = data name
        // {c} = raw value
        // {d} = percentage
      }
  }
  ]
};
    return applyDefaults(defaults, config);
  }
  //create chart instance
  const ctx = document.querySelector(&quot;#echarts-vlyoyfepipzm&quot;);
  let config = adjustConfig()
  let chart;
  if (config.renderOptions?.renderer) {
    chart = echarts.init(ctx, null, { renderer: config.renderOptions.renderer });
  } else {
    chart = echarts.init(ctx);
  }
  function renderChart() {
    try {
      const config = adjustConfig();
      ctx.setAttribute(&#39;class&#39;,&#39;echarts-container&#39;);
      for(const data of config.series) {
        ctx.classList.add(data.type);
      }
      if (config.figcaption) {
        const figure = document.querySelector(&quot;#echarts-dmgcekbleatf&quot;);
        let figcaption = figure.querySelector(&#39;figcaption&#39;);
        if (!figcaption) {
          figcaption = document.createElement(&#39;figcaption&#39;);
          figure.appendChild(figcaption);
        }
        figcaption.innerHTML = config.figcaption;
      }
      const renderOptions = config?.renderOptions
      delete config?.figcaption;
      delete config?.renderOptions;
      chart.setOption(config, renderOptions);
    } catch (err) {
      console.error(err);
    }
  }
  renderChart();
  const debouncedRender = debounce(() =&gt; {
      chart.resize();
      renderChart();
    }, config.renderOptions?.debounceMillis || 16);
  const resizeObserver = new ResizeObserver(() =&gt; {
    requestAnimationFrame(() =&gt; {
      debouncedRender();
    });
  });
  resizeObserver.observe(ctx);
  const darkModeQuery = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;);
  darkModeQuery.addEventListener(&#39;change&#39;, debouncedRender);
  &lt;/script&gt;
&lt;/figure&gt;&lt;details&gt;
&lt;summary&gt;&lt;span class=&quot;details-marker&quot;&gt;&lt;/span&gt;How to embed into Markdown&lt;/summary&gt;&lt;pre class=&quot;language-markdown&quot; data-language=&quot;Markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;echarts&lt;/span&gt;
&lt;span class=&quot;token code-block language-echarts language-echarts language-echarts&quot;&gt;const config = {
  title: {
    text: &#39;What Voldemort doesn´t have&#39;,
  },
  tooltip: {
    trigger: &#39;item&#39;
  },
  series: [
    {
      type: &#39;pie&#39;,
      radius: containerWidth &gt; 600 ? &#39;70%&#39; : &#39;50%&#39;,
      data: [
        { value: 2, name: &#39;Friends&#39; },
        { value: 3, name: &#39;Family&#39; },
        { value: 45, name: &#39;Nose&#39; }
      ],
      label: {
        show: true,
        formatter: containerWidth &gt; 600 ? &#39;{b}: {c} ≈ {d}%&#39; : &#39;{b} {c}&#39;
        // {b} = data name
        // {c} = raw value
        // {d} = percentage
      }
  }
  ]
};&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/details&gt;
&lt;h3 id=&quot;echarts-xy-chart&quot; tabindex=&quot;-1&quot;&gt;ECharts XY Chart&lt;/h3&gt;
&lt;figure id=&quot;echarts-rnrqelupomxp&quot; class=&quot;echarts&quot;&gt;
  &lt;div id=&quot;echarts-sxlvavapdmxr&quot; class=&quot;echarts-container&quot;&gt;
  &lt;/div&gt;
  &lt;script src=&quot;https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;module&quot;&gt;
  function debounce(func, delay) {
    let timeoutId;
    return function(...args) {
      const context = this;
      clearTimeout(timeoutId);
      timeoutId = setTimeout(() =&gt; func.apply(context, args), delay);
    }
  }
  function deepMerge(target, ...sources) {
    for (const source of sources) {
      for (const k in source) {
        let vs = source[k], vt = target[k]
        if (Object(vs) == vs &amp;&amp; Object(vt) === vt) {
          target[k] = deepMerge(vt, vs)
          continue
        }
        target[k] = source[k]
      }
    }
    return target
  }
  function applyDefaults(defaults, config) {
     const isDarkMode = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches;
     let adjustedConfig;
     if (isDarkMode &amp;&amp; defaults.darkModeConfig) {
       defaults = deepMerge({}, defaults, defaults.darkModeConfig);
       adjustedConfig = deepMerge({}, config, config.darkModeConfig);
     } else {
       defaults = deepMerge({}, defaults);
       adjustedConfig = deepMerge({}, config);
     }
     delete defaults.darkModeConfig;
     delete adjustedConfig.darkModeConfig;
     if (defaults.series &amp;&amp; adjustedConfig.series) {
       for (const def in defaults.series) {
         for (const conf of adjustedConfig.series) {
           conf[def] = deepMerge({}, defaults.series[def], conf[def]);
         }
       }
     }
     delete defaults.series;
     adjustedConfig = deepMerge(defaults, adjustedConfig);
     return adjustedConfig;
  }
  function getDefaults() {
    return {&quot;color&quot;:[&quot;#007affa0&quot;,&quot;#ffa500a0&quot;,&quot;#008000a0&quot;,&quot;#9370DBa0&quot;,&quot;#FFD700a0&quot;,&quot;#ff0000a0&quot;],&quot;renderOptions&quot;:{&quot;renderer&quot;:&quot;svg&quot;},&quot;aria&quot;:{&quot;show&quot;:true},&quot;toolbox&quot;:{&quot;feature&quot;:{&quot;restore&quot;:{},&quot;saveAsImage&quot;:{},&quot;dataView&quot;:{}}},&quot;title&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:18,&quot;color&quot;:&quot;#262626&quot;}},&quot;legend&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}},&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:18,&quot;color&quot;:&quot;#262626&quot;},&quot;grid&quot;:{&quot;left&quot;:0,&quot;containLabel&quot;:true},&quot;radar&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#262626&quot;}},&quot;splitLine&quot;:{&quot;show&quot;:false},&quot;splitArea&quot;:{&quot;show&quot;:false}},&quot;series&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}},&quot;markPoint&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}}}},&quot;darkModeConfig&quot;:{&quot;title&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;radar&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}}},&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;},&quot;legend&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;series&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;label&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;markLine&quot;:{&quot;lineStyle&quot;:{&quot;color&quot;:&quot;#888&quot;}},&quot;splitLine&quot;:{&quot;lineStyle&quot;:{&quot;color&quot;:&quot;#888&quot;}},&quot;markPoint&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}}}}}};
  }
  function adjustConfig() {
    const defaults = getDefaults();
    const container = document.querySelector(&quot;#echarts-sxlvavapdmxr&quot;); //might be used by chart config
    const containerWidth = ctx.clientWidth; //might be used by chart config
    const containerHeight = ctx.clientHeight; //might be used by chart config
    const isDarkMode = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches;  //might be used by chart config
    const config = {
  title: {
    text: &#39;The week in data&#39;,
  },
  figcaption: `The ECharts version of the xy chart, which is named a combined line/bar chart in ECharts. It´s easy to have a proper legend for the visualized data, and again, the chart is interactive.`,
  xAxis: {
    type: &#39;category&#39;,
    data: [&#39;Mon&#39;, &#39;Tue&#39;, &#39;Wed&#39;, &#39;Thu&#39;, &#39;Fri&#39;, &#39;Sat&#39;, &#39;Sun&#39;],
    name: containerWidth &gt; 600 ? &#39;Days of the week&#39;: &#39;&#39;
  },
  yAxis: {
    type: &#39;value&#39;,
    name: containerWidth &gt; 600 ? &#39;Data&#39; : &#39;&#39;
  },
  legend: {
    data: [&#39;Per day&#39;, &#39;Cumulated over days&#39;]
  },
  series: [
      {
      name: &#39;Per day&#39;,
      data: [40, 30, 21, 30, 34, 40, 38],
      type: &#39;bar&#39;
    },
    {
      name: &#39;Cumulated over days&#39;,
      data: [40, 70, 91, 121, 155, 195, 233],
      type: &#39;line&#39;
    }
  ]
};
    return applyDefaults(defaults, config);
  }
  //create chart instance
  const ctx = document.querySelector(&quot;#echarts-sxlvavapdmxr&quot;);
  let config = adjustConfig()
  let chart;
  if (config.renderOptions?.renderer) {
    chart = echarts.init(ctx, null, { renderer: config.renderOptions.renderer });
  } else {
    chart = echarts.init(ctx);
  }
  function renderChart() {
    try {
      const config = adjustConfig();
      ctx.setAttribute(&#39;class&#39;,&#39;echarts-container&#39;);
      for(const data of config.series) {
        ctx.classList.add(data.type);
      }
      if (config.figcaption) {
        const figure = document.querySelector(&quot;#echarts-rnrqelupomxp&quot;);
        let figcaption = figure.querySelector(&#39;figcaption&#39;);
        if (!figcaption) {
          figcaption = document.createElement(&#39;figcaption&#39;);
          figure.appendChild(figcaption);
        }
        figcaption.innerHTML = config.figcaption;
      }
      const renderOptions = config?.renderOptions
      delete config?.figcaption;
      delete config?.renderOptions;
      chart.setOption(config, renderOptions);
    } catch (err) {
      console.error(err);
    }
  }
  renderChart();
  const debouncedRender = debounce(() =&gt; {
      chart.resize();
      renderChart();
    }, config.renderOptions?.debounceMillis || 16);
  const resizeObserver = new ResizeObserver(() =&gt; {
    requestAnimationFrame(() =&gt; {
      debouncedRender();
    });
  });
  resizeObserver.observe(ctx);
  const darkModeQuery = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;);
  darkModeQuery.addEventListener(&#39;change&#39;, debouncedRender);
  &lt;/script&gt;
&lt;/figure&gt;&lt;details&gt;
&lt;summary&gt;&lt;span class=&quot;details-marker&quot;&gt;&lt;/span&gt;How to embed into Markdown&lt;/summary&gt;&lt;pre class=&quot;language-markdown&quot; data-language=&quot;Markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;echarts&lt;/span&gt;
&lt;span class=&quot;token code-block language-echarts language-echarts language-echarts&quot;&gt;const config = {
  title: {
    text: &#39;The week in data&#39;,
  },
  xAxis: {
    type: &#39;category&#39;,
    data: [&#39;Mon&#39;, &#39;Tue&#39;, &#39;Wed&#39;, &#39;Thu&#39;, &#39;Fri&#39;, &#39;Sat&#39;, &#39;Sun&#39;],
    name: containerWidth &gt; 600 ? &#39;Days of the week&#39; : &#39;&#39;
  },
  yAxis: {
    type: &#39;value&#39;,
    name: containerWidth &gt; 600 ? &#39;Data&#39; : &#39;&#39;
  },
  legend: {
    data: [&#39;Per day&#39;, &#39;Cumulated over days&#39;]
  },
  series: [
      {
      name: &#39;Per day&#39;,
      data: [40, 30, 21, 30, 34, 40, 38],
      type: &#39;bar&#39;
    },
    {
      name: &#39;Cumulated over days&#39;,
      data: [40, 70, 91, 121, 155, 195, 233],
      type: &#39;line&#39;
    }
  ]
};&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/details&gt;
&lt;h3 id=&quot;echarts-radar-chart&quot; tabindex=&quot;-1&quot;&gt;ECharts Radar Chart&lt;/h3&gt;
&lt;figure id=&quot;echarts-nikmkxtoqeiy&quot; class=&quot;echarts&quot;&gt;
  &lt;div id=&quot;echarts-lvjgqtmodile&quot; class=&quot;echarts-container&quot;&gt;
  &lt;/div&gt;
  &lt;script src=&quot;https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;module&quot;&gt;
  function debounce(func, delay) {
    let timeoutId;
    return function(...args) {
      const context = this;
      clearTimeout(timeoutId);
      timeoutId = setTimeout(() =&gt; func.apply(context, args), delay);
    }
  }
  function deepMerge(target, ...sources) {
    for (const source of sources) {
      for (const k in source) {
        let vs = source[k], vt = target[k]
        if (Object(vs) == vs &amp;&amp; Object(vt) === vt) {
          target[k] = deepMerge(vt, vs)
          continue
        }
        target[k] = source[k]
      }
    }
    return target
  }
  function applyDefaults(defaults, config) {
     const isDarkMode = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches;
     let adjustedConfig;
     if (isDarkMode &amp;&amp; defaults.darkModeConfig) {
       defaults = deepMerge({}, defaults, defaults.darkModeConfig);
       adjustedConfig = deepMerge({}, config, config.darkModeConfig);
     } else {
       defaults = deepMerge({}, defaults);
       adjustedConfig = deepMerge({}, config);
     }
     delete defaults.darkModeConfig;
     delete adjustedConfig.darkModeConfig;
     if (defaults.series &amp;&amp; adjustedConfig.series) {
       for (const def in defaults.series) {
         for (const conf of adjustedConfig.series) {
           conf[def] = deepMerge({}, defaults.series[def], conf[def]);
         }
       }
     }
     delete defaults.series;
     adjustedConfig = deepMerge(defaults, adjustedConfig);
     return adjustedConfig;
  }
  function getDefaults() {
    return {&quot;color&quot;:[&quot;#007affa0&quot;,&quot;#ffa500a0&quot;,&quot;#008000a0&quot;,&quot;#9370DBa0&quot;,&quot;#FFD700a0&quot;,&quot;#ff0000a0&quot;],&quot;renderOptions&quot;:{&quot;renderer&quot;:&quot;svg&quot;},&quot;aria&quot;:{&quot;show&quot;:true},&quot;toolbox&quot;:{&quot;feature&quot;:{&quot;restore&quot;:{},&quot;saveAsImage&quot;:{},&quot;dataView&quot;:{}}},&quot;title&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:18,&quot;color&quot;:&quot;#262626&quot;}},&quot;legend&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}},&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:18,&quot;color&quot;:&quot;#262626&quot;},&quot;grid&quot;:{&quot;left&quot;:0,&quot;containLabel&quot;:true},&quot;radar&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#262626&quot;}},&quot;splitLine&quot;:{&quot;show&quot;:false},&quot;splitArea&quot;:{&quot;show&quot;:false}},&quot;series&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}},&quot;markPoint&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}}}},&quot;darkModeConfig&quot;:{&quot;title&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;radar&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}}},&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;},&quot;legend&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;series&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;label&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;markLine&quot;:{&quot;lineStyle&quot;:{&quot;color&quot;:&quot;#888&quot;}},&quot;splitLine&quot;:{&quot;lineStyle&quot;:{&quot;color&quot;:&quot;#888&quot;}},&quot;markPoint&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}}}}}};
  }
  function adjustConfig() {
    const defaults = getDefaults();
    const container = document.querySelector(&quot;#echarts-lvjgqtmodile&quot;); //might be used by chart config
    const containerWidth = ctx.clientWidth; //might be used by chart config
    const containerHeight = ctx.clientHeight; //might be used by chart config
    const isDarkMode = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches;  //might be used by chart config
    const config = {
  figcaption: &#39;The radar chart, generated by ECharts&#39;,
  legend: {
    data: [&#39;Alice&#39;, &#39;Bob&#39;]
  },
  radar: {
    splitLine: {
      show: false
    },
    splitArea: {
      show: false
    },
    indicator: [
      { name: &#39;Math&#39;, max: 100 },
      { name: &#39;Science&#39;, max: 100 },
      { name: &#39;English&#39;, max: 100 },
      { name: &#39;History&#39;, max: 100 },
      { name: &#39;Geography&#39;, max: 100 },
      { name: &#39;Art&#39;, max: 100 }
    ]
  },
  series: [
    {
      type: &#39;radar&#39;,
      data: [
        {
          value: [85, 90, 80, 70, 75, 90],
          name: &#39;Alice&#39;
        },
        {
          value: [70, 75, 85, 80, 90, 85],
          name: &#39;Bob&#39;
        }
      ]
    }
  ]
};
    return applyDefaults(defaults, config);
  }
  //create chart instance
  const ctx = document.querySelector(&quot;#echarts-lvjgqtmodile&quot;);
  let config = adjustConfig()
  let chart;
  if (config.renderOptions?.renderer) {
    chart = echarts.init(ctx, null, { renderer: config.renderOptions.renderer });
  } else {
    chart = echarts.init(ctx);
  }
  function renderChart() {
    try {
      const config = adjustConfig();
      ctx.setAttribute(&#39;class&#39;,&#39;echarts-container&#39;);
      for(const data of config.series) {
        ctx.classList.add(data.type);
      }
      if (config.figcaption) {
        const figure = document.querySelector(&quot;#echarts-nikmkxtoqeiy&quot;);
        let figcaption = figure.querySelector(&#39;figcaption&#39;);
        if (!figcaption) {
          figcaption = document.createElement(&#39;figcaption&#39;);
          figure.appendChild(figcaption);
        }
        figcaption.innerHTML = config.figcaption;
      }
      const renderOptions = config?.renderOptions
      delete config?.figcaption;
      delete config?.renderOptions;
      chart.setOption(config, renderOptions);
    } catch (err) {
      console.error(err);
    }
  }
  renderChart();
  const debouncedRender = debounce(() =&gt; {
      chart.resize();
      renderChart();
    }, config.renderOptions?.debounceMillis || 16);
  const resizeObserver = new ResizeObserver(() =&gt; {
    requestAnimationFrame(() =&gt; {
      debouncedRender();
    });
  });
  resizeObserver.observe(ctx);
  const darkModeQuery = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;);
  darkModeQuery.addEventListener(&#39;change&#39;, debouncedRender);
  &lt;/script&gt;
&lt;/figure&gt;&lt;details&gt;
&lt;summary&gt;&lt;span class=&quot;details-marker&quot;&gt;&lt;/span&gt;How to embed into Markdown&lt;/summary&gt;&lt;pre class=&quot;language-markdown&quot; data-language=&quot;Markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;echarts&lt;/span&gt;
&lt;span class=&quot;token code-block language-echarts language-echarts language-echarts&quot;&gt;const config = {
  legend: {
    data: [&#39;Alice&#39;, &#39;Bob&#39;]
  },
  radar: {
     splitLine: {
      show: false
    },
    splitArea: {
      show: false
    },
    indicator: [
      { name: &#39;Math&#39;, max: 100 },
      { name: &#39;Science&#39;, max: 100 },
      { name: &#39;English&#39;, max: 100 },
      { name: &#39;History&#39;, max: 100 },
      { name: &#39;Geography&#39;, max: 100 },
      { name: &#39;Art&#39;, max: 100 }
    ]
  },
  series: [
    {
      type: &#39;radar&#39;,
      data: [
        {
          value: [85, 90, 80, 70, 75, 90],
          name: &#39;Alice&#39;
        },
        {
          value: [70, 75, 85, 80, 90, 85],
          name: &#39;Bob&#39;
        }
      ]
    }
  ]
};&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/details&gt;
&lt;h3 id=&quot;echarts-sankey-chart&quot; tabindex=&quot;-1&quot;&gt;ECharts Sankey Chart&lt;/h3&gt;
&lt;figure id=&quot;echarts-ouvxkvbrgjnc&quot; class=&quot;echarts&quot;&gt;
  &lt;div id=&quot;echarts-tyczfchhgdgf&quot; class=&quot;echarts-container&quot;&gt;
  &lt;/div&gt;
  &lt;script src=&quot;https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;module&quot;&gt;
  function debounce(func, delay) {
    let timeoutId;
    return function(...args) {
      const context = this;
      clearTimeout(timeoutId);
      timeoutId = setTimeout(() =&gt; func.apply(context, args), delay);
    }
  }
  function deepMerge(target, ...sources) {
    for (const source of sources) {
      for (const k in source) {
        let vs = source[k], vt = target[k]
        if (Object(vs) == vs &amp;&amp; Object(vt) === vt) {
          target[k] = deepMerge(vt, vs)
          continue
        }
        target[k] = source[k]
      }
    }
    return target
  }
  function applyDefaults(defaults, config) {
     const isDarkMode = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches;
     let adjustedConfig;
     if (isDarkMode &amp;&amp; defaults.darkModeConfig) {
       defaults = deepMerge({}, defaults, defaults.darkModeConfig);
       adjustedConfig = deepMerge({}, config, config.darkModeConfig);
     } else {
       defaults = deepMerge({}, defaults);
       adjustedConfig = deepMerge({}, config);
     }
     delete defaults.darkModeConfig;
     delete adjustedConfig.darkModeConfig;
     if (defaults.series &amp;&amp; adjustedConfig.series) {
       for (const def in defaults.series) {
         for (const conf of adjustedConfig.series) {
           conf[def] = deepMerge({}, defaults.series[def], conf[def]);
         }
       }
     }
     delete defaults.series;
     adjustedConfig = deepMerge(defaults, adjustedConfig);
     return adjustedConfig;
  }
  function getDefaults() {
    return {&quot;color&quot;:[&quot;#007affa0&quot;,&quot;#ffa500a0&quot;,&quot;#008000a0&quot;,&quot;#9370DBa0&quot;,&quot;#FFD700a0&quot;,&quot;#ff0000a0&quot;],&quot;renderOptions&quot;:{&quot;renderer&quot;:&quot;svg&quot;},&quot;aria&quot;:{&quot;show&quot;:true},&quot;toolbox&quot;:{&quot;feature&quot;:{&quot;restore&quot;:{},&quot;saveAsImage&quot;:{},&quot;dataView&quot;:{}}},&quot;title&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:18,&quot;color&quot;:&quot;#262626&quot;}},&quot;legend&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}},&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:18,&quot;color&quot;:&quot;#262626&quot;},&quot;grid&quot;:{&quot;left&quot;:0,&quot;containLabel&quot;:true},&quot;radar&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#262626&quot;}},&quot;splitLine&quot;:{&quot;show&quot;:false},&quot;splitArea&quot;:{&quot;show&quot;:false}},&quot;series&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}},&quot;markPoint&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}}}},&quot;darkModeConfig&quot;:{&quot;title&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;radar&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}}},&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;},&quot;legend&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;series&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;label&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;markLine&quot;:{&quot;lineStyle&quot;:{&quot;color&quot;:&quot;#888&quot;}},&quot;splitLine&quot;:{&quot;lineStyle&quot;:{&quot;color&quot;:&quot;#888&quot;}},&quot;markPoint&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}}}}}};
  }
  function adjustConfig() {
    const defaults = getDefaults();
    const container = document.querySelector(&quot;#echarts-tyczfchhgdgf&quot;); //might be used by chart config
    const containerWidth = ctx.clientWidth; //might be used by chart config
    const containerHeight = ctx.clientHeight; //might be used by chart config
    const isDarkMode = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches;  //might be used by chart config
    const config = {
  figcaption: &#39;The Sankey chart, generated by ECharts&#39;,
  tooltip: {
    trigger: &quot;item&quot;,
    triggerOn: &quot;mousemove&quot;,
  },
  animation: true,
  series: [
    {
      type: &quot;sankey&quot;,
      bottom: &quot;10%&quot;,
      emphasis: {
        focus: &quot;adjacency&quot;,
      },
      data: [
        {
          name: &quot;Agricultural &#39;waste&#39;&quot;,
        },
        { name: &quot;Bio-conversion&quot; },
        { name: &quot;Biofuel imports&quot; },
        { name: &quot;Biomass imports&quot; },
        { name: &quot;Coal imports&quot; },
        { name: &quot;Coal reserves&quot; },
        { name: &quot;Coal&quot; },
        {
          name: &quot;District heating&quot;,
        },
        {
          name: &quot;Electricity grid&quot;,
        },
        { name: &quot;Gas imports&quot; },
        { name: &quot;Gas reserves&quot; },
        {
          name: &quot;Gas&quot;,
        },
        { name: &quot;Geothermal&quot; },
        { name: &quot;H2 conversion&quot; },
        { name: &quot;H2&quot; },
        { name: &quot;Hydro&quot; },
        { name: &quot;Liquid&quot; },
        { name: &quot;Marine algae&quot; },
        { name: &quot;NGas&quot; },
        { name: &quot;Nuclear&quot; },
        { name: &quot;Oil imports&quot; },
        { name: &quot;Oil reserves&quot; },
        { name: &quot;Oil&quot; },
        { name: &quot;Other waste&quot; },
        {
          name: &quot;Pumped heat&quot;,
        },
        { name: &quot;Solar PV&quot; },
        {
          name: &quot;Solar Thermal&quot;,
        },
        { name: &quot;Solar&quot; },
        {
          name: &quot;Thermal generation&quot;,
        },
        { name: &quot;Tidal&quot; },
        {
          name: &quot;UK land based bioenergy&quot;,
        },
        { name: &quot;Wave&quot; },
        { name: &quot;Wind&quot; },
      ],
      links: [
        {
          source: &quot;Agricultural &#39;waste&#39;&quot;,
          target: &quot;Bio-conversion&quot;,
          value: 124.729,
        },
        { source: &quot;Bio-conversion&quot;, target: &quot;Liquid&quot;, value: 0.597 },
        { source: &quot;Bio-conversion&quot;, target: &quot;Losses&quot;, value: 26.862 },
        { source: &quot;Bio-conversion&quot;, target: &quot;Solid&quot;, value: 280.322 },
        { source: &quot;Bio-conversion&quot;, target: &quot;Gas&quot;, value: 81.144 },
        { source: &quot;Biofuel imports&quot;, target: &quot;Liquid&quot;, value: 35 },
        { source: &quot;Biomass imports&quot;, target: &quot;Solid&quot;, value: 35 },
        { source: &quot;Coal imports&quot;, target: &quot;Coal&quot;, value: 11.606 },
        { source: &quot;Coal reserves&quot;, target: &quot;Coal&quot;, value: 63.965 },
        { source: &quot;Coal&quot;, target: &quot;Solid&quot;, value: 75.571 },
        { source: &quot;District heating&quot;, target: &quot;Industry&quot;, value: 10.639 },
        {
          source: &quot;District heating&quot;,
          target: &quot;Heating and cooling - commercial&quot;,
          value: 22.505,
        },
        {
          source: &quot;District heating&quot;,
          target: &quot;Heating and cooling - homes&quot;,
          value: 46.184,
        },
        {
          source: &quot;Electricity grid&quot;,
          target: &quot;Over generation / exports&quot;,
          value: 104.453,
        },
        {
          source: &quot;Electricity grid&quot;,
          target: &quot;Heating and cooling - homes&quot;,
          value: 113.726,
        },
        { source: &quot;Electricity grid&quot;, target: &quot;H2 conversion&quot;, value: 27.14 },
        { source: &quot;Electricity grid&quot;, target: &quot;Industry&quot;, value: 342.165 },
        { source: &quot;Electricity grid&quot;, target: &quot;Road transport&quot;, value: 37.797 },
        { source: &quot;Electricity grid&quot;, target: &quot;Agriculture&quot;, value: 4.412 },
        {
          source: &quot;Electricity grid&quot;,
          target: &quot;Heating and cooling - commercial&quot;,
          value: 40.858,
        },
        { source: &quot;Electricity grid&quot;, target: &quot;Losses&quot;, value: 56.691 },
        { source: &quot;Electricity grid&quot;, target: &quot;Rail transport&quot;, value: 7.863 },
        {
          source: &quot;Electricity grid&quot;,
          target: &quot;Lighting &amp; appliances - commercial&quot;,
          value: 90.008,
        },
        {
          source: &quot;Electricity grid&quot;,
          target: &quot;Lighting &amp; appliances - homes&quot;,
          value: 93.494,
        },
        { source: &quot;Gas imports&quot;, target: &quot;NGas&quot;, value: 40.719 },
        { source: &quot;Gas reserves&quot;, target: &quot;NGas&quot;, value: 82.233 },
        {
          source: &quot;Gas&quot;,
          target: &quot;Heating and cooling - commercial&quot;,
          value: 0.129,
        },
        { source: &quot;Gas&quot;, target: &quot;Losses&quot;, value: 1.401 },
        { source: &quot;Gas&quot;, target: &quot;Thermal generation&quot;, value: 151.891 },
        { source: &quot;Gas&quot;, target: &quot;Agriculture&quot;, value: 2.096 },
        { source: &quot;Gas&quot;, target: &quot;Industry&quot;, value: 48.58 },
        { source: &quot;Geothermal&quot;, target: &quot;Electricity grid&quot;, value: 7.013 },
        { source: &quot;H2 conversion&quot;, target: &quot;H2&quot;, value: 20.897 },
        { source: &quot;H2 conversion&quot;, target: &quot;Losses&quot;, value: 6.242 },
        { source: &quot;H2&quot;, target: &quot;Road transport&quot;, value: 20.897 },
        { source: &quot;Hydro&quot;, target: &quot;Electricity grid&quot;, value: 6.995 },
        { source: &quot;Liquid&quot;, target: &quot;Industry&quot;, value: 121.066 },
        { source: &quot;Liquid&quot;, target: &quot;International shipping&quot;, value: 128.69 },
        { source: &quot;Liquid&quot;, target: &quot;Road transport&quot;, value: 135.835 },
        { source: &quot;Liquid&quot;, target: &quot;Domestic aviation&quot;, value: 14.458 },
        { source: &quot;Liquid&quot;, target: &quot;International aviation&quot;, value: 206.267 },
        { source: &quot;Liquid&quot;, target: &quot;Agriculture&quot;, value: 3.64 },
        { source: &quot;Liquid&quot;, target: &quot;National navigation&quot;, value: 33.218 },
        { source: &quot;Liquid&quot;, target: &quot;Rail transport&quot;, value: 4.413 },
        { source: &quot;Marine algae&quot;, target: &quot;Bio-conversion&quot;, value: 4.375 },
        { source: &quot;NGas&quot;, target: &quot;Gas&quot;, value: 122.952 },
        { source: &quot;Nuclear&quot;, target: &quot;Thermal generation&quot;, value: 839.978 },
        { source: &quot;Oil imports&quot;, target: &quot;Oil&quot;, value: 504.287 },
        { source: &quot;Oil reserves&quot;, target: &quot;Oil&quot;, value: 107.703 },
        { source: &quot;Oil&quot;, target: &quot;Liquid&quot;, value: 611.99 },
        { source: &quot;Other waste&quot;, target: &quot;Solid&quot;, value: 56.587 },
        { source: &quot;Other waste&quot;, target: &quot;Bio-conversion&quot;, value: 77.81 },
        {
          source: &quot;Pumped heat&quot;,
          target: &quot;Heating and cooling - homes&quot;,
          value: 193.026,
        },
        {
          source: &quot;Pumped heat&quot;,
          target: &quot;Heating and cooling - commercial&quot;,
          value: 70.672,
        },
        { source: &quot;Solar PV&quot;, target: &quot;Electricity grid&quot;, value: 59.901 },
        {
          source: &quot;Solar Thermal&quot;,
          target: &quot;Heating and cooling - homes&quot;,
          value: 19.263,
        },
        { source: &quot;Solar&quot;, target: &quot;Solar Thermal&quot;, value: 19.263 },
        { source: &quot;Solar&quot;, target: &quot;Solar PV&quot;, value: 59.901 },
        { source: &quot;Solid&quot;, target: &quot;Agriculture&quot;, value: 0.882 },
        { source: &quot;Solid&quot;, target: &quot;Thermal generation&quot;, value: 400.12 },
        { source: &quot;Solid&quot;, target: &quot;Industry&quot;, value: 46.477 },
        {
          source: &quot;Thermal generation&quot;,
          target: &quot;Electricity grid&quot;,
          value: 525.531,
        },
        { source: &quot;Thermal generation&quot;, target: &quot;Losses&quot;, value: 787.129 },
        {
          source: &quot;Thermal generation&quot;,
          target: &quot;District heating&quot;,
          value: 79.329,
        },
        { source: &quot;Tidal&quot;, target: &quot;Electricity grid&quot;, value: 9.452 },
        {
          source: &quot;UK land based bioenergy&quot;,
          target: &quot;Bio-conversion&quot;,
          value: 182.01,
        },
        { source: &quot;Wave&quot;, target: &quot;Electricity grid&quot;, value: 19.013 },
        { source: &quot;Wind&quot;, target: &quot;Electricity grid&quot;, value: 289.366 },
      ],
      label: {
        position: &quot;top&quot;,
        fontSize: 10,
        lineHeight: 12,
        align: &#39;left&#39;
      },
      nodeGap: 20,
      lineStyle: {
        color: &quot;source&quot;,
        curveness: 0.5,
      },
    },
  ],
};
    return applyDefaults(defaults, config);
  }
  //create chart instance
  const ctx = document.querySelector(&quot;#echarts-tyczfchhgdgf&quot;);
  let config = adjustConfig()
  let chart;
  if (config.renderOptions?.renderer) {
    chart = echarts.init(ctx, null, { renderer: config.renderOptions.renderer });
  } else {
    chart = echarts.init(ctx);
  }
  function renderChart() {
    try {
      const config = adjustConfig();
      ctx.setAttribute(&#39;class&#39;,&#39;echarts-container&#39;);
      for(const data of config.series) {
        ctx.classList.add(data.type);
      }
      if (config.figcaption) {
        const figure = document.querySelector(&quot;#echarts-ouvxkvbrgjnc&quot;);
        let figcaption = figure.querySelector(&#39;figcaption&#39;);
        if (!figcaption) {
          figcaption = document.createElement(&#39;figcaption&#39;);
          figure.appendChild(figcaption);
        }
        figcaption.innerHTML = config.figcaption;
      }
      const renderOptions = config?.renderOptions
      delete config?.figcaption;
      delete config?.renderOptions;
      chart.setOption(config, renderOptions);
    } catch (err) {
      console.error(err);
    }
  }
  renderChart();
  const debouncedRender = debounce(() =&gt; {
      chart.resize();
      renderChart();
    }, config.renderOptions?.debounceMillis || 16);
  const resizeObserver = new ResizeObserver(() =&gt; {
    requestAnimationFrame(() =&gt; {
      debouncedRender();
    });
  });
  resizeObserver.observe(ctx);
  const darkModeQuery = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;);
  darkModeQuery.addEventListener(&#39;change&#39;, debouncedRender);
  &lt;/script&gt;
&lt;/figure&gt;&lt;details&gt;
&lt;summary&gt;&lt;span class=&quot;details-marker&quot;&gt;&lt;/span&gt;How to embed into Markdown&lt;/summary&gt;&lt;pre class=&quot;language-markdown&quot; data-language=&quot;Markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;charts&lt;/span&gt;
&lt;span class=&quot;token code-block language-charts language-charts language-charts&quot;&gt;const config = {
  tooltip: {
    trigger: &quot;item&quot;,
    triggerOn: &quot;mousemove&quot;,
  },
  animation: true,
  series: [
    {
      type: &quot;sankey&quot;,
      bottom: &quot;10%&quot;,
      emphasis: {
        focus: &quot;adjacency&quot;,
      },
      data: [
        {
          name: &quot;Agricultural &#39;waste&#39;&quot;,
        },
        { name: &quot;Bio-conversion&quot; },
        { name: &quot;Biofuel imports&quot; },
        { name: &quot;Biomass imports&quot; },
        { name: &quot;Coal imports&quot; },
        { name: &quot;Coal reserves&quot; },
        { name: &quot;Coal&quot; },
        {
          name: &quot;District heating&quot;,
        },
        {
          name: &quot;Electricity grid&quot;,
        },
        { name: &quot;Gas imports&quot; },
        { name: &quot;Gas reserves&quot; },
        {
          name: &quot;Gas&quot;,
        },
        { name: &quot;Geothermal&quot; },
        { name: &quot;H2 conversion&quot; },
        { name: &quot;H2&quot; },
        { name: &quot;Hydro&quot; },
        { name: &quot;Liquid&quot; },
        { name: &quot;Marine algae&quot; },
        { name: &quot;NGas&quot; },
        { name: &quot;Nuclear&quot; },
        { name: &quot;Oil imports&quot; },
        { name: &quot;Oil reserves&quot; },
        { name: &quot;Oil&quot; },
        { name: &quot;Other waste&quot; },
        {
          name: &quot;Pumped heat&quot;,
        },
        { name: &quot;Solar PV&quot; },
        {
          name: &quot;Solar Thermal&quot;,
        },
        { name: &quot;Solar&quot; },
        {
          name: &quot;Thermal generation&quot;,
        },
        { name: &quot;Tidal&quot; },
        {
          name: &quot;UK land based bioenergy&quot;,
        },
        { name: &quot;Wave&quot; },
        { name: &quot;Wind&quot; },
      ],
      links: [
        {
          source: &quot;Agricultural &#39;waste&#39;&quot;,
          target: &quot;Bio-conversion&quot;,
          value: 124.729,
        },
        { source: &quot;Bio-conversion&quot;, target: &quot;Liquid&quot;, value: 0.597 },
        { source: &quot;Bio-conversion&quot;, target: &quot;Losses&quot;, value: 26.862 },
        { source: &quot;Bio-conversion&quot;, target: &quot;Solid&quot;, value: 280.322 },
        { source: &quot;Bio-conversion&quot;, target: &quot;Gas&quot;, value: 81.144 },
        { source: &quot;Biofuel imports&quot;, target: &quot;Liquid&quot;, value: 35 },
        { source: &quot;Biomass imports&quot;, target: &quot;Solid&quot;, value: 35 },
        { source: &quot;Coal imports&quot;, target: &quot;Coal&quot;, value: 11.606 },
        { source: &quot;Coal reserves&quot;, target: &quot;Coal&quot;, value: 63.965 },
        { source: &quot;Coal&quot;, target: &quot;Solid&quot;, value: 75.571 },
        { source: &quot;District heating&quot;, target: &quot;Industry&quot;, value: 10.639 },
        {
          source: &quot;District heating&quot;,
          target: &quot;Heating and cooling - commercial&quot;,
          value: 22.505,
        },
        {
          source: &quot;District heating&quot;,
          target: &quot;Heating and cooling - homes&quot;,
          value: 46.184,
        },
        {
          source: &quot;Electricity grid&quot;,
          target: &quot;Over generation / exports&quot;,
          value: 104.453,
        },
        {
          source: &quot;Electricity grid&quot;,
          target: &quot;Heating and cooling - homes&quot;,
          value: 113.726,
        },
        { source: &quot;Electricity grid&quot;, target: &quot;H2 conversion&quot;, value: 27.14 },
        { source: &quot;Electricity grid&quot;, target: &quot;Industry&quot;, value: 342.165 },
        { source: &quot;Electricity grid&quot;, target: &quot;Road transport&quot;, value: 37.797 },
        { source: &quot;Electricity grid&quot;, target: &quot;Agriculture&quot;, value: 4.412 },
        {
          source: &quot;Electricity grid&quot;,
          target: &quot;Heating and cooling - commercial&quot;,
          value: 40.858,
        },
        { source: &quot;Electricity grid&quot;, target: &quot;Losses&quot;, value: 56.691 },
        { source: &quot;Electricity grid&quot;, target: &quot;Rail transport&quot;, value: 7.863 },
        {
          source: &quot;Electricity grid&quot;,
          target: &quot;Lighting &amp;amp; appliances - commercial&quot;,
          value: 90.008,
        },
        {
          source: &quot;Electricity grid&quot;,
          target: &quot;Lighting &amp;amp; appliances - homes&quot;,
          value: 93.494,
        },
        { source: &quot;Gas imports&quot;, target: &quot;NGas&quot;, value: 40.719 },
        { source: &quot;Gas reserves&quot;, target: &quot;NGas&quot;, value: 82.233 },
        {
          source: &quot;Gas&quot;,
          target: &quot;Heating and cooling - commercial&quot;,
          value: 0.129,
        },
        { source: &quot;Gas&quot;, target: &quot;Losses&quot;, value: 1.401 },
        { source: &quot;Gas&quot;, target: &quot;Thermal generation&quot;, value: 151.891 },
        { source: &quot;Gas&quot;, target: &quot;Agriculture&quot;, value: 2.096 },
        { source: &quot;Gas&quot;, target: &quot;Industry&quot;, value: 48.58 },
        { source: &quot;Geothermal&quot;, target: &quot;Electricity grid&quot;, value: 7.013 },
        { source: &quot;H2 conversion&quot;, target: &quot;H2&quot;, value: 20.897 },
        { source: &quot;H2 conversion&quot;, target: &quot;Losses&quot;, value: 6.242 },
        { source: &quot;H2&quot;, target: &quot;Road transport&quot;, value: 20.897 },
        { source: &quot;Hydro&quot;, target: &quot;Electricity grid&quot;, value: 6.995 },
        { source: &quot;Liquid&quot;, target: &quot;Industry&quot;, value: 121.066 },
        { source: &quot;Liquid&quot;, target: &quot;International shipping&quot;, value: 128.69 },
        { source: &quot;Liquid&quot;, target: &quot;Road transport&quot;, value: 135.835 },
        { source: &quot;Liquid&quot;, target: &quot;Domestic aviation&quot;, value: 14.458 },
        { source: &quot;Liquid&quot;, target: &quot;International aviation&quot;, value: 206.267 },
        { source: &quot;Liquid&quot;, target: &quot;Agriculture&quot;, value: 3.64 },
        { source: &quot;Liquid&quot;, target: &quot;National navigation&quot;, value: 33.218 },
        { source: &quot;Liquid&quot;, target: &quot;Rail transport&quot;, value: 4.413 },
        { source: &quot;Marine algae&quot;, target: &quot;Bio-conversion&quot;, value: 4.375 },
        { source: &quot;NGas&quot;, target: &quot;Gas&quot;, value: 122.952 },
        { source: &quot;Nuclear&quot;, target: &quot;Thermal generation&quot;, value: 839.978 },
        { source: &quot;Oil imports&quot;, target: &quot;Oil&quot;, value: 504.287 },
        { source: &quot;Oil reserves&quot;, target: &quot;Oil&quot;, value: 107.703 },
        { source: &quot;Oil&quot;, target: &quot;Liquid&quot;, value: 611.99 },
        { source: &quot;Other waste&quot;, target: &quot;Solid&quot;, value: 56.587 },
        { source: &quot;Other waste&quot;, target: &quot;Bio-conversion&quot;, value: 77.81 },
        {
          source: &quot;Pumped heat&quot;,
          target: &quot;Heating and cooling - homes&quot;,
          value: 193.026,
        },
        {
          source: &quot;Pumped heat&quot;,
          target: &quot;Heating and cooling - commercial&quot;,
          value: 70.672,
        },
        { source: &quot;Solar PV&quot;, target: &quot;Electricity grid&quot;, value: 59.901 },
        {
          source: &quot;Solar Thermal&quot;,
          target: &quot;Heating and cooling - homes&quot;,
          value: 19.263,
        },
        { source: &quot;Solar&quot;, target: &quot;Solar Thermal&quot;, value: 19.263 },
        { source: &quot;Solar&quot;, target: &quot;Solar PV&quot;, value: 59.901 },
        { source: &quot;Solid&quot;, target: &quot;Agriculture&quot;, value: 0.882 },
        { source: &quot;Solid&quot;, target: &quot;Thermal generation&quot;, value: 400.12 },
        { source: &quot;Solid&quot;, target: &quot;Industry&quot;, value: 46.477 },
        {
          source: &quot;Thermal generation&quot;,
          target: &quot;Electricity grid&quot;,
          value: 525.531,
        },
        { source: &quot;Thermal generation&quot;, target: &quot;Losses&quot;, value: 787.129 },
        {
          source: &quot;Thermal generation&quot;,
          target: &quot;District heating&quot;,
          value: 79.329,
        },
        { source: &quot;Tidal&quot;, target: &quot;Electricity grid&quot;, value: 9.452 },
        {
          source: &quot;UK land based bioenergy&quot;,
          target: &quot;Bio-conversion&quot;,
          value: 182.01,
        },
        { source: &quot;Wave&quot;, target: &quot;Electricity grid&quot;, value: 19.013 },
        { source: &quot;Wind&quot;, target: &quot;Electricity grid&quot;, value: 289.366 },
      ],
      label: {
        position: &quot;top&quot;,
        fontSize: 10,
        lineHeight: 12,
        align: &#39;left&#39;
      },
      nodeGap: 20,
      lineStyle: {
        color: &quot;source&quot;,
        curveness: 0.5,
      },
    },
  ],
};&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/details&gt;
&lt;h3 id=&quot;echarts-large-area-chart&quot; tabindex=&quot;-1&quot;&gt;ECharts Large Area Chart&lt;/h3&gt;
&lt;p&gt;The large area chart, with its level of interaction, is a case where ECharts shines. I add it here to highlight what ECharts can do.&lt;/p&gt;
&lt;figure id=&quot;echarts-villnsgaolhj&quot; class=&quot;echarts&quot;&gt;
  &lt;div id=&quot;echarts-wrzsemmrrpcf&quot; class=&quot;echarts-container&quot;&gt;
  &lt;/div&gt;
  &lt;script src=&quot;https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;module&quot;&gt;
  function debounce(func, delay) {
    let timeoutId;
    return function(...args) {
      const context = this;
      clearTimeout(timeoutId);
      timeoutId = setTimeout(() =&gt; func.apply(context, args), delay);
    }
  }
  function deepMerge(target, ...sources) {
    for (const source of sources) {
      for (const k in source) {
        let vs = source[k], vt = target[k]
        if (Object(vs) == vs &amp;&amp; Object(vt) === vt) {
          target[k] = deepMerge(vt, vs)
          continue
        }
        target[k] = source[k]
      }
    }
    return target
  }
  function applyDefaults(defaults, config) {
     const isDarkMode = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches;
     let adjustedConfig;
     if (isDarkMode &amp;&amp; defaults.darkModeConfig) {
       defaults = deepMerge({}, defaults, defaults.darkModeConfig);
       adjustedConfig = deepMerge({}, config, config.darkModeConfig);
     } else {
       defaults = deepMerge({}, defaults);
       adjustedConfig = deepMerge({}, config);
     }
     delete defaults.darkModeConfig;
     delete adjustedConfig.darkModeConfig;
     if (defaults.series &amp;&amp; adjustedConfig.series) {
       for (const def in defaults.series) {
         for (const conf of adjustedConfig.series) {
           conf[def] = deepMerge({}, defaults.series[def], conf[def]);
         }
       }
     }
     delete defaults.series;
     adjustedConfig = deepMerge(defaults, adjustedConfig);
     return adjustedConfig;
  }
  function getDefaults() {
    return {&quot;color&quot;:[&quot;#007affa0&quot;,&quot;#ffa500a0&quot;,&quot;#008000a0&quot;,&quot;#9370DBa0&quot;,&quot;#FFD700a0&quot;,&quot;#ff0000a0&quot;],&quot;renderOptions&quot;:{&quot;renderer&quot;:&quot;svg&quot;},&quot;aria&quot;:{&quot;show&quot;:true},&quot;toolbox&quot;:{&quot;feature&quot;:{&quot;restore&quot;:{},&quot;saveAsImage&quot;:{},&quot;dataView&quot;:{}}},&quot;title&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:18,&quot;color&quot;:&quot;#262626&quot;}},&quot;legend&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}},&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:18,&quot;color&quot;:&quot;#262626&quot;},&quot;grid&quot;:{&quot;left&quot;:0,&quot;containLabel&quot;:true},&quot;radar&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#262626&quot;}},&quot;splitLine&quot;:{&quot;show&quot;:false},&quot;splitArea&quot;:{&quot;show&quot;:false}},&quot;series&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}},&quot;markPoint&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}}}},&quot;darkModeConfig&quot;:{&quot;title&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;radar&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}}},&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;},&quot;legend&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;series&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;label&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;markLine&quot;:{&quot;lineStyle&quot;:{&quot;color&quot;:&quot;#888&quot;}},&quot;splitLine&quot;:{&quot;lineStyle&quot;:{&quot;color&quot;:&quot;#888&quot;}},&quot;markPoint&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}}}}}};
  }
  function adjustConfig() {
    const defaults = getDefaults();
    const container = document.querySelector(&quot;#echarts-wrzsemmrrpcf&quot;); //might be used by chart config
    const containerWidth = ctx.clientWidth; //might be used by chart config
    const containerHeight = ctx.clientHeight; //might be used by chart config
    const isDarkMode = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches;  //might be used by chart config
    let base = +new Date(1968, 9, 3);
let oneDay = 24 * 3600 * 1000;
let date = [];
let data = [Math.random() * 300];
for (let i = 1; i &lt; 20000; i++) {
  var now = new Date((base += oneDay));
  date.push([now.getFullYear(), now.getMonth() + 1, now.getDate()].join(&#39;/&#39;));
  data.push(Math.round((Math.random() - 0.5) * 20 + data[i - 1]));
}
const config = {
  figcaption: &#39;A large area chart, generated by ECharts&#39;,
  tooltip: {
    trigger: &#39;axis&#39;,
    position: function (pt) {
      return [pt[0], &#39;10%&#39;];
    }
  },
  title: {
    left: &#39;center&#39;,
    text: &#39;Large Area Chart&#39;
  },
  toolbox: {
    feature: {
      dataZoom: {
        yAxisIndex: &#39;none&#39;
      },
      restore: {},
      saveAsImage: {}
    }
  },
  xAxis: {
    type: &#39;category&#39;,
    boundaryGap: false,
    data: date
  },
  yAxis: {
    type: &#39;value&#39;,
    boundaryGap: [0, &#39;100%&#39;]
  },
  dataZoom: [
    {
      type: &#39;inside&#39;,
      start: 0,
      end: 10
    },
    {
      start: 0,
      end: 10
    }
  ],
  series: [
    {
      name: &#39;Fake Data&#39;,
      type: &#39;line&#39;,
      symbol: &#39;none&#39;,
      sampling: &#39;lttb&#39;,
      itemStyle: {
        color: &#39;rgb(255, 70, 131)&#39;
      },
      areaStyle: {
        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
          {
            offset: 0,
            color: &#39;rgb(255, 158, 68)&#39;
          },
          {
            offset: 1,
            color: &#39;rgb(255, 70, 131)&#39;
          }
        ])
      },
      data: data
    }
  ]
};
    return applyDefaults(defaults, config);
  }
  //create chart instance
  const ctx = document.querySelector(&quot;#echarts-wrzsemmrrpcf&quot;);
  let config = adjustConfig()
  let chart;
  if (config.renderOptions?.renderer) {
    chart = echarts.init(ctx, null, { renderer: config.renderOptions.renderer });
  } else {
    chart = echarts.init(ctx);
  }
  function renderChart() {
    try {
      const config = adjustConfig();
      ctx.setAttribute(&#39;class&#39;,&#39;echarts-container&#39;);
      for(const data of config.series) {
        ctx.classList.add(data.type);
      }
      if (config.figcaption) {
        const figure = document.querySelector(&quot;#echarts-villnsgaolhj&quot;);
        let figcaption = figure.querySelector(&#39;figcaption&#39;);
        if (!figcaption) {
          figcaption = document.createElement(&#39;figcaption&#39;);
          figure.appendChild(figcaption);
        }
        figcaption.innerHTML = config.figcaption;
      }
      const renderOptions = config?.renderOptions
      delete config?.figcaption;
      delete config?.renderOptions;
      chart.setOption(config, renderOptions);
    } catch (err) {
      console.error(err);
    }
  }
  renderChart();
  const debouncedRender = debounce(() =&gt; {
      chart.resize();
      renderChart();
    }, config.renderOptions?.debounceMillis || 16);
  const resizeObserver = new ResizeObserver(() =&gt; {
    requestAnimationFrame(() =&gt; {
      debouncedRender();
    });
  });
  resizeObserver.observe(ctx);
  const darkModeQuery = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;);
  darkModeQuery.addEventListener(&#39;change&#39;, debouncedRender);
  &lt;/script&gt;
&lt;/figure&gt;&lt;details&gt;
&lt;summary&gt;&lt;span class=&quot;details-marker&quot;&gt;&lt;/span&gt;How to embed into Markdown&lt;/summary&gt;&lt;pre class=&quot;language-markdown&quot; data-language=&quot;Markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;echarts&lt;/span&gt;
&lt;span class=&quot;token code-block language-echarts language-echarts language-echarts&quot;&gt;let base = +new Date(1968, 9, 3);
let oneDay = 24 * 3600 * 1000;
let date = [];
let data = [Math.random() * 300];
for (let i = 1; i &amp;lt; 20000; i++) {
  var now = new Date((base += oneDay));
  date.push([now.getFullYear(), now.getMonth() + 1, now.getDate()].join(&#39;/&#39;));
  data.push(Math.round((Math.random() - 0.5) * 20 + data[i - 1]));
}
const config = {
  tooltip: {
    trigger: &#39;axis&#39;,
    position: function (pt) {
      return [pt[0], &#39;10%&#39;];
    }
  },
  title: {
    left: &#39;center&#39;,
    text: &#39;Large Area Chart&#39;
  },
  toolbox: {
    feature: {
      dataZoom: {
        yAxisIndex: &#39;none&#39;
      },
      restore: {},
      saveAsImage: {}
    }
  },
  xAxis: {
    type: &#39;category&#39;,
    boundaryGap: false,
    data: date
  },
  yAxis: {
    type: &#39;value&#39;,
    boundaryGap: [0, &#39;100%&#39;]
  },
  dataZoom: [
    {
      type: &#39;inside&#39;,
      start: 0,
      end: 10
    },
    {
      start: 0,
      end: 10
    }
  ],
  series: [
    {
      name: &#39;Fake Data&#39;,
      type: &#39;line&#39;,
      symbol: &#39;none&#39;,
      sampling: &#39;lttb&#39;,
      itemStyle: {
        color: &#39;rgb(255, 70, 131)&#39;
      },
      areaStyle: {
        color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
          {
            offset: 0,
            color: &#39;rgb(255, 158, 68)&#39;
          },
          {
            offset: 1,
            color: &#39;rgb(255, 70, 131)&#39;
          }
        ])
      },
      data: data
    }
  ]
};&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/details&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Mermaid works well and allows to be quick with charts that fit into the software development domain. Though it is possible to influence the styling of the diagrams, it´s not straight-forward enough in my view so that I refrain from doing any custom styling and instead use the default Mermaid styles. I enjoy getting a proper flowchart from a few lines of text and being able to change the chart with ease. This is a good example for the power of text-to-chart when the chart syntax fits its context.&lt;/p&gt;
&lt;p&gt;ECharts is my go-to choice for general purpose charts. The concepts are powerful yet simple enough, the results are beautiful, interactive, and can be styled to a certain look, including a dark-mode switch. The ECharts approach of enhancing accessibility by the automatic generation of aria-labels from the data shown is a smart move and a big plus on the feature list. I´m impressed of what is doable with this charting library.&lt;/p&gt;

    <hr/><p><strong><a href="">Text-to-Chart</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-08-16-text-to-chart/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Mermaid online editor</title>
    <link href="https://ulfschneider.io/2025-08-16-mermaid-online-editor/" />
    <updated>2025-08-16T07:49:45Z</updated>
    <id>https://ulfschneider.io/2025-08-16-mermaid-online-editor/</id>
    <content type="html"> &lt;p&gt;&lt;a href=&quot;https://mermaid.live&quot;&gt;&lt;cite&gt;mermaid.live&lt;/cite&gt;&lt;/a&gt; is the online editor for Mermaid charts.&lt;/p&gt;

    <hr/><p><strong><a href="">Mermaid online editor</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-08-16-mermaid-online-editor/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>ECharts online editor</title>
    <link href="https://ulfschneider.io/2025-08-16-echarts-online-editor/" />
    <updated>2025-08-16T07:49:45Z</updated>
    <id>https://ulfschneider.io/2025-08-16-echarts-online-editor/</id>
    <content type="html"> &lt;p&gt;&lt;a href=&quot;https://echarts.apache.org/examples/editor.html&quot;&gt;&lt;cite&gt;echarts.apache.org/examples/editor.html&lt;/cite&gt;&lt;/a&gt; is the online editor for ECharts.&lt;/p&gt;

    <hr/><p><strong><a href="">ECharts online editor</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-08-16-echarts-online-editor/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>mermaid-cli-batch</title>
    <link href="https://ulfschneider.io/tools/mermaid-cli-batch/" />
    <updated>2025-08-10T15:11:38Z</updated>
    <id>https://ulfschneider.io/tools/mermaid-cli-batch/</id>
    <content type="html">&lt;p&gt;A command line tool to process multiple diagrams in one pass into SVG  images.&lt;/p&gt;
 &lt;p&gt;&lt;a href=&quot;https://www.npmjs.com/package/mermaid-cli-batch&quot;&gt;&lt;cite&gt;mermaid-cli-batch&lt;/cite&gt;&lt;/a&gt; is a npm/node based command-line tool to process &lt;a href=&quot;https://mermaid.js.org&quot;&gt;Mermaid&lt;/a&gt; diagram definition files in batches. For instance, to convert all &lt;code&gt;.mmd&lt;/code&gt; files to SVG images, run the command:&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;npx mermaid-cli-batch &lt;span class=&quot;token parameter variable&quot;&gt;--input&lt;/span&gt; *.mmd&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;List possible tool settings by issuing the command:&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;npx mermaid-cli-batch &lt;span class=&quot;token parameter variable&quot;&gt;-h&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;mermaid-cli-batch has a peer dependency to Playwright that you have to install by yourself prior of using the package:&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; i playwright
npx playwright &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; chromium&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This allows you to update playwright independently of mermaid-cli-batch!&lt;/p&gt;

    <hr/><p><strong><a href="">mermaid-cli-batch</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/tools/mermaid-cli-batch/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>markdown-it-responsive-echarts</title>
    <link href="https://ulfschneider.io/tools/markdown-it-responsive-echarts/" />
    <updated>2025-08-10T12:45:00Z</updated>
    <id>https://ulfschneider.io/tools/markdown-it-responsive-echarts/</id>
    <content type="html">&lt;p&gt;A plugin to render &lt;a href=&quot;https://echarts.apache.org/&quot;&gt;ECharts&lt;/a&gt; with markdown-it.&lt;/p&gt;
 &lt;p&gt;&lt;a href=&quot;https://www.npmjs.com/package/markdown-it-responsive-echarts&quot;&gt;&lt;cite&gt;markdown-it-responsive-echarts&lt;/cite&gt;&lt;/a&gt; enhances your Markdown capabilities by instantiating interactive and responsive &lt;a href=&quot;https://echarts.apache.org/&quot;&gt;ECharts&lt;/a&gt; that can react to light mode and dark mode.&lt;/p&gt;
&lt;p&gt;Install the plugin with&lt;/p&gt;
&lt;pre class=&quot;language-sh&quot; data-language=&quot;Shell&quot;&gt;&lt;code class=&quot;language-sh&quot;&gt;&lt;span class=&quot;token function&quot;&gt;npm&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;install&lt;/span&gt; markdown-it-responsive-echarts&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and add it to your markdown-it setup&lt;/p&gt;
&lt;pre class=&quot;language-js&quot; data-language=&quot;JavaScript&quot;&gt;&lt;code class=&quot;language-js&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; markdownItECharts &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;markdown-it-responsive-echarts&#39;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;import&lt;/span&gt; markdownIt &lt;span class=&quot;token keyword&quot;&gt;from&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&#39;markdown-it&#39;&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;const&lt;/span&gt; md &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;markdownIt&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
md&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;use&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;markdownItECharts&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;to render charts like the one below.&lt;/p&gt;
&lt;p&gt;Visit the &lt;a href=&quot;https://www.npmjs.com/package/markdown-it-responsive-echarts&quot;&gt;plugin page&lt;/a&gt; to learn about the configuration options.&lt;/p&gt;
&lt;figure id=&quot;echarts-rxhuomruxzci&quot; class=&quot;echarts&quot;&gt;
  &lt;div id=&quot;echarts-xhbpaccurvay&quot; class=&quot;echarts-container&quot;&gt;
  &lt;/div&gt;
  &lt;script src=&quot;https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;module&quot;&gt;
  function debounce(func, delay) {
    let timeoutId;
    return function(...args) {
      const context = this;
      clearTimeout(timeoutId);
      timeoutId = setTimeout(() =&gt; func.apply(context, args), delay);
    }
  }
  function deepMerge(target, ...sources) {
    for (const source of sources) {
      for (const k in source) {
        let vs = source[k], vt = target[k]
        if (Object(vs) == vs &amp;&amp; Object(vt) === vt) {
          target[k] = deepMerge(vt, vs)
          continue
        }
        target[k] = source[k]
      }
    }
    return target
  }
  function applyDefaults(defaults, config) {
     const isDarkMode = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches;
     let adjustedConfig;
     if (isDarkMode &amp;&amp; defaults.darkModeConfig) {
       defaults = deepMerge({}, defaults, defaults.darkModeConfig);
       adjustedConfig = deepMerge({}, config, config.darkModeConfig);
     } else {
       defaults = deepMerge({}, defaults);
       adjustedConfig = deepMerge({}, config);
     }
     delete defaults.darkModeConfig;
     delete adjustedConfig.darkModeConfig;
     if (defaults.series &amp;&amp; adjustedConfig.series) {
       for (const def in defaults.series) {
         for (const conf of adjustedConfig.series) {
           conf[def] = deepMerge({}, defaults.series[def], conf[def]);
         }
       }
     }
     delete defaults.series;
     adjustedConfig = deepMerge(defaults, adjustedConfig);
     return adjustedConfig;
  }
  function getDefaults() {
    return {&quot;color&quot;:[&quot;#007affa0&quot;,&quot;#ffa500a0&quot;,&quot;#008000a0&quot;,&quot;#9370DBa0&quot;,&quot;#FFD700a0&quot;,&quot;#ff0000a0&quot;],&quot;renderOptions&quot;:{&quot;renderer&quot;:&quot;svg&quot;},&quot;aria&quot;:{&quot;show&quot;:true},&quot;toolbox&quot;:{&quot;feature&quot;:{&quot;restore&quot;:{},&quot;saveAsImage&quot;:{},&quot;dataView&quot;:{}}},&quot;title&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:18,&quot;color&quot;:&quot;#262626&quot;}},&quot;legend&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}},&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:18,&quot;color&quot;:&quot;#262626&quot;},&quot;grid&quot;:{&quot;left&quot;:0,&quot;containLabel&quot;:true},&quot;radar&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#262626&quot;}},&quot;splitLine&quot;:{&quot;show&quot;:false},&quot;splitArea&quot;:{&quot;show&quot;:false}},&quot;series&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}},&quot;markPoint&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;fontFamily&quot;:&quot;&#39;iA Writer Quattro&#39;, system-ui, sans-serif&quot;,&quot;fontSize&quot;:16,&quot;color&quot;:&quot;#262626&quot;}}}},&quot;darkModeConfig&quot;:{&quot;title&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;radar&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}}},&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;},&quot;legend&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;series&quot;:{&quot;name&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;label&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}},&quot;markLine&quot;:{&quot;lineStyle&quot;:{&quot;color&quot;:&quot;#888&quot;}},&quot;splitLine&quot;:{&quot;lineStyle&quot;:{&quot;color&quot;:&quot;#888&quot;}},&quot;markPoint&quot;:{&quot;label&quot;:{&quot;textStyle&quot;:{&quot;color&quot;:&quot;#c3c3c3&quot;}}}}}};
  }
  function adjustConfig() {
    const defaults = getDefaults();
    const container = document.querySelector(&quot;#echarts-xhbpaccurvay&quot;); //might be used by chart config
    const containerWidth = ctx.clientWidth; //might be used by chart config
    const containerHeight = ctx.clientHeight; //might be used by chart config
    const isDarkMode = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;).matches;  //might be used by chart config
    var xAxisData = [];
var data1 = [];
var data2 = [];
for (var i = 0; i &lt; 100; i++) {
  xAxisData.push(&#39;A&#39; + i);
  data1.push((Math.sin(i / 5) * (i / 5 - 10) + i / 6) * 5);
  data2.push((Math.cos(i / 5) * (i / 5 - 10) + i / 6) * 5);
}
const config = {
  figcaption: &quot;An EChart rendered with markdown-it-interactive-echarts. The chart definition is taken from the ECharts example titled &lt;a href=&#39;https://echarts.apache.org/examples/en/editor.html?c=bar-animation-delay&#39;&gt;&lt;cite&gt;Bar Animation Delay&lt;/cite&gt;&lt;/a&gt;.&quot;,
  title: {
    text: &#39;Bar Animation Delay&#39;
  },
  legend: {
    data: [&#39;bar&#39;, &#39;bar2&#39;]
  },
  toolbox: {
    // y: &#39;bottom&#39;,
    feature: {
      magicType: {
        type: [&#39;stack&#39;]
      },
      dataView: {},
      saveAsImage: {
        pixelRatio: 2
      }
    }
  },
  tooltip: {},
  xAxis: {
    data: xAxisData,
    splitLine: {
      show: false
    }
  },
  yAxis: {},
  series: [
    {
      name: &#39;bar&#39;,
      type: &#39;bar&#39;,
      data: data1,
      emphasis: {
        focus: &#39;series&#39;
      },
      animationDelay: function (idx) {
        return idx * 10;
      }
    },
    {
      name: &#39;bar2&#39;,
      type: &#39;bar&#39;,
      data: data2,
      emphasis: {
        focus: &#39;series&#39;
      },
      animationDelay: function (idx) {
        return idx * 10 + 100;
      }
    }
  ],
  animationEasing: &#39;elasticOut&#39;,
  animationDelayUpdate: function (idx) {
    return idx * 5;
  }
};
    return applyDefaults(defaults, config);
  }
  //create chart instance
  const ctx = document.querySelector(&quot;#echarts-xhbpaccurvay&quot;);
  let config = adjustConfig()
  let chart;
  if (config.renderOptions?.renderer) {
    chart = echarts.init(ctx, null, { renderer: config.renderOptions.renderer });
  } else {
    chart = echarts.init(ctx);
  }
  function renderChart() {
    try {
      const config = adjustConfig();
      ctx.setAttribute(&#39;class&#39;,&#39;echarts-container&#39;);
      for(const data of config.series) {
        ctx.classList.add(data.type);
      }
      if (config.figcaption) {
        const figure = document.querySelector(&quot;#echarts-rxhuomruxzci&quot;);
        let figcaption = figure.querySelector(&#39;figcaption&#39;);
        if (!figcaption) {
          figcaption = document.createElement(&#39;figcaption&#39;);
          figure.appendChild(figcaption);
        }
        figcaption.innerHTML = config.figcaption;
      }
      const renderOptions = config?.renderOptions
      delete config?.figcaption;
      delete config?.renderOptions;
      chart.setOption(config, renderOptions);
    } catch (err) {
      console.error(err);
    }
  }
  renderChart();
  const debouncedRender = debounce(() =&gt; {
      chart.resize();
      renderChart();
    }, config.renderOptions?.debounceMillis || 16);
  const resizeObserver = new ResizeObserver(() =&gt; {
    requestAnimationFrame(() =&gt; {
      debouncedRender();
    });
  });
  resizeObserver.observe(ctx);
  const darkModeQuery = window.matchMedia(&#39;(prefers-color-scheme: dark)&#39;);
  darkModeQuery.addEventListener(&#39;change&#39;, debouncedRender);
  &lt;/script&gt;
&lt;/figure&gt;&lt;p&gt;The above chart is generated by putting the below chart definition into a fenced code block inside of your Markdown text. The fenced code block must be introduced by the identifier &lt;code&gt;echarts&lt;/code&gt;.&lt;/p&gt;
&lt;blockquote class=&quot;markdown-alert markdown-alert-note&quot;&gt;&lt;p class=&quot;markdown-alert-title&quot; style=&quot;display: flex; align-items: center;&quot;&gt;&lt;svg class=&quot;octicon octicon-info&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&amp;nbsp;Note&lt;/p&gt;&lt;p&gt;It is mandatory to create an object named &lt;code&gt;config&lt;/code&gt; that holds your chart definition. You cannot choose a different name!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;language-markdown&quot; data-language=&quot;Markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;echarts&lt;/span&gt;
&lt;span class=&quot;token code-block language-echarts language-echarts language-echarts&quot;&gt;var xAxisData = [];
var data1 = [];
var data2 = [];
for (var i = 0; i &amp;lt; 100; i++) {
  xAxisData.push(&#39;A&#39; + i);
  data1.push((Math.sin(i / 5) * (i / 5 - 10) + i / 6) * 5);
  data2.push((Math.cos(i / 5) * (i / 5 - 10) + i / 6) * 5);
}
//your chart definition must be stored in an object named config
//you cannot choose a different name
const config = {
  figcaption: &quot;An EChart rendered with markdown-it-interactive-echarts. The chart definition is taken from the ECharts example titled &amp;lt;a href=&#39;https://echarts.apache.org/examples/en/editor.html?c=bar-animation-delay&#39;&gt;&amp;lt;cite&gt;Bar Animation Delay&amp;lt;/cite&gt;&amp;lt;/a&gt;.&quot;,
  title: {
    text: &#39;Bar Animation Delay&#39;
  },
  legend: {
    data: [&#39;bar&#39;, &#39;bar2&#39;]
  },
  toolbox: {
    // y: &#39;bottom&#39;,
    feature: {
      magicType: {
        type: [&#39;stack&#39;]
      },
      dataView: {},
      saveAsImage: {
        pixelRatio: 2
      }
    }
  },
  tooltip: {},
  xAxis: {
    data: xAxisData,
    splitLine: {
      show: false
    }
  },
  yAxis: {},
  series: [
    {
      name: &#39;bar&#39;,
      type: &#39;bar&#39;,
      data: data1,
      emphasis: {
        focus: &#39;series&#39;
      },
      animationDelay: function (idx) {
        return idx * 10;
      }
    },
    {
      name: &#39;bar2&#39;,
      type: &#39;bar&#39;,
      data: data2,
      emphasis: {
        focus: &#39;series&#39;
      },
      animationDelay: function (idx) {
        return idx * 10 + 100;
      }
    }
  ],
  animationEasing: &#39;elasticOut&#39;,
  animationDelayUpdate: function (idx) {
    return idx * 5;
  }
};&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

    <hr/><p><strong><a href="">markdown-it-responsive-echarts</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/tools/markdown-it-responsive-echarts/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Tosbot</title>
    <link href="https://ulfschneider.io/2025-07-28-tosbot/" />
    <updated>2025-08-16T07:49:35Z</updated>
    <id>https://ulfschneider.io/2025-07-28-tosbot/</id>
    <content type="html">&lt;p&gt;Wie Emil Deutsch lernte.&lt;/p&gt;
 &lt;blockquote class=&quot;markdown-alert markdown-alert-note&quot;&gt;&lt;p class=&quot;markdown-alert-title&quot; style=&quot;display: flex; align-items: center;&quot;&gt;&lt;svg class=&quot;octicon octicon-info&quot; fill=&quot;currentColor&quot; viewBox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&amp;nbsp;Note&lt;/p&gt;&lt;p&gt;The following text is in German language, because it relies heavily on the sound and the understanding of the German language.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Während Emil, als er noch ganz jung war, die Deutsche Sprache erlernte, hat er die Worte zunächst auf seine eigene Art benutzt. Diese wunderbaren Wortschöpfungen habe ich damals notiert, und heute, Jahre später, sind sie mir wieder in die Hände gefallen.&lt;/p&gt;
&lt;p&gt;Ein Tosbot war ein Toastbrot, ein Sinebot ein Rosinenbrötchen, ein Meeresriegel ein Fischstäbchen, und Pustewaff war Hustensaft. Viele dieser ersten Worte hatten verständlicherweise mit Essen zu tun.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Abtöpfen = Abschöpfen&lt;/li&gt;
&lt;li&gt;Aschemädchen = Aschenputtel&lt;/li&gt;
&lt;li&gt;Aussaedata = Ausserirdischer&lt;/li&gt;
&lt;li&gt;Bate = Banane&lt;/li&gt;
&lt;li&gt;Beihuckter Hitter = Verrückter Ritter&lt;/li&gt;
&lt;li&gt;Beta = Tablette&lt;/li&gt;
&lt;li&gt;Bissen = Bisschen&lt;/li&gt;
&lt;li&gt;Bock = Bockwurst&lt;/li&gt;
&lt;li&gt;Botsen = Brötchen&lt;/li&gt;
&lt;li&gt;Bruder Japuk = Bruder Jakob&lt;/li&gt;
&lt;li&gt;Butuliert = Tätowiert&lt;/li&gt;
&lt;li&gt;Das butzelt = Das brutzelt&lt;/li&gt;
&lt;li&gt;Dinsaur = Dinosaurier&lt;/li&gt;
&lt;li&gt;Duß = Tschüss&lt;/li&gt;
&lt;li&gt;Emiauch = Emil auch&lt;/li&gt;
&lt;li&gt;Erbsefrau = Prinzessin auf der Erbse&lt;/li&gt;
&lt;li&gt;Fak = Quark&lt;/li&gt;
&lt;li&gt;Fanz = Schwanz&lt;/li&gt;
&lt;li&gt;Fetzelat = Fenchelsalat&lt;/li&gt;
&lt;li&gt;Fodo Oma = Frodo Oma&lt;/li&gt;
&lt;li&gt;Fuchelich = Fürchterlich&lt;/li&gt;
&lt;li&gt;Gepi = Spaghetti&lt;/li&gt;
&lt;li&gt;Habedi = Habe ich dich&lt;/li&gt;
&lt;li&gt;Handluh = Handschuh&lt;/li&gt;
&lt;li&gt;Haussas = Hausschuhe&lt;/li&gt;
&lt;li&gt;Hefe = Helfen&lt;/li&gt;
&lt;li&gt;Hersieren = Rasieren&lt;/li&gt;
&lt;li&gt;Hobbelbot = Roggenbrot&lt;/li&gt;
&lt;li&gt;Hubkesine = Hubschrauber&lt;/li&gt;
&lt;li&gt;Kaba Kaus = Cowboy Klaus&lt;/li&gt;
&lt;li&gt;Kabakau = Kakao&lt;/li&gt;
&lt;li&gt;Kabbel Kabbe = Krabbel Krabbe&lt;/li&gt;
&lt;li&gt;Käfersoff = Hefezopf&lt;/li&gt;
&lt;li&gt;Kafta = Kaspar&lt;/li&gt;
&lt;li&gt;Kak = Kalt&lt;/li&gt;
&lt;li&gt;Kanastik = Gymnastik&lt;/li&gt;
&lt;li&gt;Kappekau = Kakao&lt;/li&gt;
&lt;li&gt;Kavenzlender = Adventskalender&lt;/li&gt;
&lt;li&gt;Kefezopf = Hefezopf&lt;/li&gt;
&lt;li&gt;Keinbem = Kein Problem&lt;/li&gt;
&lt;li&gt;Kenne = Körner&lt;/li&gt;
&lt;li&gt;Konnfexe = Cornflakes&lt;/li&gt;
&lt;li&gt;Kotlik = Kotelett&lt;/li&gt;
&lt;li&gt;Kummel = Krümmel&lt;/li&gt;
&lt;li&gt;Lake = Schokolade&lt;/li&gt;
&lt;li&gt;Lamsas = Langsam&lt;/li&gt;
&lt;li&gt;Lat = Salat&lt;/li&gt;
&lt;li&gt;Lätta = Latz&lt;/li&gt;
&lt;li&gt;Lol = Schnuller&lt;/li&gt;
&lt;li&gt;Ludel = Nudeln&lt;/li&gt;
&lt;li&gt;Lufbon = Luftballon&lt;/li&gt;
&lt;li&gt;Luh = Schuh&lt;/li&gt;
&lt;li&gt;Lukelaus = Nikolaus&lt;/li&gt;
&lt;li&gt;Mani, Lami = Salami&lt;/li&gt;
&lt;li&gt;Marinekäfer = Marienkäfer&lt;/li&gt;
&lt;li&gt;Mate = Tomate&lt;/li&gt;
&lt;li&gt;Maukenbad = Mountainbike&lt;/li&gt;
&lt;li&gt;Meeresriegel = Fischstäbchen&lt;/li&gt;
&lt;li&gt;Meni Oma = Pelmeni Oma&lt;/li&gt;
&lt;li&gt;Morgig = Guten Morgen&lt;/li&gt;
&lt;li&gt;Muksen = Muskeln&lt;/li&gt;
&lt;li&gt;Muna = Müde&lt;/li&gt;
&lt;li&gt;Muze = Mütze&lt;/li&gt;
&lt;li&gt;Nasetupfer = Nasenstupser&lt;/li&gt;
&lt;li&gt;Nogges = Neues&lt;/li&gt;
&lt;li&gt;Nusskaka = Nussknacker&lt;/li&gt;
&lt;li&gt;Oga = Olga (Emil´s Tagesmutter)&lt;/li&gt;
&lt;li&gt;Opposon = Operation&lt;/li&gt;
&lt;li&gt;Pakaka = Paprika&lt;/li&gt;
&lt;li&gt;Patz = Spatz&lt;/li&gt;
&lt;li&gt;Pielen = Spielen&lt;/li&gt;
&lt;li&gt;Pietzlat = Spielplatz&lt;/li&gt;
&lt;li&gt;Pipi Strumpfhose = Pipi Langstrumpf&lt;/li&gt;
&lt;li&gt;Pohelli mit Sene und Fanz = Forelle mit Zähnen und Schwanz&lt;/li&gt;
&lt;li&gt;Pott = Sport&lt;/li&gt;
&lt;li&gt;Pustewaff = Hustensaft&lt;/li&gt;
&lt;li&gt;Putz = Pups&lt;/li&gt;
&lt;li&gt;Sabatee = Salbeitee&lt;/li&gt;
&lt;li&gt;Sapp un mude = Schlapp und müde&lt;/li&gt;
&lt;li&gt;Sappefilik = Zappelfillip&lt;/li&gt;
&lt;li&gt;Sassa = Wasser&lt;/li&gt;
&lt;li&gt;Sinebots = Rosinenbrötchen&lt;/li&gt;
&lt;li&gt;Tam = Tannenzapfen&lt;/li&gt;
&lt;li&gt;Tampfer = Stampfer&lt;/li&gt;
&lt;li&gt;Tassekesine = Straßenkehrmaschine&lt;/li&gt;
&lt;li&gt;Tosbot = Toastbrot&lt;/li&gt;
&lt;li&gt;Waff = Saft&lt;/li&gt;
&lt;li&gt;Wickemode = Wickelkommode&lt;/li&gt;
&lt;li&gt;Woff = Wurst&lt;/li&gt;
&lt;/ul&gt;

    <hr/><p><strong><a href="">Tosbot</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-07-28-tosbot/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>The four-legged octopus</title>
    <link href="https://ulfschneider.io/2025-07-22-four-legged-octopus/" />
    <updated>2025-07-22T08:58:33Z</updated>
    <id>https://ulfschneider.io/2025-07-22-four-legged-octopus/</id>
    <content type="html"> &lt;figure&gt;&lt;img src=&quot;https://ulfschneider.io/img/ux8O6G0K9l-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/ux8O6G0K9l-200.webp 200w, https://ulfschneider.io/img/ux8O6G0K9l-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;&lt;/figure&gt;
    <hr/><p><strong><a href="">The four-legged octopus</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-07-22-four-legged-octopus/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>A friendly introduction to SVG</title>
    <link href="https://ulfschneider.io/2025-07-22-friendly-instruction-to-svg/" />
    <updated>2025-08-15T05:38:40Z</updated>
    <id>https://ulfschneider.io/2025-07-22-friendly-instruction-to-svg/</id>
    <content type="html"> &lt;p&gt;&lt;a href=&quot;https://www.joshwcomeau.com/svg/friendly-introduction-to-svg/?from=newsletter&quot;&gt;&lt;cite&gt;A friendly introduction to SVG&lt;/cite&gt;&lt;/a&gt; by Josh Comeau.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This post is intended to be completely beginner-friendly, no previous SVG experience required (though it does assume that you’re familiar with the basics of HTML/CSS/JS).&lt;/p&gt;
&lt;footer&gt;Josh Comeau&lt;/footer&gt;
&lt;/blockquote&gt;

    <hr/><p><strong><a href="">A friendly introduction to SVG</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-07-22-friendly-instruction-to-svg/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Safety Notice – Fairlight carbon forks with Ortlieb QLS Fork Pack Mounting System</title>
    <link href="https://ulfschneider.io/2025-07-19-fairlight-ortlieb-safety-notice/" />
    <updated>2025-07-19T19:42:20Z</updated>
    <id>https://ulfschneider.io/2025-07-19-fairlight-ortlieb-safety-notice/</id>
    <content type="html">&lt;p&gt;Fit parts G and H!&lt;/p&gt;
 &lt;p&gt;Fairlight recently issued a &lt;a href=&quot;https://fairlightcycles.com/product-safety-notices/?v=5f02f0889301&quot;&gt;safety notice&lt;/a&gt; regarding the Ortlieb QLS Fork Pack Mounting System attached to Fairlight Secan carbon forks. The Ortlieb system can damage your Fairlight carbon fork if you do not mount it by following  the &lt;a href=&quot;https://downloads.ortlieb.com/instructions/fork_pack.pdf&quot;&gt;Ortlieb installation instruction&lt;/a&gt;. Specifically, &lt;strong&gt;&lt;mark&gt;you have to fit the parts G and H!&lt;/mark&gt;&lt;/strong&gt; If parts G and H are not fitted, the fork rack system will sit against the body of the fork (rather than against the attachment bosses) and &lt;mark&gt;potentially affect the fork’s integrity, which can lead to compromised rider safety&lt;/mark&gt;. If you have ever fitted the QLS Fork Pack Mounting System without parts G and H, &lt;mark&gt;stop riding the affected fork and contact Fairlight immediately&lt;/mark&gt;.&lt;/p&gt;

    <hr/><p><strong><a href="">Safety Notice – Fairlight carbon forks with Ortlieb QLS Fork Pack Mounting System</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-07-19-fairlight-ortlieb-safety-notice/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>markdown-it-mermaid-server</title>
    <link href="https://ulfschneider.io/tools/markdown-it-mermaid-server/" />
    <updated>2025-08-09T07:16:07Z</updated>
    <id>https://ulfschneider.io/tools/markdown-it-mermaid-server/</id>
    <content type="html">&lt;p&gt;A &lt;a href=&quot;https://www.npmjs.com/package/markdown-it-mermaid-server&quot;&gt;markdown-it plugin&lt;/a&gt; to render &lt;a href=&quot;https://mermaid.js.org&quot;&gt;Mermaid&lt;/a&gt; charts on the server.&lt;/p&gt;
 &lt;p&gt;&lt;a href=&quot;https://www.npmjs.com/package/markdown-it-mermaid-server&quot;&gt;&lt;cite&gt;markdown-it-mermaid-server&lt;/cite&gt;&lt;/a&gt; is a markdown-it plugin that generates Mermaid diagrams on the server and references them as inline SVG images in the Markdown-rendered HTML documents. The approach eliminates the need for Mermaid code on the browser client.&lt;/p&gt;
&lt;p&gt;Enclose the Mermaid chart definition in a fenced code block, introduced by the &lt;code&gt;mermaid&lt;/code&gt; keyword, like this:&lt;/p&gt;
&lt;pre class=&quot;language-markdown&quot; data-language=&quot;Markdown&quot;&gt;&lt;code class=&quot;language-markdown&quot;&gt;&lt;span class=&quot;token code&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;span class=&quot;token code-language&quot;&gt;mermaid&lt;/span&gt;
&lt;span class=&quot;token code-block language-mermaid language-mermaid language-mermaid&quot;&gt;flowchart LR
A([&quot;Start&quot;]) --&gt; B{&quot;Decision&quot;}
B --&gt; C[&quot;Option A&quot;] &amp;amp; D[&quot;Option B&quot;]&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;```&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and get the resulting chart:&lt;/p&gt;
&lt;figure class=&quot;mermaid&quot;&gt;&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;svg id=&quot;mermaid-vyzeopieanlz&quot; width=&quot;100%&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; class=&quot;flowchart&quot; style=&quot;max-width: 431.4174499511719px;&quot; viewBox=&quot;0.0000019073486328125 0 431.4174499511719 174&quot; role=&quot;graphics-document document&quot; aria-roledescription=&quot;flowchart-v2&quot;&gt;&lt;style&gt;#mermaid-vyzeopieanlz{font-family:arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-vyzeopieanlz .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-vyzeopieanlz .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-vyzeopieanlz .error-icon{fill:#552222;}#mermaid-vyzeopieanlz .error-text{fill:#552222;stroke:#552222;}#mermaid-vyzeopieanlz .edge-thickness-normal{stroke-width:1px;}#mermaid-vyzeopieanlz .edge-thickness-thick{stroke-width:3.5px;}#mermaid-vyzeopieanlz .edge-pattern-solid{stroke-dasharray:0;}#mermaid-vyzeopieanlz .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-vyzeopieanlz .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-vyzeopieanlz .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-vyzeopieanlz .marker{fill:#333333;stroke:#333333;}#mermaid-vyzeopieanlz .marker.cross{stroke:#333333;}#mermaid-vyzeopieanlz svg{font-family:arial,sans-serif;font-size:16px;}#mermaid-vyzeopieanlz p{margin:0;}#mermaid-vyzeopieanlz .label{font-family:arial,sans-serif;color:#333;}#mermaid-vyzeopieanlz .cluster-label text{fill:#333;}#mermaid-vyzeopieanlz .cluster-label span{color:#333;}#mermaid-vyzeopieanlz .cluster-label span p{background-color:transparent;}#mermaid-vyzeopieanlz .label text,#mermaid-vyzeopieanlz span{fill:#333;color:#333;}#mermaid-vyzeopieanlz .node rect,#mermaid-vyzeopieanlz .node circle,#mermaid-vyzeopieanlz .node ellipse,#mermaid-vyzeopieanlz .node polygon,#mermaid-vyzeopieanlz .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-vyzeopieanlz .rough-node .label text,#mermaid-vyzeopieanlz .node .label text,#mermaid-vyzeopieanlz .image-shape .label,#mermaid-vyzeopieanlz .icon-shape .label{text-anchor:middle;}#mermaid-vyzeopieanlz .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-vyzeopieanlz .rough-node .label,#mermaid-vyzeopieanlz .node .label,#mermaid-vyzeopieanlz .image-shape .label,#mermaid-vyzeopieanlz .icon-shape .label{text-align:center;}#mermaid-vyzeopieanlz .node.clickable{cursor:pointer;}#mermaid-vyzeopieanlz .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-vyzeopieanlz .arrowheadPath{fill:#333333;}#mermaid-vyzeopieanlz .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-vyzeopieanlz .flowchart-link{stroke:#333333;fill:none;}#mermaid-vyzeopieanlz .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-vyzeopieanlz .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-vyzeopieanlz .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-vyzeopieanlz .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-vyzeopieanlz .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-vyzeopieanlz .cluster text{fill:#333;}#mermaid-vyzeopieanlz .cluster span{color:#333;}#mermaid-vyzeopieanlz div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-vyzeopieanlz .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-vyzeopieanlz rect.text{fill:none;stroke-width:0;}#mermaid-vyzeopieanlz .icon-shape,#mermaid-vyzeopieanlz .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-vyzeopieanlz .icon-shape p,#mermaid-vyzeopieanlz .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-vyzeopieanlz .icon-shape .label rect,#mermaid-vyzeopieanlz .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-vyzeopieanlz .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-vyzeopieanlz .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-vyzeopieanlz :root{--mermaid-font-family:arial,sans-serif;}&lt;/style&gt;&lt;g&gt;&lt;marker id=&quot;mermaid-vyzeopieanlz_flowchart-v2-pointEnd&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;5&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;8&quot; markerHeight=&quot;8&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 0 0 L 10 5 L 0 10 z&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 1; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;mermaid-vyzeopieanlz_flowchart-v2-pointStart&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;4.5&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;8&quot; markerHeight=&quot;8&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 0 5 L 10 10 L 10 0 z&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 1; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;mermaid-vyzeopieanlz_flowchart-v2-circleEnd&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;11&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11&quot; markerHeight=&quot;11&quot; orient=&quot;auto&quot;&gt;&lt;circle cx=&quot;5&quot; cy=&quot;5&quot; r=&quot;5&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 1; stroke-dasharray: 1, 0;&quot;&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id=&quot;mermaid-vyzeopieanlz_flowchart-v2-circleStart&quot; class=&quot;marker flowchart-v2&quot; viewBox=&quot;0 0 10 10&quot; refX=&quot;-1&quot; refY=&quot;5&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11&quot; markerHeight=&quot;11&quot; orient=&quot;auto&quot;&gt;&lt;circle cx=&quot;5&quot; cy=&quot;5&quot; r=&quot;5&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 1; stroke-dasharray: 1, 0;&quot;&gt;&lt;/circle&gt;&lt;/marker&gt;&lt;marker id=&quot;mermaid-vyzeopieanlz_flowchart-v2-crossEnd&quot; class=&quot;marker cross flowchart-v2&quot; viewBox=&quot;0 0 11 11&quot; refX=&quot;12&quot; refY=&quot;5.2&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11&quot; markerHeight=&quot;11&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 1,1 l 9,9 M 10,1 l -9,9&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 2; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;marker id=&quot;mermaid-vyzeopieanlz_flowchart-v2-crossStart&quot; class=&quot;marker cross flowchart-v2&quot; viewBox=&quot;0 0 11 11&quot; refX=&quot;-1&quot; refY=&quot;5.2&quot; markerUnits=&quot;userSpaceOnUse&quot; markerWidth=&quot;11&quot; markerHeight=&quot;11&quot; orient=&quot;auto&quot;&gt;&lt;path d=&quot;M 1,1 l 9,9 M 10,1 l -9,9&quot; class=&quot;arrowMarkerPath&quot; style=&quot;stroke-width: 2; stroke-dasharray: 1, 0;&quot;&gt;&lt;/path&gt;&lt;/marker&gt;&lt;g class=&quot;root&quot;&gt;&lt;g class=&quot;clusters&quot;&gt;&lt;/g&gt;&lt;g class=&quot;edgePaths&quot;&gt;&lt;path d=&quot;M72.324,87.5L76.407,87.417C80.49,87.333,88.657,87.167,96.24,87.083C103.824,87,110.824,87,114.324,87L117.824,87&quot; id=&quot;L_A_B_0&quot; class=&quot;edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link&quot; style=&quot;;&quot; data-edge=&quot;true&quot; data-et=&quot;edge&quot; data-id=&quot;L_A_B_0&quot; data-points=&quot;W3sieCI6NzIuMzIzNzEyNDMxODI2NzksInkiOjg3LjV9LHsieCI6OTYuODIzNzExMzk1MjYzNjcsInkiOjg3fSx7IngiOjEyMS44MjM3MTEzOTUyNjM2NywieSI6ODd9XQ==&quot; marker-end=&quot;url(#mermaid-vyzeopieanlz_flowchart-v2-pointEnd)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M220.95,64.001L228.95,59.168C236.95,54.334,252.949,44.667,264.452,39.834C275.954,35,282.959,35,286.462,35L289.964,35&quot; id=&quot;L_B_C_0&quot; class=&quot;edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link&quot; style=&quot;;&quot; data-edge=&quot;true&quot; data-et=&quot;edge&quot; data-id=&quot;L_B_C_0&quot; data-points=&quot;W3sieCI6MjIwLjk1MDA2OTQ3NTg0MzEyLCJ5Ijo2NC4wMDEzNTgwODA1Nzk0NX0seyJ4IjoyNjguOTQ4NzExMzk1MjYzNywieSI6MzV9LHsieCI6MjkzLjk2NDMzNjM5NTI2MzcsInkiOjM1fV0=&quot; marker-end=&quot;url(#mermaid-vyzeopieanlz_flowchart-v2-pointEnd)&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M220.95,109.999L228.95,114.832C236.95,119.666,252.949,129.333,264.449,134.166C275.949,139,282.949,139,286.449,139L289.949,139&quot; id=&quot;L_B_D_0&quot; class=&quot;edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link&quot; style=&quot;;&quot; data-edge=&quot;true&quot; data-et=&quot;edge&quot; data-id=&quot;L_B_D_0&quot; data-points=&quot;W3sieCI6MjIwLjk1MDA2OTQ3NTg0MzEyLCJ5IjoxMDkuOTk4NjQxOTE5NDIwNTV9LHsieCI6MjY4Ljk0ODcxMTM5NTI2MzcsInkiOjEzOX0seyJ4IjoyOTMuOTQ4NzExMzk1MjYzNywieSI6MTM5fV0=&quot; marker-end=&quot;url(#mermaid-vyzeopieanlz_flowchart-v2-pointEnd)&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;edgeLabels&quot;&gt;&lt;g class=&quot;edgeLabel&quot;&gt;&lt;g class=&quot;label&quot; data-id=&quot;L_A_B_0&quot; transform=&quot;translate(0, 0)&quot;&gt;&lt;foreignObject width=&quot;0&quot; height=&quot;0&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; class=&quot;labelBkg&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;edgeLabel&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;edgeLabel&quot;&gt;&lt;g class=&quot;label&quot; data-id=&quot;L_B_C_0&quot; transform=&quot;translate(0, 0)&quot;&gt;&lt;foreignObject width=&quot;0&quot; height=&quot;0&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; class=&quot;labelBkg&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;edgeLabel&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;edgeLabel&quot;&gt;&lt;g class=&quot;label&quot; data-id=&quot;L_B_D_0&quot; transform=&quot;translate(0, 0)&quot;&gt;&lt;foreignObject width=&quot;0&quot; height=&quot;0&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; class=&quot;labelBkg&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;edgeLabel&quot;&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;nodes&quot;&gt;&lt;g class=&quot;node default&quot; id=&quot;flowchart-A-0&quot; transform=&quot;translate(39.911855697631836, 87)&quot;&gt;&lt;g class=&quot;basic label-container outer-path&quot;&gt;&lt;path d=&quot;M-12.421875 -19.5 C-6.587955540724722 -19.5, -0.7540360814494438 -19.5, 12.421875 -19.5 C12.421875 -19.5, 12.421874999999998 -19.5, 12.421874999999998 -19.5 C12.76989617903164 -19.488839638170585, 13.117917358063284 -19.47767927634117, 13.6712442896239 -19.45993515863156 C14.034824167769864 -19.424861045055597, 14.398404045915827 -19.389786931479634, 14.915479652847864 -19.3399052695533 C15.24441552817502 -19.286725468166217, 15.573351403502176 -19.233545666779133, 16.14946825967676 -19.140403561325776 C16.53802044126303 -19.051719061418652, 16.926572622849303 -18.963034561511527, 17.36813938623539 -18.862249829261074 C17.68510209088374 -18.76817696229263, 18.002064795532085 -18.674104095324193, 18.566485251460602 -18.50658706670804 C18.898318729084174 -18.384469279507524, 19.230152206707743 -18.26235149230701, 19.739581595147794 -18.074876768247425 C20.052418744337672 -17.936393042285378, 20.365255893527554 -17.79790931632333, 20.88260791279238 -17.568892924097174 C21.132697053001646 -17.43842157983974, 21.38278619321091 -17.307950235582304, 21.990867264076783 -16.990714730406097 C22.24089667592694 -16.839145431606614, 22.490926087777098 -16.68757613280713, 23.059805573605697 -16.342718045390892 C23.434632918653797 -16.081254715499586, 23.8094602637019 -15.819791385608283, 24.085030344578712 -15.627565626425154 C24.47377102524637 -15.317555278416663, 24.86251170591403 -15.007544930408171, 25.06232870850187 -14.848196188198123 C25.30633781937896 -14.626593569826838, 25.550346930256055 -14.404990951455552, 25.987684736767985 -14.007812326905688 C26.27778829153392 -13.70825658866506, 26.567891846299855 -13.408700850424434, 26.857295942968648 -13.10986736009568 C27.037392711951732 -12.898315447451687, 27.21748948093482 -12.686763534807694, 27.667588908126582 -12.158051136245305 C27.827064756262253 -11.944368028292152, 27.986540604397923 -11.730684920339, 28.415233964640635 -11.156274872382312 C28.670047736482722 -10.764812491754432, 28.92486150832481 -10.373350111126552, 29.097158878604247 -10.108655082055241 C29.30318074790479 -9.742842391135664, 29.509202617205336 -9.377029700216086, 29.7105614742735 -9.019496659696287 C29.822214321014812 -8.787647134449742, 29.933867167756123 -8.555797609203195, 30.25292114880834 -7.893275190886684 C30.351941012617033 -7.6486942128603825, 30.450960876425725 -7.404113234834082, 30.722009229970325 -6.734618561215508 C30.832347395175443 -6.402297587616911, 30.94268556038056 -6.069976614018313, 31.11589813421488 -5.548287939305138 C31.184489777316898 -5.2867182763509755, 31.253081420418916 -5.025148613396813, 31.43296928754556 -4.339158212148133 C31.510033938646117 -3.9434475163665477, 31.587098589746677 -3.5477368205849626, 31.671919776581777 -3.1121979531509023 C31.718726838135744 -2.749171626838105, 31.76553389968971 -2.3861453005253077, 31.831767702509367 -1.872449005199798 C31.85336367814481 -1.5360742527200115, 31.874959653780248 -1.199699500240225, 31.911856215913414 -0.6250057626472757 C31.911856215913414 -0.14601668107933846, 31.911856215913414 0.3329724004885988, 31.911856215913414 0.625005762647271 C31.895575704928195 0.8785878626339723, 31.87929519394298 1.1321699626206736, 31.831767702509367 1.8724490051997846 C31.79152988049142 2.184525606914276, 31.751292058473474 2.496602208628767, 31.671919776581777 3.1121979531508885 C31.613792356365327 3.4106699707277497, 31.555664936148876 3.7091419883046113, 31.43296928754556 4.339158212148129 C31.349421128254406 4.657763553526596, 31.265872968963247 4.976368894905063, 31.115898134214884 5.548287939305125 C31.006705635774516 5.877158347145507, 30.89751313733415 6.206028754985888, 30.72200922997033 6.734618561215495 C30.609619040582416 7.012224501920135, 30.4972288511945 7.2898304426247735, 30.252921148808344 7.893275190886679 C30.043301822133444 8.328554207862195, 29.833682495458543 8.763833224837711, 29.710561474273504 9.019496659696284 C29.533169198872177 9.334474607587056, 29.35577692347085 9.649452555477831, 29.09715887860425 10.108655082055236 C28.876062246889145 10.448318881128225, 28.65496561517404 10.787982680201214, 28.41523396464064 11.156274872382301 C28.150775253487126 11.510625452643795, 27.886316542333606 11.864976032905291, 27.667588908126582 12.158051136245302 C27.452725438264583 12.410441994022992, 27.23786196840258 12.662832851800683, 26.85729594296866 13.10986736009567 C26.536477945306643 13.441138282329161, 26.215659947644625 13.772409204562653, 25.98768473676799 14.007812326905684 C25.768277447623653 14.207072221707815, 25.548870158479318 14.406332116509946, 25.062328708501887 14.848196188198111 C24.70793175654663 15.130818326483466, 24.35353480459137 15.41344046476882, 24.085030344578715 15.627565626425152 C23.866229911028185 15.78019133715189, 23.647429477477658 15.932817047878629, 23.059805573605708 16.34271804539089 C22.845466576852083 16.472651604818694, 22.631127580098454 16.602585164246502, 21.990867264076787 16.990714730406093 C21.65938637841015 17.163648096134736, 21.32790549274352 17.33658146186338, 20.882607912792388 17.56889292409717 C20.461445900133747 17.755328853773932, 20.040283887475105 17.941764783450697, 19.739581595147804 18.07487676824742 C19.400485406030867 18.199667300413264, 19.06138921691393 18.324457832579107, 18.566485251460616 18.506587066708033 C18.282127768241434 18.590982875104597, 17.997770285022252 18.675378683501165, 17.368139386235413 18.86224982926107 C16.99686530130307 18.94699071635705, 16.62559121637073 19.031731603453032, 16.149468259676766 19.140403561325773 C15.671119378785585 19.217739298737285, 15.192770497894404 19.295075036148795, 14.915479652847878 19.3399052695533 C14.454644250820937 19.38436150655118, 13.993808848793995 19.42881774354906, 13.6712442896239 19.45993515863156 C13.396367979922715 19.468749906869398, 13.12149167022153 19.477564655107233, 12.421875000000004 19.5 C12.421875000000002 19.5, 12.421875000000002 19.5, 12.421875 19.5 C3.9672567381803976 19.5, -4.487361523639205 19.5, -12.421874999999996 19.5 C-12.903529067431634 19.484554291540235, -13.385183134863272 19.469108583080473, -13.671244289623893 19.45993515863156 C-13.982404315309683 19.429917925178334, -14.293564340995474 19.399900691725108, -14.915479652847871 19.3399052695533 C-15.318773718206995 19.274703812658224, -15.722067783566118 19.209502355763146, -16.14946825967676 19.140403561325773 C-16.41412005614142 19.079998515797083, -16.678771852606083 19.019593470268394, -17.368139386235388 18.862249829261074 C-17.80350144126247 18.733036656591096, -18.23886349628955 18.603823483921122, -18.56648525146059 18.506587066708043 C-18.871354916085913 18.39439221194164, -19.176224580711235 18.282197357175235, -19.739581595147797 18.074876768247425 C-20.143724098394973 17.895974870521307, -20.54786660164215 17.71707297279519, -20.88260791279238 17.568892924097174 C-21.10462210562103 17.453068261905344, -21.326636298449678 17.337243599713517, -21.99086726407678 16.990714730406097 C-22.22890314314122 16.846415981663135, -22.466939022205665 16.702117232920177, -23.059805573605686 16.3427180453909 C-23.407122005534006 16.100445137563717, -23.75443843746233 15.858172229736539, -24.085030344578712 15.627565626425156 C-24.3530843698274 15.413799674506516, -24.621138395076084 15.200033722587877, -25.06232870850187 14.848196188198125 C-25.2694432991771 14.660100196898656, -25.476557889852334 14.472004205599188, -25.987684736767974 14.007812326905697 C-26.23792925768976 13.749414313596692, -26.488173778611547 13.491016300287686, -26.857295942968655 13.109867360095677 C-27.10695310415522 12.81660585267103, -27.356610265341786 12.523344345246382, -27.66758890812658 12.158051136245307 C-27.903768735990123 11.84159168333311, -28.139948563853668 11.525132230420915, -28.415233964640635 11.156274872382316 C-28.640969636440417 10.80948426198258, -28.8667053082402 10.462693651582844, -29.097158878604244 10.108655082055249 C-29.289224477979 9.767623161614479, -29.481290077353762 9.426591241173707, -29.7105614742735 9.019496659696289 C-29.926633285915365 8.57081891962581, -30.14270509755723 8.122141179555332, -30.25292114880834 7.893275190886686 C-30.43363335075662 7.446912558241697, -30.614345552704897 7.000549925596708, -30.722009229970325 6.73461856121551 C-30.853264840958545 6.339297573660592, -30.984520451946768 5.943976586105674, -31.11589813421488 5.5482879393051325 C-31.20652654974233 5.2026825122952225, -31.297154965269776 4.857077085285312, -31.432969287545557 4.339158212148136 C-31.5117190195624 3.934794982003422, -31.590468751579238 3.530431751858708, -31.671919776581777 3.112197953150904 C-31.71835673420716 2.752042079822911, -31.764793691832544 2.3918862064949176, -31.831767702509364 1.872449005199809 C-31.854118948992777 1.5243102996192244, -31.876470195476188 1.1761715940386397, -31.911856215913414 0.6250057626472781 C-31.911856215913414 0.2660028286480535, -31.911856215913414 -0.09300010535117109, -31.911856215913414 -0.6250057626472687 C-31.887887711370368 -0.9983345679338351, -31.863919206827326 -1.3716633732204015, -31.831767702509367 -1.8724490051997822 C-31.790052588852863 -2.195983189138698, -31.74833747519636 -2.5195173730776137, -31.671919776581777 -3.112197953150895 C-31.623736217967654 -3.3596103430357003, -31.57555265935353 -3.607022732920506, -31.43296928754556 -4.339158212148126 C-31.31126554467292 -4.803267330457321, -31.18956180180028 -5.267376448766517, -31.115898134214884 -5.548287939305123 C-30.983700118391255 -5.946447300072476, -30.851502102567622 -6.34460666083983, -30.722009229970332 -6.734618561215485 C-30.59021056283786 -7.060163817186575, -30.458411895705385 -7.385709073157664, -30.252921148808344 -7.893275190886676 C-30.07480240209559 -8.263142579566365, -29.89668365538283 -8.633009968246053, -29.710561474273504 -9.019496659696282 C-29.543653387403616 -9.31585886921028, -29.376745300533724 -9.612221078724277, -29.097158878604247 -10.108655082055243 C-28.884374988539562 -10.435548277669506, -28.671591098474874 -10.762441473283769, -28.41523396464064 -11.156274872382308 C-28.136551879455823 -11.529683478069716, -27.857869794271004 -11.903092083757121, -27.667588908126586 -12.158051136245302 C-27.45462172793843 -12.408214504270155, -27.241654547750272 -12.65837787229501, -26.857295942968662 -13.10986736009567 C-26.61462316851174 -13.360446923527753, -26.371950394054824 -13.611026486959839, -25.987684736767996 -14.007812326905677 C-25.660096983225685 -14.305318857175807, -25.332509229683378 -14.602825387445938, -25.062328708501887 -14.848196188198107 C-24.733181016499813 -15.110682713581824, -24.40403332449774 -15.373169238965541, -24.08503034457872 -15.627565626425149 C-23.681183997575594 -15.909271355867931, -23.27733765057247 -16.190977085310713, -23.05980557360571 -16.342718045390885 C-22.7430488458799 -16.534737835207423, -22.42629211815409 -16.72675762502396, -21.99086726407679 -16.99071473040609 C-21.651750076169396 -17.167631950122452, -21.312632888262 -17.344549169838814, -20.882607912792388 -17.56889292409717 C-20.518828577982838 -17.7299272444868, -20.15504924317329 -17.89096156487643, -19.739581595147804 -18.07487676824742 C-19.32117288670431 -18.22885504068233, -18.902764178260814 -18.38283331311724, -18.56648525146062 -18.506587066708033 C-18.20675384392186 -18.613353460196844, -17.847022436383103 -18.72011985368566, -17.368139386235413 -18.862249829261067 C-16.891559128956807 -18.971026163008087, -16.414978871678205 -19.079802496755107, -16.149468259676766 -19.140403561325773 C-15.879849512503762 -19.18399342944409, -15.610230765330758 -19.22758329756241, -14.91547965284788 -19.3399052695533 C-14.648434917028395 -19.36566675404952, -14.381390181208907 -19.391428238545743, -13.671244289623903 -19.45993515863156 C-13.372565745611931 -19.469513198195504, -13.073887201599959 -19.47909123775945, -12.421875000000005 -19.5 C-12.421875000000004 -19.5, -12.421875000000002 -19.5, -12.421875 -19.5&quot; stroke=&quot;none&quot; stroke-width=&quot;0&quot; fill=&quot;#ECECFF&quot; style=&quot;&quot;&gt;&lt;/path&gt;&lt;path d=&quot;M-12.421875 -19.5 C-2.723107711024486 -19.5, 6.975659577951028 -19.5, 12.421875 -19.5 M-12.421875 -19.5 C-5.474200601162598 -19.5, 1.4734737976748047 -19.5, 12.421875 -19.5 M12.421875 -19.5 C12.421875 -19.5, 12.421875 -19.5, 12.421874999999998 -19.5 M12.421875 -19.5 C12.421875 -19.5, 12.421874999999998 -19.5, 12.421874999999998 -19.5 M12.421874999999998 -19.5 C12.762371487004987 -19.489080940397958, 13.102867974009975 -19.478161880795913, 13.6712442896239 -19.45993515863156 M12.421874999999998 -19.5 C12.744701129450204 -19.489647594371473, 13.067527258900409 -19.47929518874295, 13.6712442896239 -19.45993515863156 M13.6712442896239 -19.45993515863156 C13.95905855614135 -19.43217006248792, 14.246872822658801 -19.404404966344277, 14.915479652847864 -19.3399052695533 M13.6712442896239 -19.45993515863156 C14.001095118579403 -19.42811484586588, 14.330945947534907 -19.396294533100207, 14.915479652847864 -19.3399052695533 M14.915479652847864 -19.3399052695533 C15.355578068943043 -19.26875357065322, 15.795676485038221 -19.197601871753143, 16.14946825967676 -19.140403561325776 M14.915479652847864 -19.3399052695533 C15.192101793578642 -19.29518314707669, 15.468723934309418 -19.250461024600078, 16.14946825967676 -19.140403561325776 M16.14946825967676 -19.140403561325776 C16.395137901053076 -19.084331068825865, 16.640807542429393 -19.02825857632595, 17.36813938623539 -18.862249829261074 M16.14946825967676 -19.140403561325776 C16.54306350461898 -19.05056801511672, 16.936658749561207 -18.960732468907665, 17.36813938623539 -18.862249829261074 M17.36813938623539 -18.862249829261074 C17.709470392693238 -18.760944578227402, 18.05080139915108 -18.659639327193727, 18.566485251460602 -18.50658706670804 M17.36813938623539 -18.862249829261074 C17.64552737698937 -18.77992252964457, 17.92291536774335 -18.697595230028064, 18.566485251460602 -18.50658706670804 M18.566485251460602 -18.50658706670804 C18.900950263526763 -18.383500850507012, 19.235415275592928 -18.260414634305985, 19.739581595147794 -18.074876768247425 M18.566485251460602 -18.50658706670804 C18.874011909037325 -18.393414413974547, 19.181538566614048 -18.28024176124105, 19.739581595147794 -18.074876768247425 M19.739581595147794 -18.074876768247425 C20.11840579086676 -17.90718253422314, 20.49722998658573 -17.73948830019885, 20.88260791279238 -17.568892924097174 M19.739581595147794 -18.074876768247425 C20.142905832300144 -17.896337092648487, 20.546230069452495 -17.71779741704955, 20.88260791279238 -17.568892924097174 M20.88260791279238 -17.568892924097174 C21.266788609666953 -17.36846610061719, 21.65096930654153 -17.168039277137204, 21.990867264076783 -16.990714730406097 M20.88260791279238 -17.568892924097174 C21.212490806830257 -17.396793229577693, 21.542373700868136 -17.22469353505821, 21.990867264076783 -16.990714730406097 M21.990867264076783 -16.990714730406097 C22.32136757362091 -16.790363500525043, 22.651867883165036 -16.59001227064399, 23.059805573605697 -16.342718045390892 M21.990867264076783 -16.990714730406097 C22.223226976111143 -16.84985690747363, 22.455586688145505 -16.708999084541166, 23.059805573605697 -16.342718045390892 M23.059805573605697 -16.342718045390892 C23.311439787133377 -16.16718891110352, 23.56307400066106 -15.99165977681615, 24.085030344578712 -15.627565626425154 M23.059805573605697 -16.342718045390892 C23.372933220862564 -16.12429375374188, 23.686060868119434 -15.905869462092872, 24.085030344578712 -15.627565626425154 M24.085030344578712 -15.627565626425154 C24.31952859927055 -15.440559508569043, 24.55402685396239 -15.253553390712934, 25.06232870850187 -14.848196188198123 M24.085030344578712 -15.627565626425154 C24.348825101465607 -15.417196327681152, 24.612619858352502 -15.20682702893715, 25.06232870850187 -14.848196188198123 M25.06232870850187 -14.848196188198123 C25.4295834957663 -14.514665107433764, 25.796838283030727 -14.181134026669405, 25.987684736767985 -14.007812326905688 M25.06232870850187 -14.848196188198123 C25.324563984502756 -14.610041048899312, 25.586799260503643 -14.3718859096005, 25.987684736767985 -14.007812326905688 M25.987684736767985 -14.007812326905688 C26.299233117973255 -13.68611304471345, 26.61078149917853 -13.364413762521211, 26.857295942968648 -13.10986736009568 M25.987684736767985 -14.007812326905688 C26.176252684725426 -13.813100438923179, 26.36482063268287 -13.618388550940672, 26.857295942968648 -13.10986736009568 M26.857295942968648 -13.10986736009568 C27.101283218055464 -12.823266023509458, 27.345270493142284 -12.536664686923235, 27.667588908126582 -12.158051136245305 M26.857295942968648 -13.10986736009568 C27.174028968738444 -12.737814725406754, 27.490761994508244 -12.365762090717826, 27.667588908126582 -12.158051136245305 M27.667588908126582 -12.158051136245305 C27.933996227943766 -11.801089597896397, 28.20040354776095 -11.44412805954749, 28.415233964640635 -11.156274872382312 M27.667588908126582 -12.158051136245305 C27.951416433897883 -11.77774810893129, 28.235243959669187 -11.397445081617272, 28.415233964640635 -11.156274872382312 M28.415233964640635 -11.156274872382312 C28.668029493104353 -10.76791305555784, 28.92082502156807 -10.379551238733367, 29.097158878604247 -10.108655082055241 M28.415233964640635 -11.156274872382312 C28.59547588781906 -10.879374876646997, 28.775717810997484 -10.60247488091168, 29.097158878604247 -10.108655082055241 M29.097158878604247 -10.108655082055241 C29.224032030215287 -9.883378954070126, 29.350905181826327 -9.65810282608501, 29.7105614742735 -9.019496659696287 M29.097158878604247 -10.108655082055241 C29.259335470336904 -9.820694121273238, 29.42151206206956 -9.532733160491235, 29.7105614742735 -9.019496659696287 M29.7105614742735 -9.019496659696287 C29.883980050436822 -8.659389275730042, 30.057398626600143 -8.2992818917638, 30.25292114880834 -7.893275190886684 M29.7105614742735 -9.019496659696287 C29.829256005839135 -8.773024925244119, 29.94795053740477 -8.526553190791951, 30.25292114880834 -7.893275190886684 M30.25292114880834 -7.893275190886684 C30.384909568159813 -7.56726124326606, 30.516897987511285 -7.241247295645436, 30.722009229970325 -6.734618561215508 M30.25292114880834 -7.893275190886684 C30.363744394313432 -7.619539631867421, 30.47456763981852 -7.345804072848158, 30.722009229970325 -6.734618561215508 M30.722009229970325 -6.734618561215508 C30.80553517847924 -6.483051712359288, 30.88906112698815 -6.231484863503068, 31.11589813421488 -5.548287939305138 M30.722009229970325 -6.734618561215508 C30.85820896163733 -6.3244066699147465, 30.994408693304337 -5.914194778613986, 31.11589813421488 -5.548287939305138 M31.11589813421488 -5.548287939305138 C31.226204113276374 -5.127643434229922, 31.33651009233787 -4.706998929154707, 31.43296928754556 -4.339158212148133 M31.11589813421488 -5.548287939305138 C31.222538729829317 -5.141621129900787, 31.329179325443757 -4.734954320496436, 31.43296928754556 -4.339158212148133 M31.43296928754556 -4.339158212148133 C31.52440106747022 -3.8696753463485387, 31.61583284739488 -3.4001924805489443, 31.671919776581777 -3.1121979531509023 M31.43296928754556 -4.339158212148133 C31.49638266865499 -4.013543902574049, 31.559796049764422 -3.687929592999965, 31.671919776581777 -3.1121979531509023 M31.671919776581777 -3.1121979531509023 C31.73287635950175 -2.639430733262407, 31.79383294242172 -2.1666635133739125, 31.831767702509367 -1.872449005199798 M31.671919776581777 -3.1121979531509023 C31.725220157617493 -2.698810723188638, 31.778520538653204 -2.2854234932263733, 31.831767702509367 -1.872449005199798 M31.831767702509367 -1.872449005199798 C31.854294622253875 -1.5215740467767667, 31.87682154199838 -1.1706990883537354, 31.911856215913414 -0.6250057626472757 M31.831767702509367 -1.872449005199798 C31.861466119528046 -1.4098721880031022, 31.891164536546725 -0.9472953708064064, 31.911856215913414 -0.6250057626472757 M31.911856215913414 -0.6250057626472757 C31.911856215913414 -0.1941126290564964, 31.911856215913414 0.2367805045342829, 31.911856215913414 0.625005762647271 M31.911856215913414 -0.6250057626472757 C31.911856215913414 -0.1923487510211242, 31.911856215913414 0.2403082606050273, 31.911856215913414 0.625005762647271 M31.911856215913414 0.625005762647271 C31.881882818242662 1.0918656254603627, 31.85190942057191 1.5587254882734545, 31.831767702509367 1.8724490051997846 M31.911856215913414 0.625005762647271 C31.880610952470565 1.111675961492335, 31.84936568902772 1.5983461603373987, 31.831767702509367 1.8724490051997846 M31.831767702509367 1.8724490051997846 C31.791187292081524 2.1871826549696998, 31.750606881653685 2.501916304739615, 31.671919776581777 3.1121979531508885 M31.831767702509367 1.8724490051997846 C31.77791197320745 2.290143406648811, 31.72405624390553 2.707837808097838, 31.671919776581777 3.1121979531508885 M31.671919776581777 3.1121979531508885 C31.5867371454828 3.549592760488677, 31.501554514383823 3.986987567826465, 31.43296928754556 4.339158212148129 M31.671919776581777 3.1121979531508885 C31.596826876215 3.497784125644175, 31.521733975848225 3.8833702981374607, 31.43296928754556 4.339158212148129 M31.43296928754556 4.339158212148129 C31.33066347910357 4.729294599355291, 31.22835767066158 5.119430986562454, 31.115898134214884 5.548287939305125 M31.43296928754556 4.339158212148129 C31.325288416476184 4.7497920427204, 31.217607545406807 5.16042587329267, 31.115898134214884 5.548287939305125 M31.115898134214884 5.548287939305125 C31.022027191806277 5.8310122615362845, 30.92815624939767 6.1137365837674436, 30.72200922997033 6.734618561215495 M31.115898134214884 5.548287939305125 C31.025475361731477 5.82062692311285, 30.93505258924807 6.092965906920575, 30.72200922997033 6.734618561215495 M30.72200922997033 6.734618561215495 C30.582629133315233 7.078890094684431, 30.443249036660138 7.423161628153367, 30.252921148808344 7.893275190886679 M30.72200922997033 6.734618561215495 C30.586951868229754 7.0682128558711685, 30.45189450648918 7.401807150526842, 30.252921148808344 7.893275190886679 M30.252921148808344 7.893275190886679 C30.083203879777944 8.245696731396126, 29.913486610747547 8.598118271905573, 29.710561474273504 9.019496659696284 M30.252921148808344 7.893275190886679 C30.118417141113106 8.172575640790571, 29.983913133417868 8.451876090694462, 29.710561474273504 9.019496659696284 M29.710561474273504 9.019496659696284 C29.572967674708128 9.263808383707643, 29.435373875142755 9.508120107719002, 29.09715887860425 10.108655082055236 M29.710561474273504 9.019496659696284 C29.542618160864176 9.317697018759103, 29.374674847454852 9.615897377821923, 29.09715887860425 10.108655082055236 M29.09715887860425 10.108655082055236 C28.950145815305103 10.33450662581774, 28.803132752005954 10.560358169580246, 28.41523396464064 11.156274872382301 M29.09715887860425 10.108655082055236 C28.946636311187575 10.33989816657607, 28.7961137437709 10.571141251096904, 28.41523396464064 11.156274872382301 M28.41523396464064 11.156274872382301 C28.19290221525733 11.45417916171689, 27.970570465874015 11.75208345105148, 27.667588908126582 12.158051136245302 M28.41523396464064 11.156274872382301 C28.12848920154213 11.54048673194899, 27.841744438443616 11.924698591515678, 27.667588908126582 12.158051136245302 M27.667588908126582 12.158051136245302 C27.44380263720054 12.420923223874578, 27.2200163662745 12.683795311503854, 26.85729594296866 13.10986736009567 M27.667588908126582 12.158051136245302 C27.427507036834765 12.44006496331015, 27.187425165542944 12.722078790374995, 26.85729594296866 13.10986736009567 M26.85729594296866 13.10986736009567 C26.52278554298959 13.455276811888655, 26.18827514301052 13.80068626368164, 25.98768473676799 14.007812326905684 M26.85729594296866 13.10986736009567 C26.67941704671441 13.293541924607167, 26.501538150460156 13.477216489118664, 25.98768473676799 14.007812326905684 M25.98768473676799 14.007812326905684 C25.62266003934392 14.339318099081973, 25.25763534191985 14.670823871258264, 25.062328708501887 14.848196188198111 M25.98768473676799 14.007812326905684 C25.756216261336373 14.218025871972422, 25.524747785904754 14.428239417039158, 25.062328708501887 14.848196188198111 M25.062328708501887 14.848196188198111 C24.679592398608992 15.153418210296744, 24.296856088716098 15.458640232395378, 24.085030344578715 15.627565626425152 M25.062328708501887 14.848196188198111 C24.81471297158054 15.04566314906139, 24.567097234659194 15.243130109924671, 24.085030344578715 15.627565626425152 M24.085030344578715 15.627565626425152 C23.771254584954583 15.846442013205236, 23.45747882533045 16.06531839998532, 23.059805573605708 16.34271804539089 M24.085030344578715 15.627565626425152 C23.714826970239056 15.885803474518715, 23.3446235958994 16.144041322612278, 23.059805573605708 16.34271804539089 M23.059805573605708 16.34271804539089 C22.809480497428492 16.49446657764295, 22.559155421251276 16.646215109895014, 21.990867264076787 16.990714730406093 M23.059805573605708 16.34271804539089 C22.83155042689819 16.481087656701117, 22.60329528019067 16.61945726801135, 21.990867264076787 16.990714730406093 M21.990867264076787 16.990714730406093 C21.717237589430546 17.133467156400865, 21.443607914784305 17.27621958239564, 20.882607912792388 17.56889292409717 M21.990867264076787 16.990714730406093 C21.619912490210908 17.18424159832405, 21.248957716345025 17.377768466242006, 20.882607912792388 17.56889292409717 M20.882607912792388 17.56889292409717 C20.573577407052163 17.705691561924123, 20.264546901311938 17.842490199751072, 19.739581595147804 18.07487676824742 M20.882607912792388 17.56889292409717 C20.501667272779745 17.737524045228177, 20.120726632767102 17.906155166359188, 19.739581595147804 18.07487676824742 M19.739581595147804 18.07487676824742 C19.466821990206196 18.17525482422808, 19.194062385264587 18.275632880208743, 18.566485251460616 18.506587066708033 M19.739581595147804 18.07487676824742 C19.432559944782867 18.187863573658742, 19.12553829441793 18.300850379070063, 18.566485251460616 18.506587066708033 M18.566485251460616 18.506587066708033 C18.127516618995866 18.6368706526302, 17.688547986531113 18.76715423855237, 17.368139386235413 18.86224982926107 M18.566485251460616 18.506587066708033 C18.118896974892298 18.639428917754703, 17.67130869832398 18.772270768801377, 17.368139386235413 18.86224982926107 M17.368139386235413 18.86224982926107 C17.020232186017996 18.94165737740404, 16.672324985800582 19.021064925547016, 16.149468259676766 19.140403561325773 M17.368139386235413 18.86224982926107 C16.933813671573645 18.961381839392455, 16.499487956911878 19.060513849523844, 16.149468259676766 19.140403561325773 M16.149468259676766 19.140403561325773 C15.822742517081052 19.193226045592674, 15.496016774485337 19.24604852985957, 14.915479652847878 19.3399052695533 M16.149468259676766 19.140403561325773 C15.841922790347502 19.190125127756193, 15.534377321018237 19.239846694186614, 14.915479652847878 19.3399052695533 M14.915479652847878 19.3399052695533 C14.517639545711308 19.37828442621603, 14.119799438574738 19.416663582878765, 13.6712442896239 19.45993515863156 M14.915479652847878 19.3399052695533 C14.47944892437253 19.38196862952564, 14.043418195897184 19.424031989497983, 13.6712442896239 19.45993515863156 M13.6712442896239 19.45993515863156 C13.264805663384863 19.47296885429025, 12.858367037145827 19.486002549948942, 12.421875000000004 19.5 M13.6712442896239 19.45993515863156 C13.19253217829002 19.475286524285437, 12.713820066956139 19.49063788993932, 12.421875000000004 19.5 M12.421875000000004 19.5 C12.421875000000002 19.5, 12.421875 19.5, 12.421875 19.5 M12.421875000000004 19.5 C12.421875000000002 19.5, 12.421875000000002 19.5, 12.421875 19.5 M12.421875 19.5 C4.040814558540392 19.5, -4.340245882919216 19.5, -12.421874999999996 19.5 M12.421875 19.5 C3.707155917809631 19.5, -5.007563164380738 19.5, -12.421874999999996 19.5 M-12.421874999999996 19.5 C-12.747036307291916 19.489572709763237, -13.072197614583835 19.479145419526475, -13.671244289623893 19.45993515863156 M-12.421874999999996 19.5 C-12.818156828884357 19.487292013063467, -13.214438657768717 19.47458402612693, -13.671244289623893 19.45993515863156 M-13.671244289623893 19.45993515863156 C-14.043521481847078 19.424022025626616, -14.415798674070261 19.388108892621673, -14.915479652847871 19.3399052695533 M-13.671244289623893 19.45993515863156 C-14.145714545856357 19.414163583646783, -14.620184802088822 19.368392008662006, -14.915479652847871 19.3399052695533 M-14.915479652847871 19.3399052695533 C-15.37998184324533 19.264808157678125, -15.84448403364279 19.189711045802948, -16.14946825967676 19.140403561325773 M-14.915479652847871 19.3399052695533 C-15.208445742817169 19.292540784113022, -15.501411832786465 19.245176298672746, -16.14946825967676 19.140403561325773 M-16.14946825967676 19.140403561325773 C-16.410647694316125 19.08079105972443, -16.671827128955496 19.021178558123083, -17.368139386235388 18.862249829261074 M-16.14946825967676 19.140403561325773 C-16.611089192272047 19.035041595819003, -17.072710124867335 18.929679630312233, -17.368139386235388 18.862249829261074 M-17.368139386235388 18.862249829261074 C-17.66877905826174 18.773021552693496, -17.969418730288094 18.683793276125915, -18.56648525146059 18.506587066708043 M-17.368139386235388 18.862249829261074 C-17.706124453777644 18.761937635334355, -18.0441095213199 18.661625441407637, -18.56648525146059 18.506587066708043 M-18.56648525146059 18.506587066708043 C-18.838351135493173 18.40653790828337, -19.11021701952576 18.306488749858698, -19.739581595147797 18.074876768247425 M-18.56648525146059 18.506587066708043 C-18.84536072493183 18.40395831457401, -19.124236198403068 18.301329562439978, -19.739581595147797 18.074876768247425 M-19.739581595147797 18.074876768247425 C-20.020653179476565 17.950454715557388, -20.301724763805332 17.826032662867355, -20.88260791279238 17.568892924097174 M-19.739581595147797 18.074876768247425 C-20.040032146807455 17.941876221576646, -20.340482698467113 17.808875674905867, -20.88260791279238 17.568892924097174 M-20.88260791279238 17.568892924097174 C-21.17483759005966 17.416436888648875, -21.467067267326943 17.263980853200575, -21.99086726407678 16.990714730406097 M-20.88260791279238 17.568892924097174 C-21.157299075569398 17.42558672042449, -21.431990238346415 17.282280516751808, -21.99086726407678 16.990714730406097 M-21.99086726407678 16.990714730406097 C-22.30473526141542 16.800446105926326, -22.61860325875406 16.610177481446552, -23.059805573605686 16.3427180453909 M-21.99086726407678 16.990714730406097 C-22.278642329972005 16.81626379430641, -22.566417395867234 16.64181285820672, -23.059805573605686 16.3427180453909 M-23.059805573605686 16.3427180453909 C-23.344768783603733 16.143940045954807, -23.629731993601776 15.945162046518712, -24.085030344578712 15.627565626425156 M-23.059805573605686 16.3427180453909 C-23.36608848633734 16.1290683442429, -23.672371399068993 15.915418643094895, -24.085030344578712 15.627565626425156 M-24.085030344578712 15.627565626425156 C-24.35785044098377 15.40999885958979, -24.63067053738883 15.192432092754423, -25.06232870850187 14.848196188198125 M-24.085030344578712 15.627565626425156 C-24.31734287072075 15.44230256892283, -24.549655396862793 15.257039511420505, -25.06232870850187 14.848196188198125 M-25.06232870850187 14.848196188198125 C-25.42495360211955 14.518869854343468, -25.787578495737232 14.189543520488808, -25.987684736767974 14.007812326905697 M-25.06232870850187 14.848196188198125 C-25.364789535276287 14.573509267996542, -25.667250362050705 14.29882234779496, -25.987684736767974 14.007812326905697 M-25.987684736767974 14.007812326905697 C-26.18092304057912 13.808277913060895, -26.374161344390266 13.608743499216093, -26.857295942968655 13.109867360095677 M-25.987684736767974 14.007812326905697 C-26.186980231209418 13.802023366430515, -26.386275725650858 13.596234405955332, -26.857295942968655 13.109867360095677 M-26.857295942968655 13.109867360095677 C-27.05954645410817 12.872292401331103, -27.26179696524768 12.63471744256653, -27.66758890812658 12.158051136245307 M-26.857295942968655 13.109867360095677 C-27.100616164369224 12.82404958272575, -27.34393638576979 12.538231805355824, -27.66758890812658 12.158051136245307 M-27.66758890812658 12.158051136245307 C-27.94415876881824 11.78747271895112, -28.220728629509903 11.416894301656935, -28.415233964640635 11.156274872382316 M-27.66758890812658 12.158051136245307 C-27.950490966854662 11.778988150457424, -28.233393025582746 11.399925164669542, -28.415233964640635 11.156274872382316 M-28.415233964640635 11.156274872382316 C-28.60196250966608 10.869409683588119, -28.78869105469153 10.582544494793922, -29.097158878604244 10.108655082055249 M-28.415233964640635 11.156274872382316 C-28.632110843019053 10.823093747596907, -28.84898772139747 10.489912622811499, -29.097158878604244 10.108655082055249 M-29.097158878604244 10.108655082055249 C-29.24572198697085 9.84486623950434, -29.394285095337455 9.581077396953432, -29.7105614742735 9.019496659696289 M-29.097158878604244 10.108655082055249 C-29.293888553275305 9.759341623637058, -29.490618227946364 9.410028165218865, -29.7105614742735 9.019496659696289 M-29.7105614742735 9.019496659696289 C-29.84896416733671 8.732100506207297, -29.987366860399923 8.444704352718306, -30.25292114880834 7.893275190886686 M-29.7105614742735 9.019496659696289 C-29.872411087807198 8.683412474166605, -30.034260701340894 8.347328288636922, -30.25292114880834 7.893275190886686 M-30.25292114880834 7.893275190886686 C-30.423957504574467 7.470812085381371, -30.594993860340594 7.048348979876056, -30.722009229970325 6.73461856121551 M-30.25292114880834 7.893275190886686 C-30.433640030726306 7.446896058587428, -30.614358912644267 7.00051692628817, -30.722009229970325 6.73461856121551 M-30.722009229970325 6.73461856121551 C-30.854435736718894 6.335771022187327, -30.986862243467463 5.936923483159143, -31.11589813421488 5.5482879393051325 M-30.722009229970325 6.73461856121551 C-30.870802864112928 6.286475842224105, -31.01959649825553 5.838333123232701, -31.11589813421488 5.5482879393051325 M-31.11589813421488 5.5482879393051325 C-31.185907763441676 5.281310880698124, -31.25591739266847 5.014333822091114, -31.432969287545557 4.339158212148136 M-31.11589813421488 5.5482879393051325 C-31.22331245074806 5.138670596704852, -31.330726767281238 4.729053254104571, -31.432969287545557 4.339158212148136 M-31.432969287545557 4.339158212148136 C-31.520269464072488 3.8908902565812045, -31.607569640599415 3.4426223010142736, -31.671919776581777 3.112197953150904 M-31.432969287545557 4.339158212148136 C-31.48159951545384 4.089452269841421, -31.53022974336212 3.839746327534706, -31.671919776581777 3.112197953150904 M-31.671919776581777 3.112197953150904 C-31.7189880941968 2.7471453764194145, -31.766056411811817 2.382092799687925, -31.831767702509364 1.872449005199809 M-31.671919776581777 3.112197953150904 C-31.72391961263655 2.708897493239176, -31.77591944869132 2.305597033327448, -31.831767702509364 1.872449005199809 M-31.831767702509364 1.872449005199809 C-31.85184805179059 1.5596813565785321, -31.871928401071813 1.2469137079572552, -31.911856215913414 0.6250057626472781 M-31.831767702509364 1.872449005199809 C-31.853514296866397 1.5337282445539824, -31.875260891223434 1.1950074839081555, -31.911856215913414 0.6250057626472781 M-31.911856215913414 0.6250057626472781 C-31.911856215913414 0.2990023429808357, -31.911856215913414 -0.027001076685606695, -31.911856215913414 -0.6250057626472687 M-31.911856215913414 0.6250057626472781 C-31.911856215913414 0.21042313645080546, -31.911856215913414 -0.20415948974566722, -31.911856215913414 -0.6250057626472687 M-31.911856215913414 -0.6250057626472687 C-31.88247000489991 -1.0827197193051505, -31.853083793886412 -1.5404336759630324, -31.831767702509367 -1.8724490051997822 M-31.911856215913414 -0.6250057626472687 C-31.886592972916482 -1.018501164447209, -31.86132972991955 -1.4119965662471494, -31.831767702509367 -1.8724490051997822 M-31.831767702509367 -1.8724490051997822 C-31.77213538719694 -2.334945467030399, -31.71250307188451 -2.797441928861016, -31.671919776581777 -3.112197953150895 M-31.831767702509367 -1.8724490051997822 C-31.790623356250062 -2.191556429916801, -31.749479009990758 -2.5106638546338202, -31.671919776581777 -3.112197953150895 M-31.671919776581777 -3.112197953150895 C-31.594544436246853 -3.509503972486754, -31.51716909591193 -3.9068099918226125, -31.43296928754556 -4.339158212148126 M-31.671919776581777 -3.112197953150895 C-31.601699432405145 -3.4727645794229156, -31.531479088228508 -3.833331205694936, -31.43296928754556 -4.339158212148126 M-31.43296928754556 -4.339158212148126 C-31.312012551247392 -4.800418670634166, -31.191055814949223 -5.261679129120205, -31.115898134214884 -5.548287939305123 M-31.43296928754556 -4.339158212148126 C-31.325959009189972 -4.7472347820659975, -31.218948730834384 -5.155311351983868, -31.115898134214884 -5.548287939305123 M-31.115898134214884 -5.548287939305123 C-31.002567734445385 -5.889621046663807, -30.889237334675887 -6.230954154022492, -30.722009229970332 -6.734618561215485 M-31.115898134214884 -5.548287939305123 C-30.99141706850995 -5.923205075843986, -30.86693600280502 -6.2981222123828475, -30.722009229970332 -6.734618561215485 M-30.722009229970332 -6.734618561215485 C-30.62034701258622 -6.985726203659507, -30.518684795202105 -7.236833846103528, -30.252921148808344 -7.893275190886676 M-30.722009229970332 -6.734618561215485 C-30.591947878056377 -7.055872615008127, -30.461886526142425 -7.377126668800768, -30.252921148808344 -7.893275190886676 M-30.252921148808344 -7.893275190886676 C-30.110194802995597 -8.189649501821425, -29.967468457182854 -8.486023812756175, -29.710561474273504 -9.019496659696282 M-30.252921148808344 -7.893275190886676 C-30.13689358812757 -8.134208903232398, -30.020866027446797 -8.37514261557812, -29.710561474273504 -9.019496659696282 M-29.710561474273504 -9.019496659696282 C-29.483607011631396 -9.422477289748729, -29.25665254898929 -9.825457919801176, -29.097158878604247 -10.108655082055243 M-29.710561474273504 -9.019496659696282 C-29.533359930306617 -9.334135944611559, -29.356158386339725 -9.648775229526834, -29.097158878604247 -10.108655082055243 M-29.097158878604247 -10.108655082055243 C-28.862889438448043 -10.468555852288107, -28.62861999829184 -10.82845662252097, -28.41523396464064 -11.156274872382308 M-29.097158878604247 -10.108655082055243 C-28.884954829936124 -10.434657485575169, -28.672750781268 -10.760659889095093, -28.41523396464064 -11.156274872382308 M-28.41523396464064 -11.156274872382308 C-28.158254192800445 -11.500604355309338, -27.901274420960252 -11.844933838236368, -27.667588908126586 -12.158051136245302 M-28.41523396464064 -11.156274872382308 C-28.138599243325984 -11.526940197002386, -27.861964522011327 -11.897605521622463, -27.667588908126586 -12.158051136245302 M-27.667588908126586 -12.158051136245302 C-27.46886109763419 -12.391488130382427, -27.270133287141793 -12.624925124519551, -26.857295942968662 -13.10986736009567 M-27.667588908126586 -12.158051136245302 C-27.43562101620736 -12.430533821440596, -27.203653124288135 -12.70301650663589, -26.857295942968662 -13.10986736009567 M-26.857295942968662 -13.10986736009567 C-26.557919162321163 -13.418998465405014, -26.258542381673664 -13.72812957071436, -25.987684736767996 -14.007812326905677 M-26.857295942968662 -13.10986736009567 C-26.569716595359186 -13.406816647205993, -26.282137247749706 -13.703765934316316, -25.987684736767996 -14.007812326905677 M-25.987684736767996 -14.007812326905677 C-25.789273213576735 -14.18800442258675, -25.590861690385474 -14.368196518267823, -25.062328708501887 -14.848196188198107 M-25.987684736767996 -14.007812326905677 C-25.669074973350124 -14.297165284089395, -25.350465209932253 -14.586518241273112, -25.062328708501887 -14.848196188198107 M-25.062328708501887 -14.848196188198107 C-24.8071844342924 -15.051666957205889, -24.552040160082914 -15.25513772621367, -24.08503034457872 -15.627565626425149 M-25.062328708501887 -14.848196188198107 C-24.78840189615744 -15.066645531544191, -24.514475083812986 -15.285094874890275, -24.08503034457872 -15.627565626425149 M-24.08503034457872 -15.627565626425149 C-23.756384933133653 -15.856814438618661, -23.42773952168859 -16.086063250812174, -23.05980557360571 -16.342718045390885 M-24.08503034457872 -15.627565626425149 C-23.70797648771256 -15.890582074576589, -23.330922630846402 -16.15359852272803, -23.05980557360571 -16.342718045390885 M-23.05980557360571 -16.342718045390885 C-22.676785458212596 -16.574907090218232, -22.29376534281948 -16.807096135045583, -21.99086726407679 -16.99071473040609 M-23.05980557360571 -16.342718045390885 C-22.68199220181711 -16.571750731646954, -22.304178830028512 -16.800783417903023, -21.99086726407679 -16.99071473040609 M-21.99086726407679 -16.99071473040609 C-21.57486911560037 -17.207740698006706, -21.158870967123953 -17.424766665607326, -20.882607912792388 -17.56889292409717 M-21.99086726407679 -16.99071473040609 C-21.582665802391432 -17.203673171501826, -21.17446434070607 -17.416631612597566, -20.882607912792388 -17.56889292409717 M-20.882607912792388 -17.56889292409717 C-20.495512248039358 -17.740248692098426, -20.10841658328633 -17.91160446009968, -19.739581595147804 -18.07487676824742 M-20.882607912792388 -17.56889292409717 C-20.52819925840536 -17.72577912223511, -20.173790604018325 -17.88266532037305, -19.739581595147804 -18.07487676824742 M-19.739581595147804 -18.07487676824742 C-19.327931006120878 -18.22636799026566, -18.91628041709395 -18.3778592122839, -18.56648525146062 -18.506587066708033 M-19.739581595147804 -18.07487676824742 C-19.500374664532995 -18.1629071299183, -19.26116773391819 -18.250937491589173, -18.56648525146062 -18.506587066708033 M-18.56648525146062 -18.506587066708033 C-18.2005491158449 -18.615194990920806, -17.834612980229178 -18.72380291513358, -17.368139386235413 -18.862249829261067 M-18.56648525146062 -18.506587066708033 C-18.162625364915723 -18.626450561130756, -17.758765478370822 -18.746314055553476, -17.368139386235413 -18.862249829261067 M-17.368139386235413 -18.862249829261067 C-16.980696473366702 -18.950681145822063, -16.593253560497992 -19.039112462383056, -16.149468259676766 -19.140403561325773 M-17.368139386235413 -18.862249829261067 C-17.025706268115737 -18.940407953886954, -16.683273149996058 -19.018566078512844, -16.149468259676766 -19.140403561325773 M-16.149468259676766 -19.140403561325773 C-15.75361625513806 -19.204401843541447, -15.35776425059935 -19.268400125757122, -14.91547965284788 -19.3399052695533 M-16.149468259676766 -19.140403561325773 C-15.850817155500946 -19.188687155775018, -15.552166051325125 -19.23697075022426, -14.91547965284788 -19.3399052695533 M-14.91547965284788 -19.3399052695533 C-14.426292357518216 -19.38709657959995, -13.937105062188552 -19.43428788964661, -13.671244289623903 -19.45993515863156 M-14.91547965284788 -19.3399052695533 C-14.51282357595874 -19.37874901702601, -14.110167499069599 -19.417592764498725, -13.671244289623903 -19.45993515863156 M-13.671244289623903 -19.45993515863156 C-13.255402468230603 -19.473270396456638, -12.839560646837302 -19.48660563428172, -12.421875000000005 -19.5 M-13.671244289623903 -19.45993515863156 C-13.392175489924833 -19.46888435186344, -13.113106690225763 -19.477833545095326, -12.421875000000005 -19.5 M-12.421875000000005 -19.5 C-12.421875000000004 -19.5, -12.421875000000002 -19.5, -12.421875 -19.5 M-12.421875000000005 -19.5 C-12.421875000000004 -19.5, -12.421875000000002 -19.5, -12.421875 -19.5&quot; stroke=&quot;#9370DB&quot; stroke-width=&quot;1.3&quot; fill=&quot;none&quot; stroke-dasharray=&quot;0 0&quot; style=&quot;&quot;&gt;&lt;/path&gt;&lt;/g&gt;&lt;g class=&quot;label&quot; style=&quot;&quot; transform=&quot;translate(-19.546875, -12)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;39.09375&quot; height=&quot;24&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Start&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;node default&quot; id=&quot;flowchart-B-1&quot; transform=&quot;translate(182.88621139526367, 87)&quot;&gt;&lt;polygon points=&quot;61.0625,0 122.125,-61.0625 61.0625,-122.125 0,-61.0625&quot; class=&quot;label-container&quot; transform=&quot;translate(-60.5625, 61.0625)&quot;&gt;&lt;/polygon&gt;&lt;g class=&quot;label&quot; style=&quot;&quot; transform=&quot;translate(-34.0625, -12)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;68.125&quot; height=&quot;24&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Decision&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;node default&quot; id=&quot;flowchart-C-3&quot; transform=&quot;translate(358.6830863952637, 35)&quot;&gt;&lt;rect class=&quot;basic label-container&quot; style=&quot;&quot; x=&quot;-64.71875&quot; y=&quot;-27&quot; width=&quot;129.4375&quot; height=&quot;54&quot;&gt;&lt;/rect&gt;&lt;g class=&quot;label&quot; style=&quot;&quot; transform=&quot;translate(-34.71875, -12)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;69.4375&quot; height=&quot;24&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Option A&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;g class=&quot;node default&quot; id=&quot;flowchart-D-4&quot; transform=&quot;translate(358.6830863952637, 139)&quot;&gt;&lt;rect class=&quot;basic label-container&quot; style=&quot;&quot; x=&quot;-64.734375&quot; y=&quot;-27&quot; width=&quot;129.46875&quot; height=&quot;54&quot;&gt;&lt;/rect&gt;&lt;g class=&quot;label&quot; style=&quot;&quot; transform=&quot;translate(-34.734375, -12)&quot;&gt;&lt;rect&gt;&lt;/rect&gt;&lt;foreignObject width=&quot;69.46875&quot; height=&quot;24&quot;&gt;&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot; style=&quot;display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;&quot;&gt;&lt;span class=&quot;nodeLabel&quot;&gt;&lt;p&gt;Option B&lt;/p&gt;&lt;/span&gt;&lt;/div&gt;&lt;/foreignObject&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/g&gt;&lt;/svg&gt;&lt;/body&gt;&lt;/html&gt;&lt;/figure&gt;
    <hr/><p><strong><a href="">markdown-it-mermaid-server</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/tools/markdown-it-mermaid-server/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Nano ID Collision Calculator</title>
    <link href="https://ulfschneider.io/2025-07-18-nanoid-collision-likelihood/" />
    <updated>2025-07-18T19:12:55Z</updated>
    <id>https://ulfschneider.io/2025-07-18-nanoid-collision-likelihood/</id>
    <content type="html"> &lt;p&gt;Use the &lt;a href=&quot;https://zelark.github.io/nano-id-cc/&quot;&gt;&lt;cite&gt;Nano ID Collision Calculator&lt;/cite&gt;&lt;/a&gt; to understand the collision-likelihood of your current Nano ID alphabet and id-length.&lt;/p&gt;

    <hr/><p><strong><a href="">Nano ID Collision Calculator</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-07-18-nanoid-collision-likelihood/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Pixel man</title>
    <link href="https://ulfschneider.io/2025-06-30-pixel-man/" />
    <updated>2025-06-30T07:03:56Z</updated>
    <id>https://ulfschneider.io/2025-06-30-pixel-man/</id>
    <content type="html"> &lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/foaWE4fHqk-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/foaWE4fHqk-200.webp 200w, https://ulfschneider.io/img/foaWE4fHqk-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
    <hr/><p><strong><a href="">Pixel man</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-06-30-pixel-man/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Haikei</title>
    <link href="https://ulfschneider.io/2025-06-30-haikei/" />
    <updated>2025-06-30T07:04:21Z</updated>
    <id>https://ulfschneider.io/2025-06-30-haikei/</id>
    <content type="html"> &lt;p&gt;&lt;a href=&quot;https://app.haikei.app&quot;&gt;&lt;cite&gt;Haikei&lt;/cite&gt;&lt;/a&gt; is a shape generator  for &lt;a href=&quot;https://ulfschneider.io/2025-06-30-blobs/&quot;&gt;blobs&lt;/a&gt;, waves, and gradients. Output formats are SVG and PNG.&lt;/p&gt;

    <hr/><p><strong><a href="">Haikei</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-06-30-haikei/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Fancy-Border-Radius</title>
    <link href="https://ulfschneider.io/2025-06-30-fancy-border-radius/" />
    <updated>2025-06-30T07:04:31Z</updated>
    <id>https://ulfschneider.io/2025-06-30-fancy-border-radius/</id>
    <content type="html"> &lt;p&gt;&lt;a href=&quot;https://9elements.github.io/fancy-border-radius/&quot;&gt;&lt;cite&gt;Fancy-Border-Radius&lt;/cite&gt;&lt;/a&gt; is a  tool written by Nils Binder, that allows to create and play with blobs by setting the horizontal and vertical radii with the CSS property &lt;code&gt;border-radius&lt;/code&gt;.&lt;/p&gt;

    <hr/><p><strong><a href="">Fancy-Border-Radius</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-06-30-fancy-border-radius/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Blobs</title>
    <link href="https://ulfschneider.io/2025-06-30-blobs/" />
    <updated>2025-07-19T10:09:40Z</updated>
    <id>https://ulfschneider.io/2025-06-30-blobs/</id>
    <content type="html">&lt;figure&gt;&lt;div style=&quot;border-radius: 30% 70% 70% 30% / 30% 26% 74% 70%; width:5rem; height:5rem; background:linear-gradient(47deg, #639 0%, 72%, #0ff 100%);&quot;&gt;&lt;/div&gt;&lt;figcaption&gt;A blob&lt;/figcaption&gt;&lt;/figure&gt; &lt;p&gt;I enjoyed Juan Diego Rodriguez´ &lt;a href=&quot;https://css-tricks.com/css-blob-recipes&quot;&gt;&lt;cite&gt;CSS Blob Recipes&lt;/cite&gt;&lt;/a&gt; on CSS Tricks. I learned, each  &lt;code&gt;border-radius&lt;/code&gt; corner can be addressed with a vertical and horizontal radius! Like:&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; data-language=&quot;CSS&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.blob&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  /* set the horizontal radius to 25% and the vertical to 50%
  &lt;span class=&quot;token property&quot;&gt;border-top-left-radius&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 25% 50%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; 
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To address each corner with the two radii, the syntax is:&lt;/p&gt;
&lt;pre class=&quot;language-css&quot; data-language=&quot;CSS&quot;&gt;&lt;code class=&quot;language-css&quot;&gt;&lt;span class=&quot;token selector&quot;&gt;.blob&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;token property&quot;&gt;border-radius&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;/* separate horizontal radii from vertical radii with a forward slash */&lt;/span&gt;    
    &lt;span class=&quot;token comment&quot;&gt;/* horizontal */&lt;/span&gt;
    30% 70% 70% 30% /  
    &lt;span class=&quot;token comment&quot;&gt;/* vertical */&lt;/span&gt;
    30% 26% 74% 70%&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;token comment&quot;&gt;/* set width, height, and background */&lt;/span&gt;  
  &lt;span class=&quot;token property&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 15rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;   
  &lt;span class=&quot;token property&quot;&gt;height&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; 15rem&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;  
  &lt;span class=&quot;token property&quot;&gt;background&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;linear-gradient&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;47deg&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; #639 0%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; 72%&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; #0ff 100%&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;which would create the following shape:&lt;/p&gt;
&lt;figure&gt;
&lt;div style=&quot;border-radius: 30% 70% 70% 30% / 30% 26% 74% 70%; width:15rem; height:15rem; background:linear-gradient(47deg, #639 0%, 72%, #0ff 100%);&quot;&gt;&lt;/div&gt;
&lt;figcaption&gt;A blob&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;Nils Binder made a tool named &lt;a href=&quot;https://9elements.github.io/fancy-border-radius/&quot;&gt;&lt;cite&gt;Fancy-Border-Radius&lt;/cite&gt;&lt;/a&gt;, to easily create such blobs. Nils not only wrote the tool, but also a great article, titled &lt;a href=&quot;https://9elements.com/blog/css-border-radius-can-do-that/&quot;&gt;&lt;cite&gt;CSS Border-Radius Can Do That?&lt;/cite&gt;&lt;/a&gt;. From that text I learned it is important for the radii percentage values to add up to 100% for each of the four sides of the shape, to produce an organic looking blob with no straight lines! Due to the nature of the radius property, the shape is limited to be convex, and never concave, but it can have a border and a shadow.&lt;/p&gt;
&lt;p&gt;More complex geometric shapes, which include concave appearances, can be produced with the CSS &lt;code&gt;shape()&lt;/code&gt; function. &lt;code&gt;shape()&lt;/code&gt; is in June 2025 not supported by Firefox, and, according to &lt;a href=&quot;https://caniuse.com/?search=shape()&quot;&gt;caniuse.com&lt;/a&gt;, is globaly available to only 76.21 % of users, which means you likely cannot use it in production.&lt;/p&gt;
&lt;p&gt;As Juan points it out, &lt;code&gt;shape()&lt;/code&gt; uses a verbal version of SVG´s &lt;code&gt;path&lt;/code&gt; syntax alongside the &lt;code&gt;clip-path&lt;/code&gt; property to cut elements into any shape we want. While the geometric shapes can draw any shape an SVG can draw, they are limited to not have a border nor a shadow, but they do support gradient coloration! It is even possible to generate CSS shapes out of SVG´s. Temani Afif has written a &lt;a href=&quot;https://css-generators.com/svg-to-css/&quot;&gt;&lt;cite&gt;SVG to CSS Shape Converter&lt;/cite&gt;&lt;/a&gt; to do this.&lt;/p&gt;
&lt;p&gt;Juan mentions the following &lt;code&gt;shape()&lt;/code&gt; resources in his article: &lt;a href=&quot;https://css-tricks.com/almanac/functions/s/shape/&quot;&gt;&lt;cite&gt;CSS Almanac shape()&lt;/cite&gt;&lt;/a&gt;, by John Rea, &lt;a href=&quot;https://css-tricks.com/better-css-shapes-using-shape-part-1-lines-and-arcs/&quot;&gt;&lt;cite&gt;
Better CSS Shapes Using shape()&lt;/cite&gt;&lt;/a&gt;, by Temani Afif, and &lt;a href=&quot;https://frontendmasters.com/blog/creating-blob-shapes-using-clip-path-shape/&quot;&gt;&lt;cite&gt;Creating Blob Shapes using clip-path: shape()&lt;/cite&gt;&lt;/a&gt;, also by Temani Afif.&lt;/p&gt;

    <hr/><p><strong><a href="">Blobs</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-06-30-blobs/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>A hole dug in the ground, a spider, a bug, and a snail</title>
    <link href="https://ulfschneider.io/2025-06-27-spider-bug-snail/" />
    <updated>2025-06-27T05:59:11Z</updated>
    <id>https://ulfschneider.io/2025-06-27-spider-bug-snail/</id>
    <content type="html"> &lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/11B3ekHc52-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;675&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/11B3ekHc52-200.webp 200w, https://ulfschneider.io/img/11B3ekHc52-675.webp 675w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
    <hr/><p><strong><a href="">A hole dug in the ground, a spider, a bug, and a snail</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-06-27-spider-bug-snail/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Sea animals</title>
    <link href="https://ulfschneider.io/2025-06-27-sea-animlas/" />
    <updated>2025-06-27T05:58:12Z</updated>
    <id>https://ulfschneider.io/2025-06-27-sea-animlas/</id>
    <content type="html"> &lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/PUqK5vBXti-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/PUqK5vBXti-200.webp 200w, https://ulfschneider.io/img/PUqK5vBXti-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
    <hr/><p><strong><a href="">Sea animals</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-06-27-sea-animlas/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Global DNS propagation checker</title>
    <link href="https://ulfschneider.io/2025-06-17-whatsmydns/" />
    <updated>2025-06-17T04:53:16Z</updated>
    <id>https://ulfschneider.io/2025-06-17-whatsmydns/</id>
    <content type="html"> &lt;p&gt;&lt;a href=&quot;https://whatsmydns.net&quot;&gt;&lt;cite&gt;whatsmydns.net&lt;/cite&gt;&lt;/a&gt; allows to check global DNS record propagation.&lt;/p&gt;

    <hr/><p><strong><a href="">Global DNS propagation checker</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-06-17-whatsmydns/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>That was bad luck</title>
    <link href="https://ulfschneider.io/2025-06-16-poor-weather/" />
    <updated>2025-06-15T11:28:55Z</updated>
    <id>https://ulfschneider.io/2025-06-16-poor-weather/</id>
    <content type="html"> &lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/ZyLLZ4N1yE-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/ZyLLZ4N1yE-200.webp 200w, https://ulfschneider.io/img/ZyLLZ4N1yE-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Today I planned to ride the 150 km route at the Elbracht Cup in Herzebrock. I went there and registered for the event, but the weather was so bad that I couldn´t bring myself to start into the ride. I made a tough decision and headed back home. :-(&lt;/figcaption&gt;
&lt;/figure&gt;
    <hr/><p><strong><a href="">That was bad luck</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-06-16-poor-weather/">Reply via email</a></p></content>
  </entry>
  <entry>
    <title>Riding from Paderborn to Zingst</title>
    <link href="https://ulfschneider.io/2025-06-09-paderborn-zingst/" />
    <updated>2025-09-14T07:50:43Z</updated>
    <id>https://ulfschneider.io/2025-06-09-paderborn-zingst/</id>
    <content type="html">&lt;p&gt;From 9th to 12th of May I took a solo ride from Paderborn to Zingst.  This is a photo essay of the ride.&lt;/p&gt;
 &lt;div class=&quot;table-of-contents&quot;&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#the-route&quot;&gt;The route&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#day-1%2C-paderborn-to-landesbergen&quot;&gt;Day 1, Paderborn to Landesbergen&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#day-2%2C-landesbergen-to-bad-bevensen&quot;&gt;Day 2, Landesbergen to Bad Bevensen&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#day-3%2C-bad-bevensen-to-wismar&quot;&gt;Day 3, Bad Bevensen to Wismar&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#day-4%2C-wismar-to-zingst&quot;&gt;Day 4, Wismar to Zingst&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#equipment&quot;&gt;Equipment&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#packing-list&quot;&gt;Packing list&lt;/a&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#route&quot;&gt;Route&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#packing-system&quot;&gt;Packing system&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#charging&quot;&gt;Charging&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#bike-tech&quot;&gt;Bike tech&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#eating-and-drinking&quot;&gt;Eating and drinking&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#clothing&quot;&gt;Clothing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#personal&quot;&gt;Personal&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://ulfschneider.io/2025-06-09-paderborn-zingst/#id-and-money&quot;&gt;ID and money&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;
&lt;h2 id=&quot;the-route&quot; tabindex=&quot;-1&quot;&gt;The route&lt;/h2&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/ZzVXVVLb_C-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1600&quot; height=&quot;1400&quot; srcset=&quot;https://ulfschneider.io/img/ZzVXVVLb_C-200.webp 200w, https://ulfschneider.io/img/ZzVXVVLb_C-1600.webp 1600w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;My route from Paderborn to Zingst, which I planned with komoot collections. My collection is named &lt;a href=&quot;https://www.komoot.com/de-de/collection/3434196/-paderborn-zingst&quot;&gt;Paderborn – Zingst&lt;/a&gt;, of course. I divided the route into the four following stages. The figures represent my measured Garmin data.
&lt;ol&gt;
&lt;li&gt;Paderborn to Landesbergen, 127 km, 876 m up&lt;/li&gt;
&lt;li&gt;Landesbergen to Bad Bevensen, 150 km, 546 m up&lt;/li&gt;
&lt;li&gt;Bad Bevensen to Wismar, 155 km, 804 m up&lt;/li&gt;
&lt;li&gt;Wismar to Zingst, 132 km, 537 m up&lt;/li&gt;
&lt;/ol&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;day-1%2C-paderborn-to-landesbergen&quot; tabindex=&quot;-1&quot;&gt;Day 1, Paderborn to Landesbergen&lt;/h2&gt;
&lt;p&gt;The route starts in Paderborn and goes through Detmold, Lemgo, and Minden, ending in Landesbergen. My initial plan is to ride 10 km further to Nienburg, but the Mühlengasthof Landesbergen looks inviting to stay for the night, therefore I cut off the route at 127 km for the day.&lt;/p&gt;
&lt;figure&gt;
&lt;figcaption&gt;The ride kicks off&lt;/figcaption&gt;
&lt;figure class=&quot;md:split&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/erZ11ix36b-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/erZ11ix36b-200.webp 200w, https://ulfschneider.io/img/erZ11ix36b-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/CiGoGUuPpP-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/CiGoGUuPpP-200.webp 200w, https://ulfschneider.io/img/CiGoGUuPpP-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/ndfMRZgUjC-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/ndfMRZgUjC-200.webp 200w, https://ulfschneider.io/img/ndfMRZgUjC-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;A boulevard in Detmold&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;figcaption&gt;Impressions of Detmold&lt;/figcaption&gt;
&lt;img src=&quot;https://ulfschneider.io/img/NLMNia-8wV-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/NLMNia-8wV-200.webp 200w, https://ulfschneider.io/img/NLMNia-8wV-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/zejxKeyNBT-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;675&quot; srcset=&quot;https://ulfschneider.io/img/zejxKeyNBT-200.webp 200w, https://ulfschneider.io/img/zejxKeyNBT-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;figcaption&gt;The first break of the day happens to be in Kirchheide&lt;/figcaption&gt;
&lt;figure class=&quot;md:split&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/Z0uib-44Hx-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/Z0uib-44Hx-200.webp 200w, https://ulfschneider.io/img/Z0uib-44Hx-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/r0Za3UwMFL-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/r0Za3UwMFL-200.webp 200w, https://ulfschneider.io/img/r0Za3UwMFL-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;figcaption&gt;In Vlotho I ride through an underpass, it´s concrete walls sprayed with graffitis. Unexpectedly a cycling path reveals itself, allowing me to ride along the Weser river.&lt;/figcaption&gt;
&lt;figure class=&quot;md:split&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/boJs1INEYF-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/boJs1INEYF-200.webp 200w, https://ulfschneider.io/img/boJs1INEYF-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/vpxvM8OFO1-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;675&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/vpxvM8OFO1-200.webp 200w, https://ulfschneider.io/img/vpxvM8OFO1-675.webp 675w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/BaswcMIr4G-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;675&quot; srcset=&quot;https://ulfschneider.io/img/BaswcMIr4G-200.webp 200w, https://ulfschneider.io/img/BaswcMIr4G-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;The Weser river&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;figcaption&gt;Arrival at the Mühlengasthof Landesbergen, my destination for the first day of the journey. I recommend the Mühlengasthof for a stay. The rooms are comfortable, the food is good, and the location is calm and friendly. I enjoy having a lively conversation with one of the two owners. During the breakfast of the next day I meet two other cyclists and we talk about bike riding, how the bike must conform to the rider and how the rider has to adapt to the demands of a multi-day bike journey.&lt;/figcaption&gt;
&lt;figure class=&quot;md:split&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/Bv0TsjN-C7-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/Bv0TsjN-C7-200.webp 200w, https://ulfschneider.io/img/Bv0TsjN-C7-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/UOJw0SzcI9-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/UOJw0SzcI9-200.webp 200w, https://ulfschneider.io/img/UOJw0SzcI9-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;day-2%2C-landesbergen-to-bad-bevensen&quot; tabindex=&quot;-1&quot;&gt;Day 2, Landesbergen to Bad Bevensen&lt;/h2&gt;
&lt;p&gt;The second day takes me eastward across long stretches of the Southern Heath, below of the Lüneburger Heath. I enjoy riding over the sandy soil through the rather remote landscape. Destination for the day is Bad Bevensen.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/G0QZ43jGUi-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;675&quot; srcset=&quot;https://ulfschneider.io/img/G0QZ43jGUi-200.webp 200w, https://ulfschneider.io/img/G0QZ43jGUi-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Crossing highway A7. I´m glad I´m not stuck in one of those cars.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/G4YVHPT2jf-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/G4YVHPT2jf-200.webp 200w, https://ulfschneider.io/img/G4YVHPT2jf-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;The sandy pathways of the Southern Heath&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;figcaption&gt;Impressions&lt;/figcaption&gt;
&lt;img src=&quot;https://ulfschneider.io/img/t84gGRVH2D-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/t84gGRVH2D-200.webp 200w, https://ulfschneider.io/img/t84gGRVH2D-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/siL8gqm_pq-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/siL8gqm_pq-200.webp 200w, https://ulfschneider.io/img/siL8gqm_pq-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/M6xh8W7L6D-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;675&quot; srcset=&quot;https://ulfschneider.io/img/M6xh8W7L6D-200.webp 200w, https://ulfschneider.io/img/M6xh8W7L6D-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/fGHd5JTKgz-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/fGHd5JTKgz-200.webp 200w, https://ulfschneider.io/img/fGHd5JTKgz-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;The gate is intended for wildlife protection, and you are allowed to open it to follow your route. Do not forget to close it behind you.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;figcaption&gt;The area is so remote that it is (or has been) used as a military training ground&lt;/figcaption&gt;
&lt;figure class=&quot;md:split&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/k8rauQA6Kn-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/k8rauQA6Kn-200.webp 200w, https://ulfschneider.io/img/k8rauQA6Kn-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/-tlDuOdJTP-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/-tlDuOdJTP-200.webp 200w, https://ulfschneider.io/img/-tlDuOdJTP-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/wj2vyVtiER-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/wj2vyVtiER-200.webp 200w, https://ulfschneider.io/img/wj2vyVtiER-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;The fine dust of sand settles on everything – for the water bottles it means I always have to spit out the first sip.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;md:split&quot;&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/gkj4KACEi5-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/gkj4KACEi5-200.webp 200w, https://ulfschneider.io/img/gkj4KACEi5-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;One last break on the second day&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/gPgNmrSoPc-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/gPgNmrSoPc-200.webp 200w, https://ulfschneider.io/img/gPgNmrSoPc-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;I even manage to escape Darth Vader&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/GSG9Kaac5b-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/GSG9Kaac5b-200.webp 200w, https://ulfschneider.io/img/GSG9Kaac5b-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;My guesthouse for the night in Bad Bevensen is the &lt;em&gt;Pension Elfi&lt;/em&gt;. The breakfast is good, but the bike has to stand overnight in the backyard. Unfortunately there is nothing solid to which I could fasten it with the lock I carried with me.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;day-3%2C-bad-bevensen-to-wismar&quot; tabindex=&quot;-1&quot;&gt;Day 3, Bad Bevensen to Wismar&lt;/h2&gt;
&lt;p&gt;The third day brings me north, through Naturpark Wendland, Dannenberg, Ludwigslust, then Schwerin, ending in Wismar. I feel the route is long and not varied, with the exception of the part from Schwerin to Wismar, which goes along Lake Schwerin and is beautiful.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/cXl_-HxBVH-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/cXl_-HxBVH-200.webp 200w, https://ulfschneider.io/img/cXl_-HxBVH-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Every day of the ride: Start with a breakfast and eat as much as possible.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;figcaption&gt;Traces of human life along the way. It moves me to see how people shape their surroundings by creating buildings that will change and decay over time. Whoever built the Schwerin Castle is not alive anymore.   The people who created the bus shelter to make life easier for their fellow human beings, they had families, raised children, built houses themselves, and it could be they are no longer with us. Still, someone who will never know the builder, can make use of what that person created.&lt;/figcaption&gt;
&lt;figure class=&quot;md:split&quot;&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/9h9WmGTK56-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/9h9WmGTK56-200.webp 200w, https://ulfschneider.io/img/9h9WmGTK56-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Bus shelter&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/wuJN2mlKV7-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/wuJN2mlKV7-200.webp 200w, https://ulfschneider.io/img/wuJN2mlKV7-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Abandoned house&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/i2rVFbu_Yu-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/i2rVFbu_Yu-200.webp 200w, https://ulfschneider.io/img/i2rVFbu_Yu-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Wall painting on a production facility&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;md:split&quot;&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/bVfRzTNZYU-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/bVfRzTNZYU-200.webp 200w, https://ulfschneider.io/img/bVfRzTNZYU-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Church in Ludwigslust. The imposing presence makes me feel uneasy. The words of Otl Aicher come to my mind, who said when buildings become so monumental that a door becomes a portal, it doesn´t serve the human, because a portal is difficult to use (it is hard to open and close). It makes the individual feel small and insignificant. It serves the ones in power.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/Fy-7X2SVNP-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/Fy-7X2SVNP-200.webp 200w, https://ulfschneider.io/img/Fy-7X2SVNP-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;House in Ludwigslust&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/8zaFKXdzUK-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/8zaFKXdzUK-200.webp 200w, https://ulfschneider.io/img/8zaFKXdzUK-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Industrial building in Ludwigslust&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/_BbUqiIuiY-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/_BbUqiIuiY-200.webp 200w, https://ulfschneider.io/img/_BbUqiIuiY-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Overpass above the railway tracks. The elevator to take me up was working fine, but the one on the other side was out of order. It´s not an unusual situation when you’re using the facilities of the Deutsche Bahn.
&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/TRiqZ6ksYx-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/TRiqZ6ksYx-200.webp 200w, https://ulfschneider.io/img/TRiqZ6ksYx-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Schwerin Castle&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/lmlLn9QpjW-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/lmlLn9QpjW-200.webp 200w, https://ulfschneider.io/img/lmlLn9QpjW-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;The people living in Schwerin are protesting for safer bicycle lanes&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/Ag7H3W0Ylg-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/Ag7H3W0Ylg-200.webp 200w, https://ulfschneider.io/img/Ag7H3W0Ylg-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Having a break at the Lake Schwerin&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;figcaption&gt;Arriving in Wismar, I stay in Fründts hotel, which  I can recommend. It´s well organized, they have a lockable bike shed and the breakfast is excellent.&lt;/figcaption&gt;
&lt;figure class=&quot;md:split&quot;&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/trTpcN5FxV-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/trTpcN5FxV-200.webp 200w, https://ulfschneider.io/img/trTpcN5FxV-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;The staircase inside of the hotel&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/L4OMuufV4i-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/L4OMuufV4i-200.webp 200w, https://ulfschneider.io/img/L4OMuufV4i-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;The way to the bike shed at the backyard of the hotel&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/figure&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/yOOo-ugvjp-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/yOOo-ugvjp-200.webp 200w, https://ulfschneider.io/img/yOOo-ugvjp-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;I had dinner at the tavern &lt;em&gt;Nikolaiblick&lt;/em&gt;, which has its name from the Nikolai church that is near by. I found it to be a good place for ending the day.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;figcaption&gt;The beautiful streets of Wismar. Try to ignore the cars. Though Wismar was bombed during world war 2 because of its Dornier aircraft factory and the naval infrastructure, large parts of the historic old town were spared from destruction. During the time prisoners of war and  women and men from countries occupied by Germany were forced to perform armaments-related labor in the railcar and wagon factory and the Dornier aircraft works.&lt;/figcaption&gt;
&lt;img src=&quot;https://ulfschneider.io/img/wmLYX7N4Ew-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/wmLYX7N4Ew-200.webp 200w, https://ulfschneider.io/img/wmLYX7N4Ew-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/IJzyfHKpmD-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/IJzyfHKpmD-200.webp 200w, https://ulfschneider.io/img/IJzyfHKpmD-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/cU6Tij9THB-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/cU6Tij9THB-200.webp 200w, https://ulfschneider.io/img/cU6Tij9THB-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;day-4%2C-wismar-to-zingst&quot; tabindex=&quot;-1&quot;&gt;Day 4, Wismar to Zingst&lt;/h2&gt;
&lt;p&gt;The last day of this journey starts on a chilly but sunny morning in Wismar. From there I ride in eastern direction along the coast of the baltic sea, passing through Kühlungsborn, Heiligendamm, Warnemünde (where I make a quick ferry crossing), then riding further through the Ribnitzer Moor, and finally arriving in Zingst.&lt;/p&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/-CM5kvlZuP-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/-CM5kvlZuP-200.webp 200w, https://ulfschneider.io/img/-CM5kvlZuP-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Because of the varying road surface quality it really makes sense to do these kind of trips with a gravel bike&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/3of3FYbMXP-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;675&quot; srcset=&quot;https://ulfschneider.io/img/3of3FYbMXP-200.webp 200w, https://ulfschneider.io/img/3of3FYbMXP-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Yellow makes happy&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/WJV6F2-ut7-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;675&quot; srcset=&quot;https://ulfschneider.io/img/WJV6F2-ut7-200.webp 200w, https://ulfschneider.io/img/WJV6F2-ut7-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Kühlungsborn&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/IDwVw1ZYHc-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/IDwVw1ZYHc-200.webp 200w, https://ulfschneider.io/img/IDwVw1ZYHc-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;The coastline&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;md:split&quot;&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/GzllAec5hx-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/GzllAec5hx-200.webp 200w, https://ulfschneider.io/img/GzllAec5hx-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;Warnemünde&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/_Hp8v8hHKA-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/_Hp8v8hHKA-200.webp 200w, https://ulfschneider.io/img/_Hp8v8hHKA-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;The ferry. A cruise liner in the background.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;figcaption&gt;Near Ahrenshoop&lt;/figcaption&gt;
&lt;img src=&quot;https://ulfschneider.io/img/4HOubxosgz-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/4HOubxosgz-200.webp 200w, https://ulfschneider.io/img/4HOubxosgz-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;img src=&quot;https://ulfschneider.io/img/j5vYc6jYZO-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;675&quot; srcset=&quot;https://ulfschneider.io/img/j5vYc6jYZO-200.webp 200w, https://ulfschneider.io/img/j5vYc6jYZO-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://ulfschneider.io/img/1kWEJEOS7w-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;1200&quot; height=&quot;900&quot; srcset=&quot;https://ulfschneider.io/img/1kWEJEOS7w-200.webp 200w, https://ulfschneider.io/img/1kWEJEOS7w-1200.webp 1200w&quot; sizes=&quot;100vw&quot;&gt;
&lt;figcaption&gt;The baltic sea in Zingst. I´m sorry I didn´t take a photo of the actual arrival – I forgot it because my son Emil was already waiting there and welcoming me, asking about the journey and picking me up to show me the facilities. Therefore the journey ends with this image.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;figcaption&gt;P.S. June 14th: Actually there is a picture of my arrival. It´s together with Emil and my wife took it. ❤️&lt;/figcaption&gt;
&lt;img src=&quot;https://ulfschneider.io/img/EtEn6l_sDp-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/EtEn6l_sDp-200.webp 200w, https://ulfschneider.io/img/EtEn6l_sDp-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;equipment&quot; tabindex=&quot;-1&quot;&gt;Equipment&lt;/h2&gt;
&lt;p&gt;A list of selected pieces of equipment that worked pretty well during the ride.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fairlight Secan 3.0:&lt;/strong&gt; You might have spotted the bike in the pictures. It’s a steel frame gravel bike that I’ve been riding since the start of this year and I find it super efficient as well as practical. I´m a Fairlight fan for several years and this is my second Secan (with a 56 R frame). The bike is especially great for these kinds of rides because it’s sturdy and has mounting points to attach mud guards or packs. I ride a mechanical Shimano GRX 820 group – no charging required, flawless functionality, always prepared.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Specialized Phenom Expert saddle:&lt;/strong&gt; A great saddle. No seating issues whatsoever. It´s claimed to be a mountain bike saddle, but you can as well ride it on gravel and road race bikes, it´s so versatile.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ortlieb Fork-Packs:&lt;/strong&gt; Whenever I have to pack something on this bike, it starts with the Ortlieb Fork-Packs. I like their minimal impact on the bike handling, which is because they are so deep on the front and because the storage capacity is limited to 5.8 l and 3 kg, each. They have a quick release mechanism for attaching them to the bike as well as detaching, which is overly practical when arriving somewhere to stay for the night. Because it´s Ortlieb you know they keep your items dry when it´s raining.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailfin Pannier Rack &lt;span id=&quot;cookware-1&quot; class=&quot;cooklang-cookware&quot;&gt;&lt;/span&gt; Tailfin Aero Pack Cargo:&lt;/strong&gt; For the current trip I had to pack more than what fits into the Fork-Packs. I ended up to solve this with the most expensive solution, a Tailfin Pannier Rack with an Aero Pack Cargo. I can assure you, when you are willing to pay the money you get an excellent rear packing system that is designed through and through. The rack is light and strong (I used the aluminium version), and it holds the attached pack without swaying by any means. The rack stands on a special thru axle so that it does not use the bike frame for taking the load. It is attached with a quick release system but I did not use that during the journey. The rolltop pack, similar to the Ortlieb Fork-Packs, can be attached and detached to the rack with another quick release system, which I used every day when arriving and when starting to ride. The rolltop closing mechanism of the pack itself is flexible and can be used with gloves. The expandable outer pockets allow to carry small or compressible items you want to have in short reach. The closing-straps are replaceable, as well as some parts of the rack. I cannot say anything about the waterproofness, because it did not rain during my journey, but I expect the pack is fine in this area too. I found this system to be very practical.&lt;figure&gt;
&lt;figure&gt;&lt;img src=&quot;https://ulfschneider.io/img/f05UsERk_L-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/f05UsERk_L-200.webp 200w, https://ulfschneider.io/img/f05UsERk_L-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;&lt;figcaption&gt;The Tailfin Rack stands on the thru axle and is attached with a quick release mechanism&lt;/figcaption&gt;&lt;/figure&gt;
&lt;figure&gt;&lt;img src=&quot;https://ulfschneider.io/img/9b6Z41z5TZ-200.webp&quot; alt=&quot;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; width=&quot;900&quot; height=&quot;1200&quot; srcset=&quot;https://ulfschneider.io/img/9b6Z41z5TZ-200.webp 200w, https://ulfschneider.io/img/9b6Z41z5TZ-900.webp 900w&quot; sizes=&quot;100vw&quot;&gt;&lt;figcaption&gt;The rolltop closure of the Aero Pack Cargo at first doesn´t look fancy, but it works exceptionally well. You can adjust the volume of the pack and fixate gear under the crossing strap.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;aerycs GCX Terra 40 wheels:&lt;/strong&gt;  They are hand-built near Hamburg. I have them with the DT-Swiss 350 hubs, which I think are excellent and reliable work horse hubs. The wheels are well built and I found they ride lovely.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;packing-list&quot; tabindex=&quot;-1&quot;&gt;Packing list&lt;/h2&gt;
&lt;h3 id=&quot;route&quot; tabindex=&quot;-1&quot;&gt;Route&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The routes for each day, downloaded to the Garmin Edge bike computer&lt;/li&gt;
&lt;li&gt;I did bookings for the first two nights in advance and the booking for the third night during the ride via booking.com.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;packing-system&quot; tabindex=&quot;-1&quot;&gt;Packing system&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Tailfin Pannier Rack&lt;/li&gt;
&lt;li&gt;Tailfin Aero Pack Cargo (18 l, plus 3 l pockets)&lt;/li&gt;
&lt;li&gt;Ortlieb Fork-Packs (5.8 l each)&lt;/li&gt;
&lt;li&gt;Foldable mini backpack for shopping food, if required. Did not use it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;charging&quot; tabindex=&quot;-1&quot;&gt;Charging&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Garmin 530 Edge bike computer (Micro USB)&lt;/li&gt;
&lt;li&gt;Anker charging device with an USB-A and USB-C slot&lt;/li&gt;
&lt;li&gt;POLAR Plus Verity Sense heart rate sensor (USB-A adapter)&lt;/li&gt;
&lt;li&gt;Mobile phone (USB-C)&lt;/li&gt;
&lt;li&gt;Front light Lupine SL Mono (USB-C)&lt;/li&gt;
&lt;li&gt;Rear light Lupine Redlight (Micro USB)&lt;/li&gt;
&lt;li&gt;Charging cables:
&lt;ul&gt;
&lt;li&gt;USB-C to USB-C for the phone and the front light&lt;/li&gt;
&lt;li&gt;USB-A to Micro USB for Garmin Edge and rear light&lt;/li&gt;
&lt;li&gt;Polar USB-A loading adapter for the Verity Sense heart rate sensor&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;bike-tech&quot; tabindex=&quot;-1&quot;&gt;Bike tech&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;2 spare inner tubes, butyl&lt;/li&gt;
&lt;li&gt;A spare shifting cable&lt;/li&gt;
&lt;li&gt;A pair of nitrile gloves&lt;/li&gt;
&lt;li&gt;Cable ties&lt;/li&gt;
&lt;li&gt;Chain oil (Oil of Rohloff)&lt;/li&gt;
&lt;li&gt;Chain lock&lt;/li&gt;
&lt;li&gt;2 sets of Shimano brakepads&lt;/li&gt;
&lt;li&gt;Tire puncture repair kit with valve core and valve core removal tool&lt;/li&gt;
&lt;li&gt;Tire levers&lt;/li&gt;
&lt;li&gt;Minitool (Topeak Mini 18+)&lt;/li&gt;
&lt;li&gt;Air pump (Topeak Racerocket)&lt;/li&gt;
&lt;li&gt;Bike lock with key (&lt;a href=&quot;https://tex-lock.com/product/tex-lock-eyelet/&quot;&gt;Texlock eyelet, size M&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;eating-and-drinking&quot; tabindex=&quot;-1&quot;&gt;Eating and drinking&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;2 steel water bottles (Klean Kanteen)&lt;/li&gt;
&lt;li&gt;Small pocket knife (Leatherman Skeletool KB)&lt;/li&gt;
&lt;li&gt;Mountain mug (Berghaferl)&lt;/li&gt;
&lt;li&gt;Spork (Göffel)&lt;/li&gt;
&lt;li&gt;Muesli bars&lt;/li&gt;
&lt;li&gt;Chocolate bars&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;clothing&quot; tabindex=&quot;-1&quot;&gt;Clothing&lt;/h3&gt;
&lt;h4 id=&quot;on-the-bike&quot; tabindex=&quot;-1&quot;&gt;On the bike&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Bike shoes&lt;/li&gt;
&lt;li&gt;Helmet&lt;/li&gt;
&lt;li&gt;2 bike shorts&lt;/li&gt;
&lt;li&gt;Legwarmers&lt;/li&gt;
&lt;li&gt;2 jerseys&lt;/li&gt;
&lt;li&gt;Armwarmers&lt;/li&gt;
&lt;li&gt;2 base layer shirts&lt;/li&gt;
&lt;li&gt;Gilet&lt;/li&gt;
&lt;li&gt;Neck gaiter&lt;/li&gt;
&lt;li&gt;Lightweight wool beanie&lt;/li&gt;
&lt;li&gt;2 pairs of wool socks&lt;/li&gt;
&lt;li&gt;Rain protection trousers&lt;/li&gt;
&lt;li&gt;Rain protection jacket&lt;/li&gt;
&lt;li&gt;Rain shoe covers&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;off-the-bike&quot; tabindex=&quot;-1&quot;&gt;Off the bike&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;2 pairs of underpants&lt;/li&gt;
&lt;li&gt;Long-sleeved wool shirt (can be used on the bike, if required)&lt;/li&gt;
&lt;li&gt;Short-sleeved wool shirt (can be used on the bike, if required)&lt;/li&gt;
&lt;li&gt;Trousers with belt&lt;/li&gt;
&lt;li&gt;Shorts (can also be used for swimming)&lt;/li&gt;
&lt;li&gt;Thin isolating jacket (can be used on the bike, if required)&lt;/li&gt;
&lt;li&gt;Minimalist shoes&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;personal&quot; tabindex=&quot;-1&quot;&gt;Personal&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Tooth brush&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://denttabs.de/&quot;&gt;Denttabs&lt;/a&gt; instead of toothpaste&lt;/li&gt;
&lt;li&gt;Dental floss&lt;/li&gt;
&lt;li&gt;Glasses with case&lt;/li&gt;
&lt;li&gt;Sun glasses&lt;/li&gt;
&lt;li&gt;Shaving soap&lt;/li&gt;
&lt;li&gt;Razor blades&lt;/li&gt;
&lt;li&gt;Shaving razor&lt;/li&gt;
&lt;li&gt;A piece of soap (I use the same piece for my hair, the body, and the laundry) with &lt;a href=&quot;https://ichbinpur.de/collections/shop/products/seifentasche-mit-reissverschluss&quot;&gt;transport packaging&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Foldable washing bowl&lt;/li&gt;
&lt;li&gt;Clothespins&lt;/li&gt;
&lt;li&gt;Thin cord, e.g. to be used as clothesline&lt;/li&gt;
&lt;li&gt;3 packs of paper tissues&lt;/li&gt;
&lt;li&gt;Nail scissors, nail clipper&lt;/li&gt;
&lt;li&gt;Sun protection&lt;/li&gt;
&lt;li&gt;Emergency blanket&lt;/li&gt;
&lt;li&gt;Band-aid&lt;/li&gt;
&lt;li&gt;Tick removal card&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;id-and-money&quot; tabindex=&quot;-1&quot;&gt;ID and money&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ID card&lt;/li&gt;
&lt;li&gt;Health insurance card&lt;/li&gt;
&lt;li&gt;Debit/credit card&lt;/li&gt;
&lt;li&gt;Cash&lt;/li&gt;
&lt;li&gt;House key, bike lock key&lt;/li&gt;
&lt;/ul&gt;

    <hr/><p><strong><a href="">Riding from Paderborn to Zingst</a></strong> appeared on <a href="https://ulfschneider.io">ulfschneider.io</a>.</p><p><a href="mailto:mail@ulfschneider.io?body=https://ulfschneider.io/2025-06-09-paderborn-zingst/">Reply via email</a></p></content>
  </entry>
</feed>
