<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom">
  <title>exozy.me RSS Feed</title>
  <id>https://feeds.exozy.me/rss.xml</id>
  <updated>2026-04-15T12:02:53Z</updated>
  <subtitle>exozyme members&#39; RSS feeds</subtitle>
  <link href="https://feeds.exozy.me/rss.xml"></link>
  <author>
    <name>Ersei</name>
    <email>contact+exozyme@ersei.net</email>
  </author>
  <entry>
    <title>Webrings Galore!</title>
    <updated>2026-04-11T06:15:50Z</updated>
    <id>https://austinhuang.me/webrings-galore.html</id>
    <link href="https://austinhuang.me/webrings-galore.html" rel="alternate"></link>
    <summary type="html">Adding an excessive amount of webrings, some observations on others&#39; sites, and others.</summary>
    <author>
      <name>Austin Huang</name>
    </author>
  </entry>
  <entry>
    <title>Awesome Ametrine Adventures</title>
    <updated>2026-04-06T00:00:00Z</updated>
    <id>https://daudix.one/blog/year-of-ametrine/</id>
    <content type="html">&lt;p&gt;Greeting and salutations, and welcome back to first half&lt;sup class=&#34;footnote-reference&#34; id=&#34;fr-1-1&#34;&gt;&lt;a href=&#34;https://daudix.one/blog/year-of-ametrine/#fn-1&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; of a new episode of &lt;a href=&#34;https://daudix.one/tags/devlog&#34;&gt;#devlog&lt;/a&gt;, a show where I talk about changes to this website and projects related to it! In this episode, we have a &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://duckquill.daudix.one&#34;&gt;Duckquill&lt;/a&gt; successor, a couple enigmas I had to overcome in the process, and some &lt;em&gt;awful&lt;/em&gt; puns. As always, while this post will likely make the most sense for someone who does web development, I tried to keep it entertaining to non-developer readers as well.&lt;/p&gt;&#xA;&lt;p&gt;Without further ado,&lt;/p&gt;&#xA;&lt;h2 id=&#34;duckquill-succe-what&#34;&gt;Duckquill Succe- What&lt;/h2&gt;&#xA;&lt;p&gt;As I’ve &lt;a href=&#34;https://daudix.one/blog/new-era/&#34;&gt;mentioned earlier&lt;/a&gt;, after &lt;a href=&#34;https://daudix.one/blog/decoupling-from-duckquill/&#34;&gt;decoupling from my Duckquill theme&lt;/a&gt; I have, uh, turned the hard fork back into a theme. A new one, called Ametrine. &lt;small&gt;(oh my God why am I like this why can’t I just stand firmly on my decisions)&lt;/small&gt;&lt;/p&gt;&#xA;&lt;p&gt;The name comes from a certain—quite exquisite—variation of quartz of the same name, which is a mix of citrine (yellow quartz) and amethyst (purple quartz) formed when the crystal grows in an area with temperature difference (although most commercially available ametrines are artificial). &lt;small&gt;(bro really memorized and summarized the Wikipedia article on Ametrine 💀)&lt;/small&gt;&lt;/p&gt;&#xA;&lt;p&gt;The reasoning behind this name is simple: I love &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://quartz.jzhao.xyz/&#34;&gt;Quartz&lt;/a&gt; static site generator, from which I borrowed a lot of layout-related design choices early on.&lt;/p&gt;&#xA;&lt;p&gt;Initially it was supposed to be called Amethyst, since you know, purple quartz, and “daudix x purple” is a cliche at this point, but my buddy &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://gxbs.dev&#34;&gt;Gabs&lt;/a&gt; have already claimed this name for his own theme, so I did what I often do: visited a Wikipedia page on various quartz variations and found out about the existence of ametrine! In hindsight I love this name much &lt;em&gt;much&lt;/em&gt; more than Amethyst, so thanks Gabs for claiming the name.&lt;/p&gt;&#xA;&lt;p&gt;The development accelerated during &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://highseas.hackclub.com&#34;&gt;High Seas&lt;/a&gt;, since I wanted to participate in it with it as my project, and it was pretty darn successful! I earned around 250 doubloons, with which I got myself Mini Blåhaj, a couple of piles of stickers, and after shipping an update to Ametrine I got some additional doubloons and got Hack Club socks. It’s been a year since and I still haven’t got my prizes. Didn’t expect any other outcome, but still, kinda bitter.&lt;/p&gt;&#xA;&lt;p&gt;Anyhow, I won’t go over all of the differences between Duckquill, the limbo state between it and Ametrine, and it itself since there’s a shipload and a bit of them, but here are some of the technical challenges I had to overcome and some interesting-ish tricks and crimes I came up with or ended up using:&lt;/p&gt;&#xA;&lt;h2 id=&#34;css-hack-a-buckery&#34;&gt;CSS Hack-A-Buckery&lt;/h2&gt;&#xA;&lt;p&gt;I wouldn’t be myself if I didn’t commit a bunch of CSS crimes during development, here are some of my favorite ones.&lt;/p&gt;&#xA;&lt;h3 id=&#34;dynamic-palette&#34;&gt;Dynamic Palette&lt;/h3&gt;&#xA;&lt;p&gt;Duckquill had a very simple color palette, mostly consisting of variations of white and black with different opacity. However, page background was a very light/dark variation of the user-defined accent color, which made the seemingly boring palette more fun. That background color was calculated using modern CSS feature called &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color_value/color-mix&#34;&gt;&lt;code&gt;color-mix()&lt;/code&gt;&lt;/a&gt;. As the name suggests, it allows to mix two colors with different proportions.&lt;/p&gt;&#xA;&lt;p&gt;This feature is Baseline (supported in all major browsers) since May 2023, but certain operating system called iOS doesn’t allow its users to update the built-in browser—Safari—without also updating iOS itself, which means users of phones with pre-2023 iOS versions—such as iPhone 7 and lower—are screwed. You might think that installing Firefox or Chrome would provide an up-to-date browser and alternative web rendering engine, but you’d be all so wrong; on iOS &lt;em&gt;every single browser&lt;/em&gt; is Safari (technically WebKit) with different UI. I know, “holy shit”, but Apple be Thinking Different y’know.&lt;/p&gt;&#xA;&lt;p&gt;To solve this horrible web compatibility issue, I had to resign to horrible CSS hacks, the one that worked nicely is as follows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;An HSL accent color is being set as three different CSS variables, as hue, saturation, and lightness respectively&lt;/li&gt;&#xA;&lt;li&gt;Primary accent color variable is defined by simply referencing above mentioned variables, i.e. &lt;code&gt;hsl(var(--accent-h), var(--accent-s), var(--accent-l))&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;For opacity variants we simply add an alpha channel as we normally would&lt;/li&gt;&#xA;&lt;li&gt;For complex calculations we are making use of &lt;code&gt;calc()&lt;/code&gt; to manually tune every color channel we want by dividing, multiplying, adding, and subtracting variables and factors from one another&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Halfway through implementing this I have come across &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://codesalad.dev/blog/color-manipulation-with-css-variables-and-hsl-16&#34;&gt;Color Manipulation With CSS Variables and HSL&lt;/a&gt; article by Code Salad, which was precisely what I was going for, but with proper calculations (mine were quite broken). Check that post out for all the calculations for all the different types of color manipulations.&lt;/p&gt;&#xA;&lt;p&gt;To simplify variable usage and overriding, accent color-related variables and “static” variables are defined as two different mixins:&lt;/p&gt;&#xA;&lt;pre class=&#34;giallo z-code&#34;&gt;&lt;code data-lang=&#34;scss&#34;&gt;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;mixin&lt;/span&gt;&lt;span class=&#34;z-entity z-name z-function&#34;&gt; variables&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-parameters z-begin&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;$modes&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;light&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-parameters z-end&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt;  @&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;each&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt; $mode&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt; in&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt; $modes&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt;    @&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt; $mode&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; ==&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;light&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --fg-color&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; #&lt;/span&gt;&lt;span class=&#34;z-constant z-other z-color&#34;&gt;29242a&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --fg-contrast&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; #&lt;/span&gt;&lt;span class=&#34;z-constant z-other z-color&#34;&gt;fcfcfa&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --red-fg&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; hsl&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt;342.0779&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 72&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 58&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --red-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 342.0779&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --red-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 72&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --red-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 58&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    }&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt; @&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;else if&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt; $mode&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; ==&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;dark&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --fg-color&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; #&lt;/span&gt;&lt;span class=&#34;z-constant z-other z-color&#34;&gt;fcfcfa&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --fg-contrast&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; #&lt;/span&gt;&lt;span class=&#34;z-constant z-other z-color&#34;&gt;29242a&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --red-fg&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; hsl&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt;345.18988&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 100&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 69&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --red-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 345.18988&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --red-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 100&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --red-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 69&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    }&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  }&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;mixin&lt;/span&gt;&lt;span class=&#34;z-entity z-name z-function&#34;&gt; variables-accent&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-parameters z-begin&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;$modes&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;light&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-parameters z-end&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt;  @&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;each&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt; $mode&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt; in&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt; $modes&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt;    @&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt; $mode&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; ==&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;light&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --accent-color&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; hsl&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-light-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-light-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-light-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      )&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --accent-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-light-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --accent-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-light-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --accent-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-light-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --bg-color&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; hsl&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        calc&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; -&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; *&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 0.6&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        calc&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; +&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; (&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; -&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; *&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 0.8&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      )&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    }&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt; @&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;else if&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt; $mode&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; ==&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;dark&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --accent-color&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; hsl&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-dark-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-dark-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-dark-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      )&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --accent-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-dark-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --accent-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-dark-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --accent-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-dark-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --bg-color&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; hsl&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        calc&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; -&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; *&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 0.7&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        calc&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; -&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; *&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 0.9&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      )&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    }&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt; @&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;else if&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt; $mode&lt;/span&gt;&lt;span class=&#34;z-keyword z-operator&#34;&gt; ==&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;common&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --accent-highlight&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; hsla&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--disabled-opacity&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      )&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;      --bg-muted-1&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; hsla&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--accent-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-function&#34;&gt;        var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--color-opacity-1&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      )&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    }&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  }&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This allows me to import such a mixin on some element along with an accent color different from main one, to do cool stuff like recoloring article cards.&lt;/p&gt;&#xA;&lt;pre class=&#34;giallo z-code&#34;&gt;&lt;code data-lang=&#34;scss&#34;&gt;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-entity z-name z-tag&#34;&gt;article&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-entity z-name z-tag&#34;&gt;  &amp;amp;&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-entity z-css&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;z-entity z-other z-attribute-name z-class z-css&#34;&gt;has-accent-color&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;    --accent-light-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 209.49&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;    --accent-light-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 35.76&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;    --accent-light-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 32.35&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;    --accent-dark-h&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 200&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;    --accent-dark-s&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 15.19&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;    --accent-dark-l&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 69.02&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt;    @&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;z-entity z-name z-function&#34;&gt; variables-accent&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-parameters z-begin&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;light&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;common&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-parameters z-end&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt;    @&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;media&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; (&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt;prefers-color-scheme&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; dark&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-entity z-name z-tag&#34;&gt;      &amp;amp;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt;        @&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;z-entity z-name z-function&#34;&gt; variables-accent&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-parameters z-begin&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;dark&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-parameters z-end&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      }&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    }&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  }&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Not very efficient, but I am not aware of any other, better approach, and believe me, I researched this topic thoroughly and still do, in hopes for something to pop up. If you happen to know how to improve this, &lt;em&gt;please&lt;/em&gt; &lt;a href=&#34;https://daudix.one/#contacts&#34;&gt;let me know&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;immersive-loading-animations&#34;&gt;Immersive Loading Animations&lt;/h3&gt;&#xA;&lt;p&gt;A brilliant idea suggested by &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://ivanmarkov.net&#34;&gt;Ivan&lt;/a&gt;: what if pages had different loading animations depending on whether the user is navigating up or down in the sidebar.&lt;/p&gt;&#xA;&lt;p&gt;But wait, you might ask, how can we know from and where the user is going if it’s a static site? Save the URL of the previous page in cache and then check whether the anchor element of new page is above or below it?&lt;/p&gt;&#xA;&lt;p&gt;Nope, everything is simple and genius (as it always is). Since we have an active sidebar item logic already, we can simply define a &lt;code&gt;navigation_direction&lt;/code&gt; variable with the value of &lt;code&gt;#up&lt;/code&gt;, loop through all sidebar items and append &lt;code&gt;#up&lt;/code&gt; to the end of all URLs, and once we hit an active URL, we set the variable to &lt;code&gt;#down&lt;/code&gt; and append it instead.&lt;/p&gt;&#xA;&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;State&lt;/th&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Path&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&#xA;&lt;tr&gt;&lt;td&gt;Inactive&lt;/td&gt;&lt;td&gt;Home&lt;/td&gt;&lt;td&gt;/home/#up&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;Active&lt;/td&gt;&lt;td&gt;Blog&lt;/td&gt;&lt;td&gt;/blog/&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;tr&gt;&lt;td&gt;Inactive&lt;/td&gt;&lt;td&gt;Nanolog&lt;/td&gt;&lt;td&gt;/nanolog/#down&lt;/td&gt;&lt;/tr&gt;&#xA;&lt;/tbody&gt;&lt;/table&gt;&#xA;&lt;p&gt;Now the animation itself. We define different animations based on the &lt;code&gt;:target&lt;/code&gt;, it works by adding invisible elements with &lt;code&gt;up&lt;/code&gt; and &lt;code&gt;down&lt;/code&gt; IDs, &lt;code&gt;:target&lt;/code&gt; state of which we check.&lt;/p&gt;&#xA;&lt;pre class=&#34;giallo z-code&#34;&gt;&lt;code data-lang=&#34;scss&#34;&gt;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-entity z-css&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;z-entity z-other z-attribute-name z-id z-css&#34;&gt;main-content&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;  animation&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt; fade&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt;zoom &lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt;0.4&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-comment&#34;&gt; //&lt;/span&gt;&lt;span class=&#34;z-comment&#34;&gt; Normal loading animation&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-keyword z-scss&#34;&gt;  @&lt;/span&gt;&lt;span class=&#34;z-keyword z-control&#34;&gt;keyframes&lt;/span&gt;&lt;span class=&#34;z-entity z-name z-function&#34;&gt; fade-in-zoom&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-entity z-other z-attribute-name&#34;&gt;    from&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;      transform&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; scale&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt;0.95&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;      opacity&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 0&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    }&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  }&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-comment&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;z-comment&#34;&gt; Don&amp;#39;t play animation when jumping to any section&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-entity z-css&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-entity z-other z-attribute-name z-pseudo-class z-css&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt; ~ &lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-entity z-css&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;z-entity z-other z-attribute-name z-id z-css&#34;&gt;main-content&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;  animation-name&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; none&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-comment&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;z-comment&#34;&gt; Loading animation when going down in the sidebar&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-entity z-css&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;z-entity z-other z-attribute-name z-id z-css&#34;&gt;down&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-entity z-css&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-entity z-other z-attribute-name z-pseudo-class z-css&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt; ~ &lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-entity z-css&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;z-entity z-other z-attribute-name z-id z-css&#34;&gt;main-content&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;  animation-name&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt; slide&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt;down&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt;longer&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-comment&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;z-comment&#34;&gt; Loading animation when going up in the sidebar&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-entity z-css&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;z-entity z-other z-attribute-name z-id z-css&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-entity z-css&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-entity z-other z-attribute-name z-pseudo-class z-css&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt; ~ &lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-entity z-css&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;z-entity z-other z-attribute-name z-id z-css&#34;&gt;main-content&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;  animation-name&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt; slide&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;z-source&#34;&gt;longer&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And that’s essentially it! In practice there are also &lt;code&gt;#right&lt;/code&gt; and &lt;code&gt;#left&lt;/code&gt; anchors for animating navigation between blog posts using the Next/Previous thingy at the bottom of the page, but they work the same way so no need to mention them separately.&lt;/p&gt;&#xA;&lt;p&gt;Again, the idea itself and its implementation were suggested by Ivan, kudos to him!!&lt;/p&gt;&#xA;&lt;h3 id=&#34;icon-libraryn-t&#34;&gt;Icon Libraryn’t&lt;/h3&gt;&#xA;&lt;p&gt;During the Duckquill –&amp;gt; Ametrine limbo state I have switched away from using hand-cleaned and optimized Adwaita icons defined as CSS variables, to using &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://phosphoricons.com&#34;&gt;Phosphor Icons&lt;/a&gt;, a huge library of well-designed icons for any scenario you can think of.&lt;/p&gt;&#xA;&lt;p&gt;The richness of the library comes at a very bitter cost, it weights a lot; it requires both an icon font and a CSS file that maps respective glyphs to respective icon classes.&lt;/p&gt;&#xA;&lt;p&gt;To solve this, I have opted to inlining all the needed icons rather than loading everything at once. This idea was borrowed from &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://holly.mlem.systems/&#34;&gt;holly’s site&lt;/a&gt;, specifically the &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://git.gay/holly/pages/src/commit/e3abe82dd69deacc3b2c02751cb6df1c2e9847be/templates/macros/icon.html&#34;&gt;&lt;code&gt;icon()&lt;/code&gt; macros&lt;/a&gt; (she allowed me to steal it ^^).&lt;/p&gt;&#xA;&lt;p&gt;Initially I used &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://iconify.design&#34;&gt;Iconify&lt;/a&gt; API as well, but I found it rather slow and I didn’t like the idea of depending on a remote API for building my website, so I have come up with a silly solution: adding &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://github.com/phosphor-icons/core&#34;&gt;phosphor-icons/core repo&lt;/a&gt; as a Git submodule!&lt;/p&gt;&#xA;&lt;p&gt;It worked great, but I have noticed a pretty annoying issue, the repo was kinda huge, containing unused by me icon weights, typescript maps, Git history, and whatnot. So I have set up an &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://codeberg.org/Geode/ametrine-icons&#34;&gt;ametrine-icons repo&lt;/a&gt; which using CI copies all the needed files to it and pushes every week or on demand. I also use &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://simpleicons.org&#34;&gt;Simple Icons&lt;/a&gt; specifically for footer socials, and the same treatment was applied to it as well.&lt;/p&gt;&#xA;&lt;p&gt;The way the macro works is as follows:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Based on the icon name you provided, it loads a corresponding SVG file&lt;/li&gt;&#xA;&lt;li&gt;This SVG is being URL-encoded&lt;/li&gt;&#xA;&lt;li&gt;Which then is set as an &lt;code&gt;--icon&lt;/code&gt; CSS variable in the &lt;code&gt;style=&amp;#34;&amp;#34;&lt;/code&gt; tag on an &lt;code&gt;&amp;lt;i&amp;gt;&lt;/code&gt; HTML element&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The final thingy looks like the following:&lt;/p&gt;&#xA;&lt;pre class=&#34;giallo z-code&#34;&gt;&lt;code data-lang=&#34;plain&#34;&gt;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span&gt;&amp;lt;i class=&amp;#34;icon {{ name }}&amp;#34; style=&amp;#34;--icon: url(&amp;#39;data:image/svg+xml,{{ icon | urlencode }}&amp;#39;);&amp;#34;&amp;gt;&amp;lt;/i&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now comes the CSS hackery:&lt;/p&gt;&#xA;&lt;pre class=&#34;giallo z-code&#34;&gt;&lt;code data-lang=&#34;scss&#34;&gt;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-entity z-css&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;z-entity z-other z-attribute-name z-class z-css&#34;&gt;icon&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;  font-style&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; normal&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;  font-variant&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; normal&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;  font-weight&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; normal&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;  line-height&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;  user-select&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; none&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;  text-transform&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; none&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type&#34;&gt;  -webkit-user-select&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; none&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;  display&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; inline-block&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;  box-sizing&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; content-box&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-entity z-name z-tag&#34;&gt;  &amp;amp;&lt;/span&gt;&lt;span class=&#34;z-punctuation z-definition z-entity z-css&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;z-entity z-other z-attribute-name&#34;&gt;before&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;    mask-image&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--icon&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type&#34;&gt;    -webkit-mask-image&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-function&#34;&gt; var&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;z-variable z-scss&#34;&gt;--icon&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;    display&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; block&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;    background-color&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; currentColor&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;    width&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;em&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;    height&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-constant z-numeric&#34;&gt; 1&lt;/span&gt;&lt;span class=&#34;z-keyword&#34;&gt;em&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-entity z-name z-tag&#34;&gt;    content&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  }&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;The trick here is to use masks rather than directly inlining the SVG into HTML, so that we can use currentColor while also having reliable resizing based on current font size. This hybrid &lt;code&gt;::before&lt;/code&gt; and display &lt;code&gt;inline-block&lt;/code&gt; on parent and &lt;code&gt;block&lt;/code&gt; on pseudo element approach makes this possible.&lt;/p&gt;&#xA;&lt;p&gt;Some readers would point out that it’s possible to size the icon to match font size without using &lt;code&gt;::before&lt;/code&gt;, and recolor too by styling the SVG directly, however there’s one nasty issue: viewBox. It’s the thingy that defines canvas size of an SVG, and for some reason, it doesn’t like the SVG’s width and height being altered; icon doesn’t change its size, only the space around it is being increased. This is fixable by editing the SVG and could be added as an additional step in the CI, but currently I don’t feel like figuring this out.&lt;/p&gt;&#xA;&lt;h3 id=&#34;the-blue-square-that-i-hate&#34;&gt;The Blue Square That I Hate&lt;/h3&gt;&#xA;&lt;p&gt;If you’re a Chrome user on Android you probably know what I’m talking about, if not here’s what I’m on: By default, Chrome on Android highlights all interactable elements (links, buttons, checkboxes) with a semi-transparent blue square that covers the entire element when it’s being pressed, which makes sense to have if your site doesn’t have any :hover and :active states, but if you do it just looks horrible. Thankfully I found a solution to this problem:&lt;/p&gt;&#xA;&lt;pre class=&#34;giallo z-code&#34;&gt;&lt;code data-lang=&#34;scss&#34;&gt;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-entity z-name z-tag&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-support z-type&#34;&gt;  -webkit-tap-highlight-color&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-support z-constant&#34;&gt; transparent&lt;/span&gt;&lt;span class=&#34;z-punctuation z-terminator&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Yes, that’s really it!&lt;/p&gt;&#xA;&lt;p&gt;I find it funny how it was &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://developer.apple.com/library/archive/documentation/AppleApplications/Reference/SafariWebContent/AdjustingtheTextSize/AdjustingtheTextSize.html#//apple_ref/doc/uid/TP40006510-SW5&#34;&gt;initially a WebKit thing&lt;/a&gt;, and now it’s gone from these but is still around in Chrome.&lt;/p&gt;&#xA;&lt;h2 id=&#34;abolish-c-api-talism&#34;&gt;Abolish C-API-talism&lt;/h2&gt;&#xA;&lt;p&gt;The real highlight is the heavy use of APIs compared to Duckquill, which is cool, but comes at a cost…&lt;/p&gt;&#xA;&lt;h3 id=&#34;fediverse-avatar&#34;&gt;Fediverse Avatar&lt;/h3&gt;&#xA;&lt;p&gt;Ametrine has this neat thingy where, if “sidebar icon” option is set to &lt;code&gt;true&lt;/code&gt; and Fediverse comments are on, it will automatically pull your pfp from the Fediverse. It works by relying on &lt;code&gt;.well-known&lt;/code&gt;, webfinger specifically: &lt;code&gt;example.com/.well-known/webfinger?resource=acct:user@example.com&lt;/code&gt;. There is one field that is of interest of us, and it’s the one that has &lt;code&gt;rel&lt;/code&gt; of &lt;code&gt;http://webfinger.net/rel/avatar&lt;/code&gt;, which also contains an &lt;code&gt;href&lt;/code&gt; to the avatar. Yeah it’s that simple, the downside is that only Mastodon seems to supports this :[&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://wetdry.world/.well-known/webfinger?resource=acct:daudix@wetdry.world&#34;&gt;https://wetdry.world/.well-known/webfinger?resource=acct:daudix@wetdry.world&lt;/a&gt;&lt;/p&gt;&#xA;&lt;pre class=&#34;giallo z-code&#34;&gt;&lt;code data-lang=&#34;json&#34;&gt;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;{&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;acct:daudix@wetdry.world&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;aliases&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; [&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;https://wetdry.world/@daudix&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;https://wetdry.world/users/daudix&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  ]&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;links&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; [&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;http://webfinger.net/rel/profile-page&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;text/html&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;https://wetdry.world/@daudix&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    }&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;application/activity+json&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;https://wetdry.world/users/daudix&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    }&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;http://ostatus.org/schema/1.0/subscribe&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;https://wetdry.world/authorize_interaction?uri={uri}&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    }&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;http://webfinger.net/rel/avatar&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;image/jpeg&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;      &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-support z-type z-property-name&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;https://media.wetdry.world/accounts/avatars/111/681/676/609/615/060/original/27babb84280475a6.jpg&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;    }&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  ]&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;comments-qr&#34;&gt;Comments QR&lt;/h3&gt;&#xA;&lt;p&gt;In Duckquill, the QR code displayed in comments section to open the fedi post under which one would reply for it to display as a comment was loaded from the &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://goqr.me/api/&#34;&gt;QR generator api&lt;/a&gt; for every visitor, on every page load, which well, works but isn’t very nice of me to spam it, it likely costs money to run that thing, so I did what any normal person would do right away, and opted to loading the QR SVG on page build. This way, everyone’s happy; users get one less remote image to load, and api owner gets less requests, cool.&lt;/p&gt;&#xA;&lt;p&gt;Now, it would be even cooler and more bandwidth efficient to load a gif rather than svg, however because Zola is cool but not perfect, it can’t load and cache remote images or anything, only text data, which SVGs count as since it’s pretty much just XML. Now, it’s rude to call it that, but we’re treating it as such because there isn’t a better option and it’s true.&lt;/p&gt;&#xA;&lt;h3 id=&#34;last-fm&#34;&gt;Last.fm&lt;/h3&gt;&#xA;&lt;p&gt;I hate, and absolutely despise, Last.fm API. Gosh why Paramount couldn’t spend two minutes skimming over its output to ensure it’s not saying bullshit, and is actually saying what it’s supposed to instead of being all shy sometimes and instead of returning a null &lt;em&gt;sometimes&lt;/em&gt; just not return anything.&lt;/p&gt;&#xA;&lt;p&gt;Why would I care in the first place? Well, there’s this little and simple feature someone requested: what if there was a way to display a song/album/combos of the former two as some sort of widget, which would tell the reader which songs author listened to while writing the article, in addition to weather, of course, cuz how else one is supposed to flex that they listened to The Sharpest Lives while it was raining outside.&lt;/p&gt;&#xA;&lt;p&gt;Besides, very cool idea, but pretty complex to implement; it took me two months in total to ship it (most of which was spent scratching my head how to do it right) 👍&lt;/p&gt;&#xA;&lt;p&gt;The least amount of info we would need to query Last.fm for details of some track are:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Type (track or album)&lt;/li&gt;&#xA;&lt;li&gt;Track/album name&lt;/li&gt;&#xA;&lt;li&gt;Artist name&lt;/li&gt;&#xA;&lt;li&gt;API key&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;To keep things more standardized (but not necessarily reliable, because Last.fm) we also allow to pass a MusicBrainz ID (MBID for short), either as an addition to song name and artist, or a replacement, though setting song/album names in addition to it is still recommended, as some of them lack an MBID on Last.fm.&lt;/p&gt;&#xA;&lt;p&gt;As for API key, we set it in &lt;code&gt;config.toml&lt;/code&gt;… Ha, gotcha silly, we set it as an environment variable on build (&lt;code&gt;$ LAST_FM_API_KEY=63cdc(...) zola build&lt;/code&gt;)!&lt;/p&gt;&#xA;&lt;p&gt;Pretty cool that Zola can access these, ones set by user and even ones set by OS, like &lt;code&gt;$USER&lt;/code&gt;, &lt;code&gt;$LANG&lt;/code&gt;, and even &lt;code&gt;$XDG_SESSION_DESKTOP&lt;/code&gt;. One can imagine an easter egg in Ametrine that, if &lt;code&gt;zola serve&lt;/code&gt; is used, tells user “Hello &lt;abbr title=&#34;$USER&#34;&gt;daudix&lt;/abbr&gt; on &lt;abbr title=&#34;$XDG_SESSION_DESKTOP&#34;&gt;gnome&lt;/abbr&gt;, are you really using &lt;abbr title=&#34;$EDITOR | split(pat=&amp;#34;/&amp;#34;) | last&#34;&gt;nano&lt;/abbr&gt; as your editor?? Laaame!”.&lt;/p&gt;&#xA;&lt;p&gt;Someone &lt;em&gt;evil&lt;/em&gt; could even use this to send out their users’ telemetry with a bit of JavaScript, but even though I’m evil, I’m not evil &lt;em&gt;evil&lt;/em&gt; so don’t worry. Or worry and check source code for any suspicious &lt;code&gt;get_env()&lt;/code&gt; instances, you do you.&lt;/p&gt;&#xA;&lt;p&gt;Oh right, Last.fm.&lt;/p&gt;&#xA;&lt;p&gt;With these in mind, we can construct an object in front matter:&lt;/p&gt;&#xA;&lt;pre class=&#34;giallo z-code&#34;&gt;&lt;code data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;z-entity z-name z-section&#34;&gt;extra&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-other&#34;&gt;music&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; =&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; [&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-other&#34;&gt;    type&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; =&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;album&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-other&#34;&gt;    mbid&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; =&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;dd8ce89b-e385-4886-83b8-4d06b55539a4&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-other&#34;&gt;    artist&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; =&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;Artifyber&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-other&#34;&gt;    name&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; =&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;Lazuli&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  }&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Pretty neat. As mentioned earlier, we can omit artist and track/album names, or drop MBID, or even make a typo in either of names and still have a high chance of Last.fm autocorrecting it (via &lt;code&gt;&amp;amp;autocorrect=1&lt;/code&gt; query):&lt;/p&gt;&#xA;&lt;pre class=&#34;giallo z-code&#34;&gt;&lt;code data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;z-entity z-name z-section&#34;&gt;extra&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-other&#34;&gt;music&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; =&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; [&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-comment&#34;&gt;  #&lt;/span&gt;&lt;span class=&#34;z-comment&#34;&gt; No song and artist names&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-other&#34;&gt;    type&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; =&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;track&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-other&#34;&gt;    mbid&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; =&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;480835fa-368f-4916-948b-7e6e617ca64e&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  }&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation z-definition z-comment&#34;&gt;  #&lt;/span&gt;&lt;span class=&#34;z-comment&#34;&gt; Malformed artist name, should autocorrect itself&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  {&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-other&#34;&gt;    type&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; =&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;track&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-other&#34;&gt;    artist&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; =&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;my chemicla romance&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-variable z-other&#34;&gt;    name&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; =&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt; &amp;#34;&lt;/span&gt;&lt;span class=&#34;z-string&#34;&gt;dead&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;  }&lt;/span&gt;&lt;span class=&#34;z-punctuation&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span class=&#34;giallo-l&#34;&gt;&lt;span class=&#34;z-punctuation&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now we can do the following on template side:&lt;/p&gt;&#xA;&lt;p&gt;&lt;small&gt;Item: song/album.&lt;/small&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Load Last.fm API key from &lt;code&gt;LAST_FM_API_KEY&lt;/code&gt; environment variable (duuh)&lt;/li&gt;&#xA;&lt;li&gt;Loop through all items in front matter’s &lt;code&gt;extra.music&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;For each item, query Last.fm for its info using all the available user-supplied info&lt;/li&gt;&#xA;&lt;li&gt;If item is a song and it has a cover art, use it, if not, check if it’s part of an album and if it has a cover art, if it does, use it, if not, fallback to missing image image (there’s surely a better way to word this)&lt;/li&gt;&#xA;&lt;li&gt;Check our position in a loop, and ensure that it’s less than a maximum number, if it’s equal to a maximum (7, so that we have 6 items max), silently break the loop and don’t load any more info&lt;/li&gt;&#xA;&lt;li&gt;Use same loop index logic to construct a paginator, which is a list of links that link to &lt;code&gt;#music-item-1&lt;/code&gt;, &lt;code&gt;#music-item-2&lt;/code&gt;, and so on, which scroll relevant items into view&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://codeberg.org/daudix/ametrine/src/commit/e777facd2b74c5d7d48b32f2f89997ff07aa944b/templates/partials/sidebar.html#L203-L280&#34;&gt;Template in question&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;This might not sound all too complicated, but it required lots of trial and error to get it right. It would’ve been easier and faster if Last.fm wasn’t shit, but I bet you already noticed how much I hate it.&lt;/p&gt;&#xA;&lt;video class=&#34;&#34; src=&#34;https://daudix.one/blog/year-of-ametrine/music-pagination.mp4&#34; aria-title=&#34;Showcase of music widget pagination.&#34; controls=&#34;&#34;&gt;&lt;/video&gt;&#xA;&lt;p&gt;Enough APIs, let’s do some small talk.&lt;/p&gt;&#xA;&lt;h2 id=&#34;good-weather-mate-innit&#34;&gt;Good Weather Mate, Innit?&lt;/h2&gt;&#xA;&lt;p&gt;Sorry readers from the Overcast Island, didn’t mean to come across as offensive or something, in fact I much prefer your English over.. uh, Simplified English. Although my favorite flavor is still Canadian English :]&lt;/p&gt;&#xA;&lt;p&gt;Anyhoo, I got sidetracked, what are we talking abo- oh right, this joke is already way too overused throughout this blog. Um, yea, let’s jump right into the internals of the weather widget.&lt;/p&gt;&#xA;&lt;p&gt;Instead of relying on some APIs, I opted to allowing the user to define four distinct settings:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Temperature&lt;/li&gt;&#xA;&lt;li&gt;Weather condition name&lt;/li&gt;&#xA;&lt;li&gt;Weather condition icon&lt;/li&gt;&#xA;&lt;li&gt;Background image type (one of three; cloudy, showers, or snowing)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Pretty easy right? Well mostly yeah, though I had to buck around a lot to get background image animations right. For foggy I used two (heavily compressed/dithered) Perlin noise images with alpha, one for light mode, and one inverted one for dark mode. Rain one uses rain droplet sprite from &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://github.com/danirabbit/nimbus&#34;&gt;Nimbus&lt;/a&gt;, a weather app for elementary OS, and for snow I took the rain sprite and put randomly sized (randomized by just eyeballing) circles at the ends of the water droplet lines.&lt;/p&gt;&#xA;&lt;p&gt;More on Perlin noise, I used &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;http://kitfox.com/projects/perlinNoiseMaker/&#34;&gt;Kitfox’ Perlin Noise Maker&lt;/a&gt; to create a sprite with settings I needed. I then adjusted the opacity until it looked good, did the same for dark variant except that I inverted the image before adjusting opacity. The final result was then dithered to make sprites even more tiny.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://daudix.one/blog/year-of-ametrine/weather.svg#transparent%23no-hover&#34; alt=&#34;Perlin, rain, and snow sprites in both light and dark variants.&#34;/&gt;&lt;/p&gt;&#xA;&lt;p&gt;Oh right, what was so hard about getting animations right? Mostly background position for the rain animation, since I needed to maintain a nice speed while also keeping the animation loop seamless, all while looking natural, so that droplets don’t fall in s straight line but also shift downwards slightly.&lt;/p&gt;&#xA;&lt;div class=&#34;media-grid&#34;&gt;&#xA;&lt;video class=&#34;&#34; src=&#34;https://daudix.one/blog/year-of-ametrine/weather-cloudy.mp4&#34; controls=&#34;&#34;&gt;&lt;/video&gt;&#xA;&#xA;&lt;video class=&#34;&#34; src=&#34;https://daudix.one/blog/year-of-ametrine/weather-showers.mp4&#34; controls=&#34;&#34;&gt;&lt;/video&gt;&#xA;&#xA;&lt;video class=&#34;&#34; src=&#34;https://daudix.one/blog/year-of-ametrine/weather-snowing.mp4&#34; controls=&#34;&#34;&gt;&lt;/video&gt;&#xA;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;One last thing is the actual degree° symbol. Some put space between it and the actual temperature, some don’t. I tried to find which approach is actually correct, but I didn’t find any cohesive info, so I went with what looks nicer and didn’t put space in between :]&lt;/p&gt;&#xA;&lt;h2 id=&#34;my-faithful-test-subjects&#34;&gt;My Faithful Test Subjects&lt;/h2&gt;&#xA;&lt;p&gt;I’m lucky enough to have some awesome friends, and I’m even more lucky that some of them took the initiative and risk and ported their sites to Ametrine, which was super cool but also super valuable, as it exposed some really nasty issues that couldn’t be easily caught if you’re not starting your site from scratch. These site are as follows, in order:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://rootsource.cc&#34;&gt;rootsource.cc&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://mambuco.dev&#34;&gt;mambuco.dev&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://aeronook.eu&#34;&gt;aeronook.eu&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://costmiku.space&#34;&gt;costmiku.space&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;media-grid-markdown&#34;&gt;&#xA;&lt;p&gt;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://rootsource.cc&#34;&gt;&lt;img src=&#34;https://daudix.one/blog/year-of-ametrine/rootsource.png&#34; alt=&#34;Screenshot of RootSourceCC website.&#34;/&gt;&lt;/a&gt;&#xA;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://aeronook.eu&#34;&gt;&lt;img src=&#34;https://daudix.one/blog/year-of-ametrine/aeronook.png&#34; alt=&#34;Screenshot of AeroNook’s website.&#34;/&gt;&lt;/a&gt;&#xA;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://costmiku.space&#34;&gt;&lt;img src=&#34;https://daudix.one/blog/year-of-ametrine/costmiku.png&#34; alt=&#34;Screenshot of Costmiku website.&#34;/&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;However, these are not the only Ametrine sites, but these are first, and thus special to me.&lt;/p&gt;&#xA;&lt;p&gt;Do I have any favorite Ametrine sites though? Of course I do, &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://mambuco.dev&#34;&gt;mambuco.dev&lt;/a&gt; and &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://axeni.de&#34;&gt;axeni.de&lt;/a&gt;!&lt;/p&gt;&#xA;&lt;p&gt;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://mambuco.dev&#34;&gt;&lt;img src=&#34;https://daudix.one/blog/year-of-ametrine/mambuco.png&#34; alt=&#34;Screenshot of Mambuco’s website.&#34;/&gt;&lt;/a&gt;&#xA;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://axeni.de&#34;&gt;&lt;img src=&#34;https://daudix.one/blog/year-of-ametrine/axenide.png&#34; alt=&#34;Screenshot of Axenide’s website.&#34;/&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Both are made by pretty cool guys, make a bunch of modifications, and have nice content. I really love seeing how different sites can be while using the same base.&lt;/p&gt;&#xA;&lt;p&gt;All in all, it’s very fun helping early adopters with setting up Ametrine, point them to correct config options, or implement some features for them, although I sometimes wonder if all these “not production ready, don’t use” disclaimers on Ametrine’s site make any difference :P&lt;/p&gt;&#xA;&lt;h2 id=&#34;major-changes-during-development&#34;&gt;Major Changes During Development&lt;/h2&gt;&#xA;&lt;p&gt;During this year+ of active development, many things inevitably changed, and while it would be nearly impossible to list all of them, here are some of the major ones:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://codeberg.org/daudix/ametrine/pulls/29&#34;&gt;New sidebar&lt;/a&gt; with cool new features (compare it to &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://old.daudix.one&#34;&gt;old.daudix.one&lt;/a&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Retirement of the collapsed sidebar state&lt;/li&gt;&#xA;&lt;li&gt;New* header (well, return of it)&lt;/li&gt;&#xA;&lt;li&gt;New fonts: &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://github.com/kosbarts/Commissioner&#34;&gt;Commissioner&lt;/a&gt; for UI and &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://commitmono.com&#34;&gt;Commit Mono&lt;/a&gt; for code (&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://vercel.com/font&#34;&gt;Geist&lt;/a&gt; is made by Vercel, whose CEO is &lt;em&gt;evil&lt;/em&gt;)&lt;/li&gt;&#xA;&lt;li&gt;Custom alerts&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://codeberg.org/daudix/ametrine/pulls/26&#34;&gt;SCSS reorganization and refactor&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;initial-release-and-some-plans&#34;&gt;Initial Release and Some Plans&lt;/h2&gt;&#xA;&lt;p&gt;Even though Ametrine is in a seemingly good state right now, it’s still far from done; many things are still yet to be implemented, there’s a number of annoying issues, and there’s a bunch of things that I want to rewrite as I feel they’re not done correctly right now. Still though, my short term plan looks something like this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Make build times as short as possible&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Replace Last.fm API with something else, it’s simply too slow&lt;/li&gt;&#xA;&lt;li&gt;Reconsider the need for comments QR code&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Make things more modular&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Make color palette easily overrideable, Monokai Pro isn’t everyone’s cup of tea&lt;/li&gt;&#xA;&lt;li&gt;Utilize blocks in templates so that it’s possible to partially override them. Will have to wait for Zola rewrite in tera2 as currently it’s very fragile&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Become less Fediverse-focused, i.e. comments are currently Fediverse-only, and lately I’ve been pretty much exclusively using Bluesky&lt;/li&gt;&#xA;&lt;li&gt;Take a step back and carefully consider which features should stay and which ones should go&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Once the &lt;a class=&#34;external&#34; rel=&#34;external&#34; href=&#34;https://codeberg.org/daudix/ametrine/milestone/12016&#34;&gt;v0.1.0 milestone&lt;/a&gt; is completed, we’ll tag said release and submit Ametrine to Zola’s themes page. I wouldn’t be optimistic on this one, since v0.1.0 was supposed to be released like 3 months into development.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;&#xA;&lt;p&gt;During this year+ of Ametrine development, many things were done, and while one could wish more was done in this period, I’m personally fine with it.&lt;/p&gt;&#xA;&lt;p&gt;I hope it was at least a bit interesting and that at least some joke made you chuckle. Have a good day, stay safe, and see you in the next one next week (I really really hope so, can’t promise it though).&lt;/p&gt;&#xA;&lt;section class=&#34;footnotes&#34;&gt;&#xA;&lt;ol class=&#34;footnotes-list&#34;&gt;&#xA;&lt;li id=&#34;fn-1&#34;&gt;&#xA;&lt;p&gt;This post was initally going to include this site’s #devlog with changes made since the New Era post, however it was getting too long, and well, no one’s going to read 40 minutes worth of text written by daudix, so I’ve split it into a separate post. &lt;a href=&#34;https://daudix.one/blog/year-of-ametrine/#fr-1-1&#34;&gt;↩&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/section&gt;</content>
    <link href="https://daudix.one/blog/year-of-ametrine/" rel="alternate"></link>
    <author>
      <name>Daudix</name>
    </author>
  </entry>
  <entry>
    <title>196 Years</title>
    <updated>2026-04-06T00:00:00Z</updated>
    <id>https://slightknack.dev/daily/2026-04-06/</id>
    <content type="html">&lt;p&gt;It’s been a while, I know. I sit here writing today because I feel trapped; a prisonless prisoner who laid bricks until one day he woke up in a cell of his own creation.&lt;/p&gt;&#xA;&lt;p&gt;Am I overconstrained, overburdened, overpromised? In the event that I carry all the parcels I bear through to the date of their respective deliveries, I’m certain I will emerge on the other side a better person. The constraints seek resolution; the burdens are amenable to carrying; the promises sway, flexible but unyielding.&lt;/p&gt;&#xA;&lt;p&gt;On the other hand: I am afraid who I will have become if I fumble and lose what I have been entrusted. Similarly, if I hold it all too tight, and the weight pins my body to the cool, damp earth, it is certain that against the ground I will remain: the burdens never shed, the destination never reached. Sometimes I ask, “This destination, is it mine?” Am &lt;em&gt;I&lt;/em&gt; living out the dream of another?&lt;/p&gt;&#xA;&lt;p&gt;People ask things of me and I’m terrified to respond. Terrified that I will sign yet another social contract. I am not a busy person, just overwhelmed. I do not feel the satisfaction some seek when telling others “no”. I march through the work I have to do, and it is done, but I have done nothing. What am I doing?&lt;/p&gt;&#xA;&lt;p&gt;I’m being dramatic. I should eat something. If there’s any week after which to lighten one’s burdens, this one isn’t bad!&lt;/p&gt;&#xA;&lt;p&gt;Tomorrow is a new day! I will stay my course and fight a good fight; it does not matter that I win, just that I remain: both true to myself, and the trust that others have placed in me. I need to put on my oxygen mask, unswamp my canoe, start the engine, break the curse, turn the tables, put on my socks and shoes, pull up my big-boy pants, because tomorrow is a new day, and the sun won’t wait to rise for those who waste asleep.&lt;/p&gt;&#xA;&lt;p&gt;In any case, the sunrise is too beautiful to miss.&lt;/p&gt;&#xA;&lt;div class=&#34;boxed&#34;&gt;&#xA;&lt;p&gt;&lt;strong&gt;Daily reading: &lt;a rel=&#34;noopener nofollow&#34; target=&#34;_blank&#34; href=&#34;https://crowprose.com/blog/competence-as-tragedy&#34;&gt;Competence as Tragedy&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;/div&gt;</content>
    <link href="https://slightknack.dev/daily/2026-04-06/" rel="alternate"></link>
    <author>
      <name>Isaac Clayton</name>
    </author>
  </entry>
  <entry>
    <title>Moving Away from My Home-brew SSG</title>
    <updated>2026-04-05T00:00:00Z</updated>
    <id>https://haydenwu.org/posts/moving-from-dummy-ssg/</id>
    <link href="https://haydenwu.org/posts/moving-from-dummy-ssg/" rel="alternate"></link>
    <summary type="html">&lt;h1 id=&#34;Moving_Away_from_My_Home-brew_SSG&#34;&gt;Moving Away from My Home-brew SSG&#xA; &lt;a class=&#34;heading-anchor&#34; href=&#34;#Moving_Away_from_My_Home-brew_SSG&#34; aria-label=&#34;Anchor link for: Moving_Away_from_My_Home-brew_SSG&#34;&gt;#&lt;/a&gt;&#xA;&lt;/h1&gt;&#xA;&lt;p&gt;For over three years, I&#39;ve been dogfooding my personal site with the same static site generator of my own, &lt;a rel=&#34;noopener nofollow noreferrer external&#34; target=&#34;_blank&#34; href=&#34;https://codeberg.org/haydenwu/dummy-ssg&#34;&gt;dummy-ssg&lt;/a&gt;. It&#39;s a simple CLI program I wrote in PHP, which, originally designed for my own site, turned out to as well power some community websites where I was involved, as it developed as a generic SSG.&lt;/p&gt;&#xA;&lt;p&gt;The program is quite lightweight: just less than 200 lines of code at its core with a vendored Markdown parsing library. It supports writing templates in PHP, the language itself already being a powerful hypertext preprocessor.&lt;/p&gt;&#xA;&lt;p&gt;Since I created the whole thing, I know how everything works and can easily patch it when needed. Plus, since templates are essentially written in a programming (scripting) language, they enjoy great extensibility too. For those reasons, I had always stuck to my home-brew SSG.&lt;/p&gt;&#xA;&lt;p&gt;A few days ago when I was helping with a friend&#39;s website, I had chance to work with the &lt;a rel=&#34;noopener nofollow noreferrer external&#34; target=&#34;_blank&#34; href=&#34;https://www.getzola.org/&#34;&gt;Zola&lt;/a&gt; SSG again. Prior to that I had &lt;a rel=&#34;noopener nofollow noreferrer external&#34; target=&#34;_blank&#34; href=&#34;https://codeberg.org/haydenwu/zola-clean-blog&#34;&gt;worked with Zola&lt;/a&gt; (and I liked it), but this time I wanted to try migrating my own site to it and see if it was a good idea.&lt;/p&gt;&#xA;&lt;p&gt;It took me two days to migrate my entire site. Because my templates are vastly PHP code, I spent most of my time rewriting them using an actual template language. And due to how Zola handles pages and sections very differently, I also had to restructure my directories.&lt;/p&gt;&#xA;&lt;p&gt;Now that I&#39;m on Zola, I can finally enjoy features that I&#39;ve never bothered to work on for dummy-ssg:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Built-in server with live reloading&lt;/li&gt;&#xA;&lt;li&gt;RSS feed&lt;/li&gt;&#xA;&lt;li&gt;Syntax highlighting&lt;/li&gt;&#xA;&lt;li&gt;Automatic heading anchor&lt;/li&gt;&#xA;&lt;li&gt;Internal link validation&lt;/li&gt;&#xA;&lt;li&gt;Inserting &lt;code&gt;target=&#34;_blank&#34;&lt;/code&gt; and &lt;code&gt;rel=&#34;noreferrer&#34;&lt;/code&gt; for external links&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;While I will miss not having to write a &lt;code&gt;title&lt;/code&gt; in the front matter (because dummy-ssg automatically uses the first top-level heading found in the Markdown), I&#39;m happy to be on Zola now.&lt;/p&gt;&#xA;&lt;hr /&gt;&#xA;&lt;p&gt;This page is released into the public domain under &lt;a rel=&#34;noopener nofollow noreferrer external&#34; target=&#34;_blank&#34; href=&#34;https://creativecommons.org/publicdomain/zero/1.0/&#34;&gt;CC0 1.0&lt;/a&gt;.&lt;/p&gt;</summary>
    <author>
      <name>Hayden Wu</name>
    </author>
  </entry>
  <entry>
    <title>3D-printing a Trombone</title>
    <updated>2026-04-01T04:00:00Z</updated>
    <id>https://unnamed.website/posts/3d-printing-trombone/</id>
    <link href="https://unnamed.website/posts/3d-printing-trombone/" rel="alternate"></link>
    <summary type="html">&lt;p&gt;It&amp;rsquo;s that time of the year again: &lt;a href=&#34;https://www.aprilcools.club/&#34;&gt;April Cools&lt;/a&gt;! My friend Ersei wrote a fun &lt;a href=&#34;https://ersei.net/en/blog/sk8r&#34;&gt;April Cools post&lt;/a&gt; two years ago, so I guess I&amp;rsquo;m joining that &lt;del&gt;cult&lt;/del&gt; trend too.&lt;/p&gt;&#xA;&lt;p&gt;Anyways, instead of the usual &lt;a href=&#34;https://unnamed.website/tags/lean/&#34;&gt;Lean propaganda&lt;/a&gt;, today&amp;rsquo;s post will be about brass instrument physics and 3D-printing a playable trombone!&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://unnamed.website/img/trombone.jpg&#34; alt=&#34;The plastic trombone and my fox plushie in the background&#34;&gt;&lt;/p&gt;&#xA;&lt;style&gt;&#xA;.chardiv {&#xA;&#x9;float: left;&#xA;&#x9;width: 100px;&#xA;}&#xA;.charimg {&#xA;&#x9;height: 60px;&#xA;}&#xA;blockquote {&#xA;&#x9;min-height: 60px;&#xA;}&#xA;&lt;/style&gt;&#xA;&lt;div class=&#34;chardiv&#34;&gt;&#xA;&#x9;&lt;img src=&#34;https://unnamed.website/img/char/kublai.png&#34; class=&#34;charimg&#34;&gt;&#xA;&lt;/div&gt;&#xA;&lt;blockquote&gt;&lt;strong&gt;Kublai&lt;/strong&gt;:&#xA;Whoa! I wanna hear it!&lt;/blockquote&gt;&#xA;&#xA;&lt;p&gt;We&amp;rsquo;ll get to that soon. But first, some physics!&lt;/p&gt;</summary>
    <author>
      <name>Anthony Wang</name>
    </author>
  </entry>
  <entry>
    <title>An Open Letter: Request for an Official Open-Source UPI Client Independent of Proprietary Platform Attestation</title>
    <updated>2026-04-01T00:08:00Z</updated>
    <id>https://tech-absurdist.neocities.org/posts.html#2026-04-01</id>
    <link href="https://tech-absurdist.neocities.org/posts.html#2026-04-01" rel="alternate"></link>
    <summary type="html">An open letter requesting an official open-source UPI client independent of proprietary platform attestation.</summary>
    <author>
      <name>Unknown Author</name>
    </author>
  </entry>
  <entry>
    <title>Smart? Phone.</title>
    <updated>2026-03-24T21:19:00Z</updated>
    <id>https://tech-absurdist.neocities.org/posts.html#2026-03-25</id>
    <link href="https://tech-absurdist.neocities.org/posts.html#2026-03-25" rel="alternate"></link>
    <summary type="html">I&#39;ve got a confession to make: I&#39;ve been an Apple slut for quite a few years.</summary>
    <author>
      <name>Unknown Author</name>
    </author>
  </entry>
  <entry>
    <title>Turning my Thinkpad X230 into a overpowered keyboardSlab</title>
    <updated>2026-03-23T12:39:45Z</updated>
    <id>https://aryak.me/blog/09-x230-slab.html</id>
    <link href="https://aryak.me/blog/09-x230-slab.html" rel="alternate"></link>
    <summary type="html">&#xA;&lt;p&gt;I removed the screen from my laptop—and it’s now more useful than&#xA;before.&lt;/p&gt;&#xA;&lt;p&gt;Anyways, I recently got my hands on a used thinkpad X230 for around&#xA;60$.&lt;/p&gt;&#xA;&lt;p&gt;The machine is great, the keyboard even better, but the TN panel is&#xA;genuinely unusable.&lt;/p&gt;&#xA;&lt;p&gt;For a while, I used it like a laptop as intended, but I can only do&#xA;so much with a TN Panel whose max brightness is my Pixel’s 10%&#xA;brightness.&lt;/p&gt;&#xA;&lt;p&gt;Instead, I decided to cut my losses and just remove the display&#xA;altogether, and use the thinkpad as a keyboard with my monitor.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-hardware&#34;&gt;The Hardware&lt;/h2&gt;&#xA;&lt;p&gt;Doing this was pretty simple, I just had to open up the back of the&#xA;laptop, remove the hinge screws, and then slowly disconnect all the&#xA;wires before removing the display assembly.&lt;/p&gt;&#xA;&lt;p&gt;Additionally, I changed the Wi-Fi card to an atheros one for good&#xA;measure. (God bless Libreboot)&lt;/p&gt;&#xA;&lt;p&gt;Main issue with this, was that the Thinklight is literally impossible&#xA;to remove from the casing, so I kinda had to snap that wire out.&lt;/p&gt;&#xA;&lt;p&gt;I also removed the two wifi antennae that are glued to the display&#xA;casing, and kept it outside so wifi continues to work properly.&lt;/p&gt;&#xA;&lt;p&gt;I kept the webcam too, removed from the case and double tape’d to my&#xA;monitor - since somehow this ancient laptop seems to have a better&#xA;camera than my modern laptop.&lt;/p&gt;&#xA;&lt;p&gt;After doing all this, and very-safely electrical taping all the extra&#xA;wires if i ever decide to put a new display on this, I got a think-slab&#xA;:D&lt;/p&gt;&#xA;&lt;figure&gt;&#xA;&lt;img src=&#34;/static/blog/photo_2026-02-13_23-53-23.jpg&#34;&#xA;alt=&#34;After shot of my setup&#34; /&gt;&#xA;&lt;figcaption aria-hidden=&#34;true&#34;&gt;After shot of my setup&lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&lt;p&gt;However, I had to add a few cmdline arguments on grub to make it&#xA;work.&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb1&#34;&gt;&lt;pre&#xA;class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb1-1&#34;&gt;&lt;a href=&#34;#cb1-1&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;/etc/default/grub:&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-2&#34;&gt;&lt;a href=&#34;#cb1-2&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb1-3&#34;&gt;&lt;a href=&#34;#cb1-3&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;&lt;span class=&#34;va&#34;&gt;GRUB_CMDLINE_LINUX_DEFAULT&lt;/span&gt;&lt;span class=&#34;op&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;st&#34;&gt;&amp;quot;quiet iomem=relaxed i915.modeset=1 video=LVDS-1:d video=VDA-1:e&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;The first 3 are common grub parameters that you always have, while&#xA;the last 2 are the special ones you need to add the :d parameter&#xA;disables LVDS-1 (internal display), and the :e parameter enables VDA-1&#xA;(in my case, the external display)&lt;/p&gt;&#xA;&lt;p&gt;An &lt;code&gt;update-grub&lt;/code&gt; later, everything magically started&#xA;appearing on my monitor!&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-software&#34;&gt;The software&lt;/h2&gt;&#xA;&lt;p&gt;This worked great for research and other random stuff I did, but a&#xA;laptop from 2012 can only do so much in terms of computing.&lt;/p&gt;&#xA;&lt;p&gt;To remedy this, I decided to just use the thinkpad keyboard with my&#xA;modern laptop using software KVM. Since my monitor has both VGA and&#xA;HDMI, I was able to connect my modern laptop to the HDMI port, and the&#xA;thinkpad to VGA.&lt;/p&gt;&#xA;&lt;p&gt;Though I was just planning on using barrier like I did year’s ago, I&#xA;decided to go with &lt;a&#xA;href=&#34;https://github.com/feschber/lan-mouse&#34;&gt;Lan-Mouse&lt;/a&gt; this&#xA;time.&lt;/p&gt;&#xA;&lt;p&gt;It is a rust-based application similar to synergy and barrier, but&#xA;with a proper gtk UI and supposedly better performance.&lt;/p&gt;&#xA;&lt;p&gt;Now, since I have a wireless card that’s older than me on the&#xA;thinkpad, I had to do some ethernet magic for lan mouse if I wanted any&#xA;sort of real performance. Software KVM is a high-bandwidth task after&#xA;all.&lt;/p&gt;&#xA;&lt;p&gt;So I connected an ethernet cable between the two laptops, and set it&#xA;up as follows&lt;/p&gt;&#xA;&lt;div class=&#34;sourceCode&#34; id=&#34;cb2&#34;&gt;&lt;pre&#xA;class=&#34;sourceCode bash&#34;&gt;&lt;code class=&#34;sourceCode bash&#34;&gt;&lt;span id=&#34;cb2-1&#34;&gt;&lt;a href=&#34;#cb2-1&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;# On Modern laptop&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb2-2&#34;&gt;&lt;a href=&#34;#cb2-2&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;nmcli&lt;/span&gt; con add type ethernet ifname enp2s0 ip4 192.168.50.1/24&lt;/span&gt;&#xA;&lt;span id=&#34;cb2-3&#34;&gt;&lt;a href=&#34;#cb2-3&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;&lt;span class=&#34;co&#34;&gt;# On Thinkpad&lt;/span&gt;&lt;/span&gt;&#xA;&lt;span id=&#34;cb2-4&#34;&gt;&lt;a href=&#34;#cb2-4&#34; aria-hidden=&#34;true&#34; tabindex=&#34;-1&#34;&gt;&lt;/a&gt;&lt;span class=&#34;ex&#34;&gt;nmcli&lt;/span&gt; con add type ethernet ifname eno0 ip4 192.168.50.2/24&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;&lt;p&gt;And magically, I have a Gigabit connection between the two laptops&#xA;for Lan-Mouse to work through. Lan mouse is pretty intuitive to setup,&#xA;so im not covering it here.&lt;/p&gt;&#xA;&lt;p&gt;In conclusion, this one day’s work turned out pretty well for me. I&#xA;now have a speedy “slabtop” for any research or minor work that I have,&#xA;and it doesn’t even take 5 minutes for this setup to convert into a&#xA;high-performance workstation either.&lt;/p&gt;&#xA;&lt;p&gt;I’m still using the X230 without lan-mouse for home usage, when I’m&#xA;too lazy to get my laptop out of my bag, but this setup really helps me&#xA;when I need to get some real programming work done, which is 10x harder&#xA;without such a comfy keyboard like that of the X230.&lt;/p&gt;</summary>
    <author>
      <name>Arya Kiran</name>
    </author>
  </entry>
  <entry>
    <title>We Need To Talk</title>
    <updated>2026-03-22T13:21:00Z</updated>
    <id>https://tech-absurdist.neocities.org/posts.html#2026-03-22</id>
    <link href="https://tech-absurdist.neocities.org/posts.html#2026-03-22" rel="alternate"></link>
    <summary type="html">Let’s talk about Windows.</summary>
    <author>
      <name>Unknown Author</name>
    </author>
  </entry>
  <entry>
    <title>exocon26 talk</title>
    <updated>2026-03-21T21:30:00Z</updated>
    <id>https://tech-absurdist.neocities.org/posts.html#2026-03-21</id>
    <link href="https://tech-absurdist.neocities.org/posts.html#2026-03-21" rel="alternate"></link>
    <summary type="html">Extended notes from my talk titled “The Web 4.0 We Never Had” at exocon26 held on 2026-03-21 13:00 UTC on BigBlueButton.</summary>
    <author>
      <name>Unknown Author</name>
    </author>
  </entry>
</feed>