<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title> - WebDev</title>
    <link rel="self" type="application/atom+xml" href="https://www.jessestuart.ca/tags/webdev/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://www.jessestuart.ca"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-07-05T00:00:00+00:00</updated>
    <id>https://www.jessestuart.ca/tags/webdev/atom.xml</id>
    <entry xml:lang="en">
        <title>Implementing Dark Mode Toggle without JavaScript</title>
        <published>2025-10-12T00:00:00+00:00</published>
        <updated>2026-07-05T00:00:00+00:00</updated>
        
        <author>
          <name>Jesse Stuart</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://www.jessestuart.ca/posts/2025-10-12-implementing-dark-mode-toggle-without-javascript/"/>
        <id>https://www.jessestuart.ca/posts/2025-10-12-implementing-dark-mode-toggle-without-javascript/</id>
        
        <content type="html" xml:base="https://www.jessestuart.ca/posts/2025-10-12-implementing-dark-mode-toggle-without-javascript/">&lt;p&gt;&lt;strong&gt;TL;DR;&lt;/strong&gt; The &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/light-dark&quot;&gt;&lt;code&gt;light-dark&lt;/code&gt;&lt;/a&gt; CSS function in conjunction with &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme&quot;&gt;&lt;code&gt;color-scheme&lt;/code&gt;&lt;/a&gt; make it easy to implement dark mode, and one can implement a toggle in pure CSS/HTML with a combination of the &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme&quot;&gt;&lt;code&gt;prefers-color-scheme&lt;/code&gt;&lt;/a&gt; media query with a radio button group and emoji.&lt;/p&gt;
&lt;p&gt;This past week I was finally getting around to re-doing my website (and adding this blog)—the old one had been not much more than a clone of my Instagram feed. I was feeling inspired by &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://lyra.horse/blog/2025/08/you-dont-need-js&quot;&gt;Lyra’s You no longer need JavaScript post&lt;/a&gt;, and decided to challenge myself to avoid using JavaScript and images.&lt;/p&gt;
&lt;p&gt;Since I was starting fresh, it didn’t add much effort to use the CSS &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/light-dark&quot;&gt;&lt;code&gt;light-dark&lt;/code&gt;&lt;/a&gt; function to decide both the light and dark color for everything. And setting &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/color-scheme#values&quot;&gt;&lt;code&gt;color-scheme: light dark&lt;/code&gt;&lt;/a&gt; in &lt;code&gt;:root&lt;/code&gt; to enable both branches of that function was just one extra line. At this point my color scheme would change when toggling dark mode on my operating system, yay!&lt;/p&gt;
&lt;p&gt;But wouldn’t it be nice if people visiting my website could decide which color mode they prefer independently of their operating system’s setting? Lyra &lt;a rel=&quot;noopener external&quot; target=&quot;_blank&quot; href=&quot;https://lyra.horse/blog/2025/08/you-dont-need-js/#lunalover&quot;&gt;has a great example of how easy this can be&lt;/a&gt; with just CSS and HTML, and I decided to use that as a starting point for what would look like a single button toggle to whichever color mode isn’t in operation. Go ahead and try it out!—toggle &lt;span class=&quot;color-mode-toggle&quot;&gt;
&lt;label for=&quot;color-mode-dark&quot; title=&quot;Use dark mode&quot; aria-label=&quot;Use dark mode&quot;&gt;
&lt;span aria-hidden=&quot;true&quot;&gt;☾&lt;/span&gt;
&lt;/label&gt;
&lt;label for=&quot;color-mode-light&quot; title=&quot;Use light mode&quot; aria-label=&quot;Use light mode&quot;&gt;
&lt;span aria-hidden=&quot;true&quot;&gt;☼&lt;/span&gt;
&lt;/label&gt;
&lt;label for=&quot;color-mode-auto&quot; title=&quot;Use system light/dark mode setting&quot; aria-label=&quot;Use system light/dark mode setting&quot;&gt;
&lt;span aria-hidden=&quot;true&quot;&gt;&lt;/span&gt;
&lt;/label&gt;
&lt;/span&gt;, and then toggle it on your system and see what happens (it works with or without JavaScript enabled).&lt;/p&gt;
&lt;p&gt;So how does it work? First, we have a radio input group named &lt;code&gt;color-mode&lt;/code&gt;, one for each of light, dark, and auto, each with their own unique id and label (notice how we have the one for auto default to checked):&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;html&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;div&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; id&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-toggle&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; aria-label&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;Toggle light/dark mode&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; aria-role&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;radiogroup&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-dark&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; title&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;Use dark mode&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; aria-label&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;dark mode&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; type&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;radio&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; id&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-dark&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; name&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;span&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; aria-hidden&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;☾&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;span&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;    &amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-light&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; title&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;Use light mode&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; aria-label&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;light mode&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; type&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;radio&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; id&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-light&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; name&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;span&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; aria-hidden&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span&gt;☼&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;span&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;    &amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;    &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; for&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-auto&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; title&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;Use system light/dark mode setting&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; aria-label&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;system setting&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;input&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; type&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;radio&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; id&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-auto&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; name&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; checked&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;checked&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt; /&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;        &amp;lt;&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;span&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; aria-hidden&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;span&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;    &amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;label&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;div&lt;/span&gt;&lt;span class=&quot;z-2&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next we have the base functionality in our &lt;code&gt;:root&lt;/code&gt; to handle overriding the system setting (notice how we don’t need to explicitly handle the auto case since it’s just un-checking one of the others):&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;css&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;color-scheme&lt;/span&gt;&lt;span&gt;: light dark;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt;:has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;#color-mode-light&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt;:checked&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    color-scheme&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; light&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt;:has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;#color-mode-dark&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt;:checked&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    color-scheme&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; dark&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Next we need to give auto a label that matches what the system setting is:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;css&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;@media&lt;/span&gt;&lt;span&gt; (prefers-color-scheme&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span&gt; light) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;    label&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-auto&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; span&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;:after&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;        content&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt; &amp;quot;☼&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;@media&lt;/span&gt;&lt;span&gt; (prefers-color-scheme&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span&gt; dark) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;    label&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-auto&amp;quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; &amp;gt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; span&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;:after&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;        content&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt; &amp;quot;☾&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And finally, it’d be great if only one label was visible at a time, so we’ll use a combination of &lt;code&gt;:checked&lt;/code&gt; and &lt;code&gt;prefers-color-scheme&lt;/code&gt; to hide the ones we don’t need to see:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;css&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt;:has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;#color-mode-light&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt;:checked&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3 z-i&quot;&gt;    /* hide the currently selected mode */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    label&lt;/span&gt;&lt;span&gt;[for=&amp;quot;color-mode-light&amp;quot;] {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;        display&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; none&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3 z-i&quot;&gt;    /* if system setting matches the current selection, hide auto */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    @media&lt;/span&gt;&lt;span&gt; (prefers-color-scheme&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span&gt; light) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;        label&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-auto&amp;quot;&lt;/span&gt;&lt;span&gt;] {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;            display&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; none&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3 z-i&quot;&gt;    /* else, hide the other mode so that only auto is visible */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    @media&lt;/span&gt;&lt;span&gt; (prefers-color-scheme&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span&gt; dark) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;        label&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-dark&amp;quot;&lt;/span&gt;&lt;span&gt;] {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;            display&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; none&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;css&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3 z-i&quot;&gt;/* same as above for dark mode */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt;:has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;#color-mode-dark&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt;:checked&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    label&lt;/span&gt;&lt;span&gt;[for=&amp;quot;color-mode-dark&amp;quot;] {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;        display&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; none&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    @media&lt;/span&gt;&lt;span&gt; (prefers-color-scheme&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span&gt; dark) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;        label&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-auto&amp;quot;&lt;/span&gt;&lt;span&gt;] {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;            display&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; none&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    @media&lt;/span&gt;&lt;span&gt; (prefers-color-scheme&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span&gt; light) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;        label&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-light&amp;quot;&lt;/span&gt;&lt;span&gt;] {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;            display&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; none&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;css&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3 z-i&quot;&gt;/* same as above for auto mode */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt;:has&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;#color-mode-auto&lt;/span&gt;&lt;span class=&quot;z-7&quot;&gt;:checked&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    label&lt;/span&gt;&lt;span&gt;[for=&amp;quot;color-mode-auto&amp;quot;] {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;        display&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; none&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    @media&lt;/span&gt;&lt;span&gt; (prefers-color-scheme&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span&gt; light) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;        label&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-light&amp;quot;&lt;/span&gt;&lt;span&gt;] {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;            display&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; none&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    @media&lt;/span&gt;&lt;span&gt; (prefers-color-scheme&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span&gt; dark) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-4&quot;&gt;        label&lt;/span&gt;&lt;span&gt;[&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-dark&amp;quot;&lt;/span&gt;&lt;span&gt;] {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;            display&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; none&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Now our toggle is always for the color mode that’s not currently in use, regardless of if our site toggle or the system one is used!&lt;/p&gt;
&lt;p&gt;But we also need to hide the input. This will still allow for keyboard navigation (you could just &lt;code&gt;display:none&lt;/code&gt; the input otherwise, the grid is so the icon/emoji is rendered on top of the input):&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;css&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-18&quot;&gt;#color-mode-toggle&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    font-size&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt; 1.5&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;rem&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;    label&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;        display&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; grid&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;        grid-template-columns&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt; 1&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;fr&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;        grid-template-rows&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt; 1&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;fr&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        &amp;gt; &lt;/span&gt;&lt;span class=&quot;z-1&quot;&gt;span&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        &amp;gt; input {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;            grid-column&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt; 1&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;            grid-row&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt; 1&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;            width&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt; 100&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;            height&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt; 100&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt;%&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-15&quot;&gt;        &amp;gt;&lt;/span&gt;&lt;span class=&quot;z-4&quot;&gt; input&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-1&quot;&gt;            appearance&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;z-15 z-i&quot;&gt; none&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;        }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Unfortunately, this is as far as CSS can take us: since it isn’t capable of persisting state across page loads, the toggle will reset if we leave the current page. So we’ll concede and use a bit of JavaScript to enhance the experience when enabled (note that the input elements already need to be in the DOM, so we’ll place the script after them in the HTML):&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3 z-i&quot;&gt;/* Step 1: save user selection in localStorage */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; saveColorModeSelection&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt;mode&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (mode&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; ==&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt; &amp;quot;auto&amp;quot;&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    localStorage&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;removeItem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; else&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    localStorage&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;setItem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span&gt; mode)&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;let&lt;/span&gt;&lt;span&gt; darkModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; =&lt;/span&gt;&lt;span&gt; document&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-dark&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;darkModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;change&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt;e&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (e&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;checked) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-18&quot;&gt;    saveColorModeSelection&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;dark&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;let&lt;/span&gt;&lt;span&gt; lightModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; =&lt;/span&gt;&lt;span&gt; document&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-light&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;lightModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;change&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt;e&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (e&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;checked) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-18&quot;&gt;    saveColorModeSelection&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;light&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;let&lt;/span&gt;&lt;span&gt; autoModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; =&lt;/span&gt;&lt;span&gt; document&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;getElementById&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode-auto&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;autoModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;change&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt;e&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (e&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;target&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;checked) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-18&quot;&gt;    saveColorModeSelection&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;auto&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3 z-i&quot;&gt;/* Step 2: apply user selection on page load */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;let&lt;/span&gt;&lt;span&gt; colorMode&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; =&lt;/span&gt;&lt;span&gt; localStorage&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;getItem&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;color-mode&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;switch&lt;/span&gt;&lt;span&gt; (colorMode) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;  case&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt; &amp;quot;light&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    lightModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;checked&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt; true&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    break&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;  case&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt; &amp;quot;dark&amp;quot;&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    darkModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;checked&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt; true&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    break&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;  default&lt;/span&gt;&lt;span&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    autoModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;checked&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt; true&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    break&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And, if you’d like to upgrade the keyboard navigation experience, simply add an event listener to auto-focus the next input while toggling (otherwise you’ll get inconsistent behaviour when tabbing depending on which input you selected):&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt; isDisplayNone&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt;elem&lt;/span&gt;&lt;span&gt;) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;  return&lt;/span&gt;&lt;span&gt; window&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;getComputedStyle&lt;/span&gt;&lt;span&gt;(elem)&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;display&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; ===&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt; &amp;quot;none&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;[darkModeInput&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span&gt; lightModeInput&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span&gt; autoModeInput]&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;forEach&lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt;input&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  input&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;change&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt;e&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;    if&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;!&lt;/span&gt;&lt;span&gt;input&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;checked) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;      return&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    [darkModeInput&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span&gt; lightModeInput&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span&gt; autoModeInput]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-15&quot;&gt;      .&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;find&lt;/span&gt;&lt;span&gt;((&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt;input&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;        let&lt;/span&gt;&lt;span&gt; label&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; =&lt;/span&gt;&lt;span&gt; input&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;parentElement&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;        return&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; !&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;isDisplayNone&lt;/span&gt;&lt;span&gt;(label)&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;      })&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-15&quot;&gt;      .&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;focus&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  })&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I originally also included this last snippet to erase the user selection when the system mode changes to match:&lt;/p&gt;
&lt;pre class=&quot;giallo z-code&quot; &gt;&lt;code data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-3 z-i&quot;&gt;/* Optional step 3: Erase user selection when system mode changes to match */&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;window&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;matchMedia&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;(prefers-color-scheme: light)&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;change&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt;e&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (e&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;matches&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; lightModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;checked) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    autoModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;checked&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt; true&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-18&quot;&gt;    saveColorModeSelection&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;auto&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;window&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;matchMedia&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;(prefers-color-scheme: dark)&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;z-18&quot;&gt;addEventListener&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;change&amp;quot;&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;,&lt;/span&gt;&lt;span&gt; (&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt;e&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-17&quot;&gt; =&amp;gt;&lt;/span&gt;&lt;span&gt; {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-17&quot;&gt;  if&lt;/span&gt;&lt;span&gt; (e&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;matches&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; &amp;amp;&amp;amp;&lt;/span&gt;&lt;span&gt; darkModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;checked) {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;    autoModeInput&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt;.&lt;/span&gt;&lt;span&gt;checked&lt;/span&gt;&lt;span class=&quot;z-15&quot;&gt; =&lt;/span&gt;&lt;span class=&quot;z-12&quot;&gt; true&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span class=&quot;z-18&quot;&gt;    saveColorModeSelection&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span class=&quot;z-10&quot;&gt;&amp;quot;auto&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;giallo-l&quot;&gt;&lt;span&gt;})&lt;/span&gt;&lt;span class=&quot;z-9&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;But I’m not 100% sure about the UX of this; While I think this is &lt;em&gt;sometimes&lt;/em&gt; what the user wants, it could also get really annoying for someone who always wants to experience my website in one mode or another, and there’s always the option to use the system setting if you want it to auto-transition. I do think the UX of erasing the preference when manually changing the mode to match the system is correct though, since I think it’d be very annoying if overriding that setting once made you have to always manually toggle it (or manually clear the &lt;code&gt;localStorage&lt;/code&gt; variable). Of course, we &lt;em&gt;could&lt;/em&gt; have a &lt;label for=&quot;dialog-settings-toggle&quot; class=&quot;dialog-toggle&quot; aria-controls=&quot;settings&quot; role=&quot;button&quot; title=&quot;Open Settings Dialog&quot; aria-label=&quot;Open Settings Dialog&quot;&gt;
⛭
&lt;/label&gt; button somewhere to manage such preferences, but I think that’s probably overkill for a blog 😉.&lt;/p&gt;
</content>
        
    </entry>
</feed>
