<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/rss/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Stefan Judis Web Development</title>
  <subtitle>All my blog posts</subtitle>
  <link href="https://www.stefanjudis.com/rss.xml" rel="self"/>
  <link href="https://www.stefanjudis.com/"/>
  <updated>2026-04-12T22:00:00+00:00</updated>
  <id>https://www.stefanjudis.com/</id>
  <author>
    <name>Stefan Judis</name>
    <email>stefanjudis@gmail.com</email>
  </author>
    
    <entry>
      <title>Web Weekly #189 (#blogPost)</title>
      <link href="https://www.stefanjudis.com/blog/web-weekly-189/"/>
      <published>2026-04-12T22:00:00+00:00</published>
      <updated>2026-04-12T22:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/blog/web-weekly-189/</id>
      <category term="blogPost"></category>
        <category term="Newsletter"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="guten-tag!-guten-tag!-%F0%9F%91%8B" href="#guten-tag!-guten-tag!-%F0%9F%91%8B">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="guten-tag!-guten-tag!-%F0%9F%91%8B">Guten Tag! Guten Tag! 👋</h2></div><p>Are you excited about <code>sizes=&quot;auto&quot;</code> landing in browsers? Did you ever run into issues with the <code>bfcache</code> and didn't know what to do? Or are you looking for a native way to lazy load videos?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <p><a href="https://boris.schapira.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fboris.schapira.dev%2F')">Boris</a> listens to <a href="https://www.youtube.com/watch?v=ZvIzmTiYoPo" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DZvIzmTiYoPo')">Wheatus - Teenage Dirtbag</a> and says:</p>
<blockquote>
<p>I'm currently rediscovering Teenage Dirtbag and <a href="https://www.youtube.com/watch?v=4hWxLz29Dy4" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D4hWxLz29Dy4')">the story behind the song</a>. Maybe you'll find it interesting too!</p>
</blockquote>
</div><p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>four more songs</strong> left in the queue.</p>
<hr aria-hidden="true"><p>A big thank you and <strong>a huge bag of karma points go to Mathias this week</strong>. Thank you for supporting indie publishing in the times of AI slop by covering a small fraction of the cost it takes to send Web Weekly every week! ❤️</p>
<p>You can support Web Weekly on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</p>
<p>And if you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mjezynjh6j2r">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116397781027783395" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffront-end.social%2F%40stefan%2F116397781027783395')">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_web-weekly-189-just-went-out-this-one-share-7449458708599889920-I89W" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.linkedin.com%2Fposts%2Fstefan-judis_web-weekly-189-just-went-out-this-one-share-7449458708599889920-I89W')">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you!</p>
<hr aria-hidden="true"><div class="highlightBox sponsored margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-sponsored"/>
            </svg>
          </div>
        

      <div class="highlightBox__pill">Sponsored</div>
      <div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="practice-real-frontend-interviews" href="#practice-real-frontend-interviews">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="practice-real-frontend-interviews">Practice Real Frontend Interviews</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(228,196,76); --color2: rgb(131,131,132); --color3: rgb(220,196,76); --color4: rgb(188,188,188); --color5: rgb(62,62,59);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQ4Ij48cGF0aCBmaWxsPSIjM2UzZTNiIiBkPSJNMCAwaDMwMHYxNDhIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxwYXRoIGZpbGw9IiNmZmZmMGQiIGQ9Ik03NCA5OGg5NHYxN0g3NHoiLz48Y2lyY2xlIHI9IjEiIHRyYW5zZm9ybT0ibWF0cml4KDgzLjQ5MjM4IC0xMjIuMzk1MjUgMzcuNzkxNSAyNS43Nzk2MSAyMzQuNCA5Mi4xKSIvPjxlbGxpcHNlIGN4PSIyNSIgY3k9IjkyIiBmaWxsPSIjMGQwZDEwIiByeD0iNTIiIHJ5PSI3NCIvPjxlbGxpcHNlIGN4PSIxMjQiIGN5PSIxNSIgZmlsbD0iI2QwZDBkMiIgcng9IjExMyIgcnk9IjQiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMxZjFmMjEiIHRyYW5zZm9ybT0ibWF0cml4KC0xMTUuNTk5NzUgMy41Njg5NyAtMS4yMzIwNSAtMzkuOTA2NDggMTMwLjIgNTguNikiLz48cGF0aCBmaWxsPSIjOTU5NTk0IiBkPSJNMzkgMzloMTgzdjZIMzl6Ii8+PHBhdGggZmlsbD0iIzA0MDQwNyIgZD0iTTAgMGgyNTJ2MTBIMHoiLz48cGF0aCBmaWxsPSIjMDAwMDAxIiBkPSJtNzIuMiAxMzgtLjQtMjIgMTA2LTIgLjQgMjJ6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=avif&fit=scale&q=75&w=300&h=148 300w, https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=avif&fit=scale&q=75&w=500&h=248 500w, https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=avif&fit=scale&q=75&w=700&h=347 700w, https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=avif&fit=scale&q=75&w=900&h=446 900w, https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=avif&fit=scale&q=75&w=1100&h=546 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=webp&fit=scale&q=75&w=300&h=148 300w, https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=webp&fit=scale&q=75&w=500&h=248 500w, https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=webp&fit=scale&q=75&w=700&h=347 700w, https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=webp&fit=scale&q=75&w=900&h=446 900w, https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=webp&fit=scale&q=75&w=1100&h=546 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="496"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=jpg&fit=scale&q=75&w=300&h=148 300w, https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=jpg&fit=scale&q=75&w=500&h=248 500w, https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=jpg&fit=scale&q=75&w=700&h=347 700w, https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=jpg&fit=scale&q=75&w=900&h=446 900w, https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png?fm=jpg&fit=scale&q=75&w=1100&h=546 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4n8lDu2jwxi6uM1brKD97p/5e3cd785f859a6b3da7ba150c06a325b/Screenshot_2026-04-13_at_10.57.39.png"
                alt="Frontend Interview Coming Up? Practice real frontend problems. 500+ questions with solitions and test cases. Coding, questions, and system design."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>FrontendAtlas helps frontend engineers prepare with practical coding challenges, frontend interview questions, and a frontend system design blueprint. Built for JavaScript, React, Angular and Vue interviews — with implementation-heavy practice instead of generic puzzle grind.</p>
<p><a class="btn btn__small" href="https://frontendatlas.com?utm_campaign=web-weekly">Start practicing for free</a></p>
<p><small>Web Weekly is open for sponsorships. When you want to reach 6k developers, <a href="https://webweekly.email/sponsor">you know what to do</a>!</small></p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="something-that-made-me-smile-this-week" href="#something-that-made-me-smile-this-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="something-that-made-me-smile-this-week">Something that made me smile this week</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(127.5,127.5,127.5); --color2: rgb(118,118,118); --color3: rgb(188.7,188.7,188.7); --color4: rgb(188,188,188); --color5: rgb(52,52,52);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgNjQiPjxwYXRoIGZpbGw9IiMzNDM0MzQiIGQ9Ik0wIDBoMzAwdjY0SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxNjMiIGN5PSIyMSIgcj0iMTc1IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTY4IiBjeT0iNiIgcj0iMTc1IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTY4IiBjeT0iMzYiIHI9IjE3MiIgZmlsbD0iI2ZmZiIvPjxlbGxpcHNlIGN4PSIxMTAiIGN5PSIxNiIgZmlsbD0iIzU5NTk1OSIgcng9IjE4MSIgcnk9IjMiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KC0xOTguMzc1MSAxNy4zNTU1NyAtMS4yMjI5NiAtMTMuOTc4NTMgMTA2LjQgNTQpIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTkuNiA1NS4zLTE3LS42IDEuOC01NCAxNyAuNnoiLz48ZWxsaXBzZSBjeD0iMTI5IiBjeT0iMzAiIGZpbGw9IiM5MjkyOTIiIHJ4PSIxMTkiIHJ5PSIzIi8+PGVsbGlwc2UgY3g9IjE3MCIgY3k9IjMiIGZpbGw9IiNmZmYiIHJ4PSIyNDgiIHJ5PSIxMCIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=avif&fit=scale&q=75&w=300&h=64 300w, https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=avif&fit=scale&q=75&w=500&h=108 500w, https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=avif&fit=scale&q=75&w=700&h=151 700w, https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=avif&fit=scale&q=75&w=900&h=194 900w, https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=avif&fit=scale&q=75&w=1100&h=238 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=webp&fit=scale&q=75&w=300&h=64 300w, https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=webp&fit=scale&q=75&w=500&h=108 500w, https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=webp&fit=scale&q=75&w=700&h=151 700w, https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=webp&fit=scale&q=75&w=900&h=194 900w, https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=webp&fit=scale&q=75&w=1100&h=238 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="216"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=jpg&fit=scale&q=75&w=300&h=64 300w, https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=jpg&fit=scale&q=75&w=500&h=108 500w, https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=jpg&fit=scale&q=75&w=700&h=151 700w, https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=jpg&fit=scale&q=75&w=900&h=194 900w, https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png?fm=jpg&fit=scale&q=75&w=1100&h=238 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4le3ron0Gj7HpCwvz1F6P7/69a068de70a7a2e0f1697a5a7b87b501/Screenshot_2026-04-09_at_07.54.15.png"
                alt="What happens when you name everything Copilot? An attempt to map every product, app, and service that Microsoft has launched with the name &quot;Copilot&quot;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Naming is hard, I get it. But it seems more like Microsoft has given up on giving AI features another name than <code>copilot</code>.</p>
<p><a class="btn btn__small" href="https://teybannerman.com/strategy/2026/03/31/how-many-microsoft-copilot-are-there.html">Name everything the same</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="no-code" href="#no-code">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="no-code">No code</h2></div><ul>
<li><a href="https://andrewmurphy.io/blog/if-you-thought-the-speed-of-writing-code-was-your-problem-you-have-bigger-problems" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fandrewmurphy.io%2Fblog%2Fif-you-thought-the-speed-of-writing-code-was-your-problem-you-have-bigger-problems')">If you thought the speed of writing code was your problem - you have bigger problems</a> → &quot;If you want to ship faster, look at where things are waiting.&quot;</li>
<li><a href="https://blog.jim-nielsen.com/2026/vibe-dreams-didnt-come-true/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fblog.jim-nielsen.com%2F2026%2Fvibe-dreams-didnt-come-true%2F')">I Tried Vibing an RSS Reader and My Dreams Did Not Come True</a> → &quot;The making from nothing isn't as hard anymore. But everything after that still is.&quot;</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="not-existing-%60font-family%60-fallbacks" href="#not-existing-%60font-family%60-fallbacks">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="not-existing-%60font-family%60-fallbacks">Not existing <code>font-family</code> fallbacks</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(194,116,119); --color2: rgb(138,81,89); --color3: rgb(214.557,162.84300000000002,164.83199999999997); --color4: rgb(158,188,130); --color5: rgb(51,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTM1Ij48cGF0aCBmaWxsPSIjMzMzYzU0IiBkPSJNMCAwaDMwMHYxMzVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzAwMDIwOSIgdHJhbnNmb3JtPSJtYXRyaXgoLTE2OC40NDMyIDM2LjcyNjU2IC0yNi4wNDMxNCAtMTE5LjQ0NDY0IDE0NSA0Ny44KSIvPjxwYXRoIGZpbGw9IiM1ZTZlNjQiIGQ9Ik02MSA1NWgxMzZ2N0g2MXoiLz48cGF0aCBmaWxsPSIjMDMwZDI3IiBkPSJtMTM5IDEwNC0xNTUtMyA2OSAzMHoiLz48cGF0aCBmaWxsPSIjNzg0MzRlIiBkPSJtNDIuOCA0MC4yIDE2LjYuMi4xIDcuOC02LjktMS45eiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzA2MTEyYSIgdHJhbnNmb3JtPSJtYXRyaXgoMjAyLjI4MDIzIC0uNTYyMTEgLjA0MTc4IDE1LjAzNjAzIDEzMi43IDApIi8+PGVsbGlwc2UgY3g9IjIxMCIgY3k9IjExNSIgZmlsbD0iIzA0MGUyNiIgcng9IjEwNyIgcnk9IjEzIi8+PHBhdGggZmlsbD0iIzE5MWYyYyIgZD0ibTkxLjYgMzAuNyA2NS41IDM5LjUgMTQuOC0zNC4zLTQuNSA2MC44eiIvPjxwYXRoIGZpbGw9IiMwNjExMjkiIGQ9Im0yNjguNSAxMjYuNy0yOS0uNSAyLTExNSAyOSAuNnoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=avif&fit=scale&q=75&w=300&h=135 300w, https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=avif&fit=scale&q=75&w=500&h=226 500w, https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=avif&fit=scale&q=75&w=700&h=317 700w, https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=avif&fit=scale&q=75&w=900&h=407 900w, https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=avif&fit=scale&q=75&w=1100&h=498 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=webp&fit=scale&q=75&w=300&h=135 300w, https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=webp&fit=scale&q=75&w=500&h=226 500w, https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=webp&fit=scale&q=75&w=700&h=317 700w, https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=webp&fit=scale&q=75&w=900&h=407 900w, https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=webp&fit=scale&q=75&w=1100&h=498 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="453"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=jpg&fit=scale&q=75&w=300&h=135 300w, https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=jpg&fit=scale&q=75&w=500&h=226 500w, https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=jpg&fit=scale&q=75&w=700&h=317 700w, https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=jpg&fit=scale&q=75&w=900&h=407 900w, https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png?fm=jpg&fit=scale&q=75&w=1100&h=498 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3QGA8OOb1KKZ4kbcOdSJF8/2125113360d739633491793137cbd65d/Screenshot_2026-04-12_at_11.13.12.png"
                alt="h1 {   font-family: &quot;Open Sans&quot;; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you sometimes see Times New Roman flashing somewhere, Harry describes that the issue is most likely incorrect <code>font-family</code> properties. It might seem obvious, but I bet many people have these issues in their stylesheets.</p>
<p><a class="btn btn__small" href="https://csswizardry.com/2026/04/font-family-doesnt-fall-back-the-way-you-think/">Fall back properly</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="%60bfcache%60-problems" href="#%60bfcache%60-problems">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="%60bfcache%60-problems"><code>bfcache</code> problems</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(113,169,229); --color2: rgb(84,121,166); --color3: rgb(217,192,130); --color4: rgb(172,175,189); --color5: rgb(51,67,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTYyIj48cGF0aCBmaWxsPSIjMzM0MzUzIiBkPSJNMCAwaDMwMHYxNjJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyOSIgY3k9Ijc5IiByPSIxNTMiIGZpbGw9IiMwNjAyMGYiLz48ZWxsaXBzZSBjeD0iMTA0IiBjeT0iNTUiIGZpbGw9IiMzYzNhNDEiIHJ4PSI3MSIgcnk9IjM0Ii8+PHBhdGggZmlsbD0iIzUyNjI2ZSIgZD0iTTE4IDI0aDE3NXY0SDE4eiIvPjxlbGxpcHNlIGN4PSIxMTUiIGN5PSI4NCIgZmlsbD0iIzYzNWM1YSIgcng9Ijc3IiByeT0iMyIvPjxwYXRoIGZpbGw9IiM2NjY1NjUiIGQ9Ik0zNyA0NGgxNTF2NEgzN3oiLz48cGF0aCBmaWxsPSIjNTg2YzU5IiBkPSJNNDAgNjNoMTgzdjRINDB6Ii8+PHBhdGggZmlsbD0iIzhjNTc1MiIgZD0iTTc5IDU0aDkydjRINzl6Ii8+PGVsbGlwc2UgY3g9IjE2MyIgY3k9IjEzNCIgZmlsbD0iIzAxMGIyNCIgcng9IjI1NSIgcnk9IjciLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=avif&fit=scale&q=75&w=300&h=163 300w, https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=avif&fit=scale&q=75&w=500&h=273 500w, https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=avif&fit=scale&q=75&w=700&h=382 700w, https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=avif&fit=scale&q=75&w=900&h=491 900w, https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=avif&fit=scale&q=75&w=1100&h=601 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=webp&fit=scale&q=75&w=300&h=163 300w, https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=webp&fit=scale&q=75&w=500&h=273 500w, https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=webp&fit=scale&q=75&w=700&h=382 700w, https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=webp&fit=scale&q=75&w=900&h=491 900w, https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=webp&fit=scale&q=75&w=1100&h=601 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="546"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=jpg&fit=scale&q=75&w=300&h=163 300w, https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=jpg&fit=scale&q=75&w=500&h=273 500w, https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=jpg&fit=scale&q=75&w=700&h=382 700w, https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=jpg&fit=scale&q=75&w=900&h=491 900w, https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png?fm=jpg&fit=scale&q=75&w=1100&h=601 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3jWwrFQjsMbLJZYVcVHMlk/a9387d68af9ec9a7d671b29cca1e1c1f/Screenshot_2026-04-12_at_10.48.04.png"
                alt="self.addEventListener(&apos;pageshow&apos;, (event) =&gt; { if(event.persisted) { let theme = localStorage.getItem(&apos;theme&apos;); let root = document.documentElement; root.classList.remove(&apos;light-theme&apos;, &apos;dark-theme&apos;); if (theme) { root.classList.add(`${theme}-theme`);}}});"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Guilherme wanted to implement a quick and easy theme toggle on his site and discovered that sometimes things aren't that easy.</p>
<blockquote>
<p>If I had kept it simple (just a regular dark mode using @media (prefers-color-scheme: dark) and light-dark()) I wouldn’t have hit so many problems.</p>
</blockquote>
<p>I've discovered the same when implementing the theme toggle on <code>webweekly<wbr>.email</code>. Regardless, it's a good read on the BFCache, <code>pageshow</code> events and how you can work around aggressive but very welcome browser caching behavior.</p>
<p><a class="btn btn__small" href="https://guilhermesimoes.github.io/blog/making-dark-mode-work-with-bfcache">Tweak the cache</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="why-(and-how)-mdn-was-rebuilt-without-react" href="#why-(and-how)-mdn-was-rebuilt-without-react">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="why-(and-how)-mdn-was-rebuilt-without-react">Why (and how) MDN was rebuilt without React</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(44,91,181); --color2: rgb(156,148,116); --color3: rgb(251,242,202); --color4: rgb(213,205,170); --color5: rgb(71,69,62);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQ0Ij48cGF0aCBmaWxsPSIjNDc0NTNlIiBkPSJNMCAwaDMwMHYxNDRIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0NyIgY3k9IjUwIiByPSIxNzEiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxNDEiIGN5PSI2MSIgcj0iMTU3IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09Im1hdHJpeCgtNS45MDg4NiAtNzUuMDc5MTUgMTcwLjQ5MjUgLTEzLjQxODA1IDEyNy42IDM4LjcpIi8+PGNpcmNsZSBjeD0iMjIwIiBjeT0iMzYiIHI9IjY0IiBmaWxsPSIjZmZmIi8+PGVsbGlwc2UgY3g9Ijk1IiBjeT0iMTciIGZpbGw9IiM2YTZhNmMiIHJ4PSI3NCIgcnk9IjMiLz48cGF0aCBmaWxsPSIjNTM3MTg0IiBkPSJNMTQgODNoMTA3djVIMTR6Ii8+PHBhdGggZmlsbD0iIzVmNzg5NiIgZD0iTTE2NyAxMDBoNzF2OWgtNzF6Ii8+PHBhdGggZmlsbD0iIzU3ODdiNyIgZD0iTTE2IDM5aDE0MnY1SDE2eiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=avif&fit=scale&q=75&w=300&h=144 300w, https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=avif&fit=scale&q=75&w=500&h=241 500w, https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=avif&fit=scale&q=75&w=700&h=338 700w, https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=avif&fit=scale&q=75&w=900&h=434 900w, https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=avif&fit=scale&q=75&w=1100&h=531 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=webp&fit=scale&q=75&w=300&h=144 300w, https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=webp&fit=scale&q=75&w=500&h=241 500w, https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=webp&fit=scale&q=75&w=700&h=338 700w, https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=webp&fit=scale&q=75&w=900&h=434 900w, https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=webp&fit=scale&q=75&w=1100&h=531 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="483"
                srcset="https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=jpg&fit=scale&q=75&w=300&h=144 300w, https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=jpg&fit=scale&q=75&w=500&h=241 500w, https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=jpg&fit=scale&q=75&w=700&h=338 700w, https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=jpg&fit=scale&q=75&w=900&h=434 900w, https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png?fm=jpg&fit=scale&q=75&w=1100&h=531 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/KbaNsWBBsSjHC5p59ajFN/62642beb28683edc7b1d53ac58ff3909/Screenshot_2026-04-08_at_09.39.10.png"
                alt="Search dialog with the question &quot;Under the hood of MDN&apos;s new frontend&quot;. The Answers: HTML, CSS, JavaScript and Web APIs"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I remember when MDN got a little style overhaul last year, but I didn't realize that it was an entire rebuild to drop React. The team responsible realized that React might not have been the best choice because:</p>
<blockquote>
<p>Our React app was merely a wrapper around our static content.</p>
</blockquote>
<p>MDN is a massive collection of docs pages with occasional demo or UI sprinkles. So what are they doing now? The new (current?) MDN is built with a custom render pipeline and Lit web components.</p>
<p>The article is a great read to learn more!</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/blog/mdn-front-end-deep-dive/">Consider simple architecture</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-accessibility-report-of-the-top-1%2C000%2C000-home-pages" href="#the-accessibility-report-of-the-top-1%2C000%2C000-home-pages">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-accessibility-report-of-the-top-1%2C000%2C000-home-pages">The accessibility report of the top 1,000,000 home pages</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(27,104,154); --color2: rgb(106,156,187); --color3: rgb(164,196,212); --color4: rgb(148,181,206); --color5: rgb(52,52,52);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTYyIj48cGF0aCBmaWxsPSIjMzQzNDM0IiBkPSJNMCAwaDMwMHYxNjJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyOCIgY3k9IjY3IiByPSIxNzEiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxNTEiIGN5PSI2OSIgcj0iMTY5IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTEyIiBjeT0iODIiIHI9IjE3MiIgZmlsbD0iI2ZmZiIvPjxlbGxpcHNlIGN4PSIxMjMiIGN5PSI1OCIgZmlsbD0iI2ZmZiIgcng9IjI1NSIgcnk9IjcwIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjYjFiMWIxIiB0cmFuc2Zvcm09Im1hdHJpeCg4Ny45NjEzOSAuMTI5NTQgLS4wMDM2IDIuNDM4MzQgMTYxLjggMjApIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09Im1hdHJpeCgtMTEyLjY1NTAzIC0yLjA4OTQ4IC44NDY1MSAtNDUuNjM5ODEgMTM2LjUgNjgpIi8+PHBhdGggZmlsbD0iI2I5YzBjOCIgZD0iTTM1IDEyN2gyMDB2MTJIMzV6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjOGJiMWNhIiB0cmFuc2Zvcm09Im1hdHJpeCgtLjIyNjY1IC0uOTczOTggNzAuMDAxMSAtMTYuMjg5NzYgNjQgODguNCkiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=avif&fit=scale&q=75&w=300&h=163 300w, https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=avif&fit=scale&q=75&w=500&h=273 500w, https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=avif&fit=scale&q=75&w=700&h=382 700w, https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=avif&fit=scale&q=75&w=900&h=491 900w, https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=avif&fit=scale&q=75&w=1100&h=601 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=webp&fit=scale&q=75&w=300&h=163 300w, https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=webp&fit=scale&q=75&w=500&h=273 500w, https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=webp&fit=scale&q=75&w=700&h=382 700w, https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=webp&fit=scale&q=75&w=900&h=491 900w, https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=webp&fit=scale&q=75&w=1100&h=601 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="546"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=jpg&fit=scale&q=75&w=300&h=163 300w, https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=jpg&fit=scale&q=75&w=500&h=273 500w, https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=jpg&fit=scale&q=75&w=700&h=382 700w, https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=jpg&fit=scale&q=75&w=900&h=491 900w, https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png?fm=jpg&fit=scale&q=75&w=1100&h=601 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6hKIcc9QBErXApVJoVpl8z/db1f5f073495135cc5a2200234f02baa/Screenshot_2026-04-13_at_14.40.37.png"
                alt="The text &quot;This chart shows the number of ARIA attributes per home page over time&quot; next to a graph with exploding ARIA attribute usage."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Once a year, WebAIM analyzes the top 1,000,000 home pages for accessibility issues and it's been looking good (or at least better) for a while but now the overall state of the web is getting worse again.</p>
<p>There are now more errors, more ARIA usage and an overall worse experience.</p>
<blockquote>
<p>Home pages with ARIA present had significantly more errors (59.1 on average) than pages without ARIA (42 on average)</p>
</blockquote>
<p>This makes me sad.</p>
<p><a class="btn btn__small" href="https://webaim.org/projects/million/">Look at sad numbers</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-wonderful-weird-web-%E2%80%93-100-jumps" href="#the-wonderful-weird-web-%E2%80%93-100-jumps">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-wonderful-weird-web-%E2%80%93-100-jumps">The wonderful weird web – 100 jumps</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(100,100,235); --color2: rgb(140,132,180); --color3: rgb(132,140,235); --color4: rgb(178,188,210); --color5: rgb(48.44999999999998,43.349999999999994,109.64999999999999);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQ1Ij48cGF0aCBmaWxsPSIjMzAyYjZkIiBkPSJNMCAwaDMwMHYxNDVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE1NyIgY3k9IjcyIiByPSIxNzciIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMTAiIGN5PSI0OSIgcj0iMTc5IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTE0IiBjeT0iNDgiIHI9IjE2MiIgZmlsbD0iI2ZmZiIvPjxwYXRoIGZpbGw9IiMxYjI0ZDciIGQ9Ik01MSA0OWgyNHYyOEg1MXoiLz48cGF0aCBmaWxsPSIjNTQ2ZDkwIiBkPSJNMTQ4IDc2aDgydjZoLTgyeiIvPjxwYXRoIGZpbGw9IiNmNGZmZmYiIGQ9Ik0yNzggNzkuOCA3My4xIDY5LjEgNzgtMjMuOGwyMDQuNyAxMC43eiIvPjxwYXRoIGZpbGw9IiM3NjhjOWIiIGQ9Ik0yNiA3MGg5M3Y3SDI2eiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2Y0ZmZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoLjIxMzkyIC0yNC41MTI4IDI1NC45OTAzMSAyLjIyNTI3IDEwMC4yIDEwNikiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=avif&fit=scale&q=75&w=300&h=145 300w, https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=avif&fit=scale&q=75&w=500&h=243 500w, https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=avif&fit=scale&q=75&w=700&h=340 700w, https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=avif&fit=scale&q=75&w=900&h=437 900w, https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=avif&fit=scale&q=75&w=1100&h=535 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=webp&fit=scale&q=75&w=300&h=145 300w, https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=webp&fit=scale&q=75&w=500&h=243 500w, https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=webp&fit=scale&q=75&w=700&h=340 700w, https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=webp&fit=scale&q=75&w=900&h=437 900w, https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=webp&fit=scale&q=75&w=1100&h=535 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="486"
                srcset="https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=jpg&fit=scale&q=75&w=300&h=145 300w, https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=jpg&fit=scale&q=75&w=500&h=243 500w, https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=jpg&fit=scale&q=75&w=700&h=340 700w, https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=jpg&fit=scale&q=75&w=900&h=437 900w, https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png?fm=jpg&fit=scale&q=75&w=1100&h=535 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/SXXXlRq32zxoWhzNMqSIz/9d254e37f8c93615ce6bb5f8c01812ab/Screenshot_2026-04-13_at_11.08.03.png"
                alt="A square with a face standing on a flying shelf."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Let's pretend I didn't play this game for fifteen minutes and still only made it to 62 jumps. 😅</p>
<p><a class="btn btn__small" href="https://boredzebra.com/100jumps/">Jump!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="html-in-%60canvas%60-might-become-a-thing" href="#html-in-%60canvas%60-might-become-a-thing">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="html-in-%60canvas%60-might-become-a-thing">HTML in <code>canvas</code> might become a thing</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(226,107,116); --color2: rgb(159,88,93); --color3: rgb(211,156,100); --color4: rgb(172,179,188); --color5: rgb(44,62,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTYyIj48cGF0aCBmaWxsPSIjMmMzZTU0IiBkPSJNMCAwaDMwMHYxNjJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzMyIgY3k9IjU2IiByPSIxNjYiIGZpbGw9IiMwZTA3MGQiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMzYTNiM2QiIHRyYW5zZm9ybT0ibWF0cml4KDEwNC4wODQ0MiAtNy40OTk5IDEuODk1MTQgMjYuMzAxMDMgMTMxLjMgNTMuNCkiLz48cGF0aCBmaWxsPSIjNmI4MDc3IiBkPSJNMTIyIDYwaDU0djZoLTU0eiIvPjxwYXRoIGZpbGw9IiM3ZDRlNTkiIGQ9Ik0yNyAxMDJoNDh2N0gyN3oiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiM3OTRlNTQiIHRyYW5zZm9ybT0ibWF0cml4KC0zNC4xMDYyOSAtLjE0MDc3IC4wMTI4IC0zLjEwMjE0IDU5LjYgMzQuNCkiLz48cGF0aCBmaWxsPSIjODk1YzY4IiBkPSJNNDAgODloMzh2NUg0MHoiLz48ZWxsaXBzZSBjeD0iMTM4IiBjeT0iMzMiIGZpbGw9IiM2MzVjNGEiIHJ4PSI4NyIgcnk9IjMiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwZjE4MmEiIHRyYW5zZm9ybT0ibWF0cml4KDE5NC43MzIyIC00MS4zMDQ4IDguMjI2MTggMzguNzgyNDcgMTU2LjMgMTI4LjQpIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=avif&fit=scale&q=75&w=300&h=162 300w, https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=avif&fit=scale&q=75&w=500&h=271 500w, https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=avif&fit=scale&q=75&w=700&h=380 700w, https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=avif&fit=scale&q=75&w=900&h=488 900w, https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=avif&fit=scale&q=75&w=1100&h=597 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=webp&fit=scale&q=75&w=300&h=162 300w, https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=webp&fit=scale&q=75&w=500&h=271 500w, https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=webp&fit=scale&q=75&w=700&h=380 700w, https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=webp&fit=scale&q=75&w=900&h=488 900w, https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=webp&fit=scale&q=75&w=1100&h=597 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="543"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=jpg&fit=scale&q=75&w=300&h=162 300w, https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=jpg&fit=scale&q=75&w=500&h=271 500w, https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=jpg&fit=scale&q=75&w=700&h=380 700w, https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=jpg&fit=scale&q=75&w=900&h=488 900w, https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png?fm=jpg&fit=scale&q=75&w=1100&h=597 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6LJZhExK8UvYjlxenRAtbI/808b91a27e2a49fe43ddfe61b579a414/Screenshot_2026-04-13_at_14.15.25.png"
                alt="&amp;lt;canvas id=&amp;quot;canvas&amp;quot; layoutsubtree&amp;gt;   &amp;lt;form id=&amp;quot;form_element&amp;quot;&amp;gt;     &amp;lt;label for=&amp;quot;name&amp;quot;&amp;gt;name:&amp;lt;/label&amp;gt;     &amp;lt;input id=&amp;quot;name&amp;quot;&amp;gt;   &amp;lt;/form&amp;gt; &amp;lt;/canvas&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Do you remember the times when some companies rebuild the entire DOM for better performance? Those were wild times (and obviously a pretty bad idea). But check this out, there's <a href="https://github.com/WICG/html-in-canvas" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2FWICG%2Fhtml-in-canvas')">a new proposal to render HTML into the <code>canvas</code> element</a>. It's pretty wild!</p>
<p>Granted, this is very cutting edge (Chrome Canary with a flag) and canvas stuff can involve a lot of heavy math, Matt shared some very fancy examples of what you can do with this.</p>
<p><a class="btn btn__small" href="https://mattrothenberg.com/notes/html-in-canvas/">Render HTML</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-%E2%80%94-%60intl%60-can-localize-units%2C-too!" href="#til-%E2%80%94-%60intl%60-can-localize-units%2C-too!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-%E2%80%94-%60intl%60-can-localize-units%2C-too!">TIL — <code>Intl</code> can localize units, too!</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(99,172,235); --color2: rgb(160,85,102); --color3: rgb(228,196,124); --color4: rgb(171,179,188); --color5: rgb(50,66,90);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY5Ij48cGF0aCBmaWxsPSIjMzI0MjVhIiBkPSJNMCAwaDMwMHYxNjlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE4NyIgY3k9Ijk0IiByPSIyMTMiIGZpbGw9IiMwNjAzMDkiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMzYzNlNDUiIHRyYW5zZm9ybT0ibWF0cml4KC01Ni42OTMwNiAtMzAuMzk4NTUgMTUuMzU0NDcgLTI4LjYzNTk2IDkyLjcgNzIpIi8+PGVsbGlwc2UgY3g9IjEyMiIgY3k9IjUxIiBmaWxsPSIjNGU2Njc4IiByeD0iODUiIHJ5PSI0Ii8+PGVsbGlwc2UgY3g9IjEwMSIgY3k9IjkyIiBmaWxsPSIjNTk1YjVmIiByeD0iNTkiIHJ5PSI0Ii8+PHBhdGggZmlsbD0iIzc1Nzc2YiIgZD0iTTMyIDM2aDYxdjVIMzJ6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMTMxYjJiIiB0cmFuc2Zvcm09InJvdGF0ZSgzMS43IC03My45IDQ1OC40KSBzY2FsZSg1OS4wODg2OSAyMTguOTkwNzUpIi8+PGVsbGlwc2UgY3g9Ijc1IiBjeT0iNTgiIGZpbGw9IiMwZDE0MjQiIHJ4PSI4NyIgcnk9IjQiLz48ZWxsaXBzZSBjeD0iMTAxIiBjeT0iMTQwIiBmaWxsPSIjMDMwYzI1IiByeD0iMjU1IiByeT0iNiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=avif&fit=scale&q=75&w=300&h=169 300w, https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=avif&fit=scale&q=75&w=500&h=283 500w, https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=avif&fit=scale&q=75&w=700&h=396 700w, https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=avif&fit=scale&q=75&w=900&h=509 900w, https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=avif&fit=scale&q=75&w=1100&h=623 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=webp&fit=scale&q=75&w=300&h=169 300w, https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=webp&fit=scale&q=75&w=500&h=283 500w, https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=webp&fit=scale&q=75&w=700&h=396 700w, https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=webp&fit=scale&q=75&w=900&h=509 900w, https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=webp&fit=scale&q=75&w=1100&h=623 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="566"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=jpg&fit=scale&q=75&w=300&h=169 300w, https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=jpg&fit=scale&q=75&w=500&h=283 500w, https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=jpg&fit=scale&q=75&w=700&h=396 700w, https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=jpg&fit=scale&q=75&w=900&h=509 900w, https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png?fm=jpg&fit=scale&q=75&w=1100&h=623 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/5oCd4jXbeK1hi5a5Ua5zDj/3f311f6f248d3c0b22d91b473ac59bb8/Screenshot_2026-04-13_at_13.33.42.png"
                alt="console.log(   new Intl.NumberFormat(&quot;de-DE&quot;, {      style: &quot;currency&quot;,      currency: &quot;EUR&quot;    }).format(123456789), ); // &quot;123.456.789,00 €&quot;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>This week I learned that you can use the built-in <code>Intl</code> object to localize and format numbers with units! I love love love it!</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/intl-can-localize-units-too/">Format your numbers</a></p>
<p><em>And side note: <code>Intl</code> is one of the hidden gems that we should all be using more. <a href="https://polypane.app/blog/the-intl-api-the-best-browser-api-youre-not-using/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fpolypane.app%2Fblog%2Fthe-intl-api-the-best-browser-api-youre-not-using%2F')">Kilian published a long guide explaining many more things you can do with powerful JS API</a>.</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="scoping-with-name-only-container-queries-(or-%60%40scope%60)" href="#scoping-with-name-only-container-queries-(or-%60%40scope%60)">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="scoping-with-name-only-container-queries-(or-%60%40scope%60)">Scoping with name-only container queries (or <code>@scope</code>)</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(207,153,99); --color2: rgb(136,89,159); --color3: rgb(192,121,216); --color4: rgb(172,179,188); --color5: rgb(44,60,81);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTc1Ij48cGF0aCBmaWxsPSIjMmMzYzUxIiBkPSJNMCAwaDMwMHYxNzVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzNiIgY3k9IjEwMSIgcj0iMTgxIiBmaWxsPSIjMGEwNjExIi8+PGVsbGlwc2UgY3g9IjEzNCIgY3k9IjY4IiBmaWxsPSIjNzA3NjgyIiByeD0iOTEiIHJ5PSI0Ii8+PHBhdGggZmlsbD0iIzgzNjY5NiIgZD0iTTMzIDM0aDExMnY2SDMzeiIvPjxwYXRoIGZpbGw9IiM2ZDY0NWUiIGQ9Ik01NSA4MWg5MHY2SDU1eiIvPjxwYXRoIGZpbGw9IiM1YzRkNDMiIGQ9Ik00OCA0OGg0NnY5SDQ4eiIvPjxwYXRoIGZpbGw9IiMxNjFkMjkiIGQ9Im0xMTEgMTggNDAgNzAtMjgtMTN6Ii8+PGVsbGlwc2UgY3g9IjEwOCIgY3k9IjE0NCIgZmlsbD0iIzAxMGIyMyIgcng9IjI1NSIgcnk9IjYiLz48ZWxsaXBzZSBjeD0iMTQzIiBjeT0iNSIgZmlsbD0iIzAzMGUyNiIgcng9IjI1NSIgcnk9IjciLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=avif&fit=scale&q=75&w=300&h=175 300w, https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=avif&fit=scale&q=75&w=500&h=293 500w, https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=avif&fit=scale&q=75&w=700&h=410 700w, https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=avif&fit=scale&q=75&w=900&h=527 900w, https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=avif&fit=scale&q=75&w=1100&h=645 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=webp&fit=scale&q=75&w=300&h=175 300w, https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=webp&fit=scale&q=75&w=500&h=293 500w, https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=webp&fit=scale&q=75&w=700&h=410 700w, https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=webp&fit=scale&q=75&w=900&h=527 900w, https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=webp&fit=scale&q=75&w=1100&h=645 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="586"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=jpg&fit=scale&q=75&w=300&h=175 300w, https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=jpg&fit=scale&q=75&w=500&h=293 500w, https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=jpg&fit=scale&q=75&w=700&h=410 700w, https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=jpg&fit=scale&q=75&w=900&h=527 900w, https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png?fm=jpg&fit=scale&q=75&w=1100&h=645 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1Ftl3YWhp3KQ8A7LtoSfc4/64d823e9b40a3e5ee2915796680eb37f/Screenshot_2026-04-13_at_14.07.13.png"
                alt="@container ds-card {   .title {     background: rebeccapurple;     color: white;   } }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p><strong>If you open this post, make sure to read it to the end.</strong></p>
<p>Safari 26.4 started to support name-only container queries (<code>@container [name] {}</code> without a condition). Chris discovered that name-only container queries could be used for CSS scoping similar to how CSS modules work. It's a valid and creative take, but here's the kicker: Miriam shared that you can do similar things with CSS <code>@scope</code> (the post was updated later on).</p>
<p>I'm still not 100% on the CSS scoping train, but this post definitely included some good-to-know details!</p>
<p><a class="btn btn__small" href="https://frontendmasters.com/blog/name-only-containers-the-scoping-we-needed/">Scope your styles</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-to-the-platform%3A-lazy-loading-video" href="#new-to-the-platform%3A-lazy-loading-video">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-to-the-platform%3A-lazy-loading-video">New to the platform: lazy loading video</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(212,156,100); --color2: rgb(162,124,94); --color3: rgb(216,106,112); --color4: rgb(168,175,185); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTExIj48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxMTFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzMSIgY3k9IjM3IiByPSIxNDMiIGZpbGw9IiMwYjA3MGIiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiM0MDNkM2MiIHRyYW5zZm9ybT0icm90YXRlKC04Mi45IDkyLjggLTQ3LjUpIHNjYWxlKDE1LjkyMTYzIDk5LjExMjA3KSIvPjxlbGxpcHNlIGN4PSIxNDQiIGN5PSI1OSIgZmlsbD0iIzViNjY1NiIgcng9Ijg2IiByeT0iMyIvPjxwYXRoIGZpbGw9IiM3YjVkNDgiIGQ9Ik0xMTQgNDVoNzh2NWgtNzh6Ii8+PGVsbGlwc2UgY3g9IjE2MCIgY3k9Ijg2IiBmaWxsPSIjMGYxNzJiIiByeD0iMjQyIiByeT0iMjQiLz48ZWxsaXBzZSBjeD0iNjYiIGN5PSIzNSIgZmlsbD0iIzdlNTU1MiIgcng9IjQxIiByeT0iMyIvPjxwYXRoIGZpbGw9IiM4ZDY5NGUiIGQ9Ik02MiA0Nmg0MHY0SDYyeiIvPjxlbGxpcHNlIGN4PSI1MCIgY3k9IjQxIiBmaWxsPSIjMGYxNzI5IiByeD0iMjExIiByeT0iNCIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=avif&fit=scale&q=75&w=300&h=111 300w, https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=avif&fit=scale&q=75&w=500&h=186 500w, https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=avif&fit=scale&q=75&w=700&h=261 700w, https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=avif&fit=scale&q=75&w=900&h=335 900w, https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=avif&fit=scale&q=75&w=1100&h=410 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=webp&fit=scale&q=75&w=300&h=111 300w, https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=webp&fit=scale&q=75&w=500&h=186 500w, https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=webp&fit=scale&q=75&w=700&h=261 700w, https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=webp&fit=scale&q=75&w=900&h=335 900w, https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=webp&fit=scale&q=75&w=1100&h=410 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="373"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=jpg&fit=scale&q=75&w=300&h=111 300w, https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=jpg&fit=scale&q=75&w=500&h=186 500w, https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=jpg&fit=scale&q=75&w=700&h=261 700w, https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=jpg&fit=scale&q=75&w=900&h=335 900w, https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png?fm=jpg&fit=scale&q=75&w=1100&h=410 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6DRBFLKSiiu7SW7sNF6PAN/51e1b2a3eb8e23ae3f356b906b6a6f44/Screenshot_2026-04-13_at_13.52.21.png"
                alt="&amp;lt;video loading=&amp;quot;lazy&amp;quot;         autoplay playsinline muted        src=&amp;quot;path/to/sloth.webm&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>It's wild that we couldn't lazy load videos until now, isn't it? Scott and his team thought the same and fixed that by contributing to Webkit and Firefox. I love all of this. If you're curious about when it'll land and what needs to be considered when lazy loading videos, this post is golden!</p>
<p><a class="btn btn__small" href="https://engineering.squarespace.com/blog/2026/how-to-use-standard-html-video-and-audio-lazy-loading-on-the-web-today">Delay all the heavy videos</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="random-mdn-%E2%80%93-%60reportingobserver%60" href="#random-mdn-%E2%80%93-%60reportingobserver%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="random-mdn-%E2%80%93-%60reportingobserver%60">Random MDN – <code>ReportingObserver</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(98,170,233); --color2: rgb(84,137,171); --color3: rgb(226,194,123); --color4: rgb(172,176,188); --color5: rgb(51,67,91);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTkyIj48cGF0aCBmaWxsPSIjMzM0MzViIiBkPSJNMCAwaDMwMHYxOTJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE2MCIgY3k9IjExNyIgcj0iMTk5IiBmaWxsPSIjMDYwMTA4Ii8+PHBhdGggZmlsbD0iIzNkM2M0YSIgZD0iTTI5LjUgMjIuNWgxNDd2NDVoLTE0N3oiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMzYTVkODgiIHRyYW5zZm9ybT0ibWF0cml4KC4wMDY1IC0yLjk5MzQ0IDYxLjM0NzA4IC4xMzMyOCAxNTkgMjcuNykiLz48cGF0aCBmaWxsPSIjNmI2YjU2IiBkPSJNNDAgOTloMTA4djVINDB6Ii8+PGVsbGlwc2UgY3g9Ijc2IiBjeT0iMTEzIiBmaWxsPSIjODE0ZjUwIiByeD0iMzgiIHJ5PSIzIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMGMxNTI5IiB0cmFuc2Zvcm09InJvdGF0ZSg4Ni43IDY3LjcgNzEuNykgc2NhbGUoMjMuNTA0NDcgMTUwLjg5MDc3KSIvPjxwYXRoIGZpbGw9IiM1YjVmNzEiIGQ9Ik01NSA2MmgxMjB2NUg1NXoiLz48cGF0aCBmaWxsPSIjODM2NTY4IiBkPSJNMjIgMjVoNjJ2NUgyMnoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=avif&fit=scale&q=75&w=300&h=192 300w, https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=avif&fit=scale&q=75&w=500&h=321 500w, https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=avif&fit=scale&q=75&w=700&h=450 700w, https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=avif&fit=scale&q=75&w=900&h=578 900w, https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=avif&fit=scale&q=75&w=1100&h=707 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=webp&fit=scale&q=75&w=300&h=192 300w, https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=webp&fit=scale&q=75&w=500&h=321 500w, https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=webp&fit=scale&q=75&w=700&h=450 700w, https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=webp&fit=scale&q=75&w=900&h=578 900w, https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=webp&fit=scale&q=75&w=1100&h=707 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="643"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=jpg&fit=scale&q=75&w=300&h=192 300w, https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=jpg&fit=scale&q=75&w=500&h=321 500w, https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=jpg&fit=scale&q=75&w=700&h=450 700w, https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=jpg&fit=scale&q=75&w=900&h=578 900w, https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png?fm=jpg&fit=scale&q=75&w=1100&h=707 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6mA6nANToynVVOlFbbTXv/99dd922b716e1fcc5d033fe18cda8bf5/Screenshot_2026-04-13_at_13.58.11.png"
                alt="const observer = new ReportingObserver(   (reports, observer) =&gt; {     reports.forEach((report) =&gt; {       log(JSON.stringify(report, null, 2));     });   }, {     types: [&quot;deprecation&quot;],     buffered: true,   } );"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Did you know that there's a JavaScript API to listen to reports like the usage of deprecated browser features? Now you do!</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/API/ReportingObserver">Read the reports!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-recap-%E2%80%93-the-%60pathlength%60-attribute" href="#til-recap-%E2%80%93-the-%60pathlength%60-attribute">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-recap-%E2%80%93-the-%60pathlength%60-attribute">TIL recap – the <code>pathLength</code> attribute</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(226,107,115); --color2: rgb(165,125,90); --color3: rgb(211,156,100); --color4: rgb(172,179,188); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgNzMiPjxwYXRoIGZpbGw9IiMyYzNjNTQiIGQ9Ik0wIDBoMzAwdjczSDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxMjYiIGN5PSI2MiIgcj0iMTQ4IiBmaWxsPSIjMGQwYTBkIi8+PHBhdGggZmlsbD0iIzY4NjY1MCIgZD0iTTggMTloMjI4djVIOHoiLz48cGF0aCBmaWxsPSIjNjY2NDUxIiBkPSJNMTggMjloMTgwdjVIMTh6Ii8+PGVsbGlwc2UgY3g9IjEyOSIgY3k9IjYyIiBmaWxsPSIjMDAwOTI0IiByeD0iMjU1IiByeT0iNyIvPjxlbGxpcHNlIGN4PSIyMiIgY3k9IjQyIiBmaWxsPSIjN2U1NTYyIiByeD0iMTIiIHJ5PSIzIi8+PGVsbGlwc2UgY3g9IjEwNSIgY3k9IjMiIGZpbGw9IiMwMzBlMjkiIHJ4PSIyNTUiIHJ5PSI1Ii8+PHBhdGggZmlsbD0iIzE0MWIyYSIgZD0ibTExOCAyNS4xIDEuOSAyNi0yNiAxLjgtMS44LTI2eiIvPjxwYXRoIGZpbGw9IiMxNTFlMmUiIGQ9Im0xODAuOSA0Ny42IDkuNS02My42TDIxOCAzMGwyLjgtNDZ6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=avif&fit=scale&q=75&w=300&h=73 300w, https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=avif&fit=scale&q=75&w=500&h=123 500w, https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=avif&fit=scale&q=75&w=700&h=172 700w, https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=avif&fit=scale&q=75&w=900&h=221 900w, https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=avif&fit=scale&q=75&w=1100&h=271 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=webp&fit=scale&q=75&w=300&h=73 300w, https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=webp&fit=scale&q=75&w=500&h=123 500w, https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=webp&fit=scale&q=75&w=700&h=172 700w, https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=webp&fit=scale&q=75&w=900&h=221 900w, https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=webp&fit=scale&q=75&w=1100&h=271 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="246"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=jpg&fit=scale&q=75&w=300&h=73 300w, https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=jpg&fit=scale&q=75&w=500&h=123 500w, https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=jpg&fit=scale&q=75&w=700&h=172 700w, https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=jpg&fit=scale&q=75&w=900&h=221 900w, https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png?fm=jpg&fit=scale&q=75&w=1100&h=271 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1soI1BFgxS7D7WvL4DvTtS/acc6d42c19c528398c1a1ba754c7b6f0/Screenshot_2026-04-13_at_13.37.33.png"
                alt="&amp;lt;svg width=&amp;quot;7149&amp;quot; height=&amp;quot;1392&amp;quot; viewBox=&amp;quot;0 0 7149 1400&amp;quot;&amp;gt;   &amp;lt;path d=&amp;quot;M0.640625 ...&amp;quot; pathLength=&amp;quot;100&amp;quot; /&amp;gt; &amp;lt;/svg&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>You've probably seen these SVG effects that look like a line or signature is drawn. The most common solution to build these animations is to combine <code>stroke-dashoffset</code> and <code>stroke-dasharray</code>. And they work fine, but usually rely on some magic numbers that depend on the SVG path length (e.g. <code>stroke-dasharray: 7151;</code>). A while ago I learned that <code>pathLength</code> can make everything a whole lot easier.</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/pathlength-makes-makes-svg-path-animations-easier-to-manage/">Animate all the paths</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="soon-on-the-baseline---%60sizes%3Dauto%60" href="#soon-on-the-baseline---%60sizes%3Dauto%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="soon-on-the-baseline---%60sizes%3Dauto%60">Soon on the baseline - <code>sizes=auto</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(213,148,102); --color2: rgb(166,127,91); --color3: rgb(156,196,124); --color4: rgb(168,174,184); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTc1Ij48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxNzVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9Ijk3IiBjeT0iNTYiIHI9IjE4NSIgZmlsbD0iIzBiMDgwYiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzMxM2EzOSIgdHJhbnNmb3JtPSJtYXRyaXgoMjIuMjY2MDMgLTQ0LjY2NzU4IDQxLjU2ODYxIDIwLjcyMTI1IDEwOCA3My42KSIvPjxwYXRoIGZpbGw9IiM1NzY3NGYiIGQ9Ik02NCAzMWgxMjB2NUg2NHoiLz48cGF0aCBmaWxsPSIjNzE2NTUwIiBkPSJNNzIgMTA0aDU5djVINzJ6Ii8+PHBhdGggZmlsbD0iIzQ4NWU0OSIgZD0iTTEzNCA1NWgyMXYyOWgtMjF6Ii8+PHBhdGggZmlsbD0iIzZmNmI1MyIgZD0iTTcwIDExNmg1MnY1SDcweiIvPjxwYXRoIGZpbGw9IiM4MDRjNTkiIGQ9Ik02MCAxOWgxOXY3SDYweiIvPjxwYXRoIGZpbGw9IiMxMDE1MjkiIGQ9Ik01MyA4NWg5OHYxN0g1M3oiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=avif&fit=scale&q=75&w=300&h=175 300w, https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=avif&fit=scale&q=75&w=500&h=293 500w, https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=avif&fit=scale&q=75&w=700&h=410 700w, https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=avif&fit=scale&q=75&w=900&h=527 900w, https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=avif&fit=scale&q=75&w=1100&h=645 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=webp&fit=scale&q=75&w=300&h=175 300w, https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=webp&fit=scale&q=75&w=500&h=293 500w, https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=webp&fit=scale&q=75&w=700&h=410 700w, https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=webp&fit=scale&q=75&w=900&h=527 900w, https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=webp&fit=scale&q=75&w=1100&h=645 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="586"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=jpg&fit=scale&q=75&w=300&h=175 300w, https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=jpg&fit=scale&q=75&w=500&h=293 500w, https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=jpg&fit=scale&q=75&w=700&h=410 700w, https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=jpg&fit=scale&q=75&w=900&h=527 900w, https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png?fm=jpg&fit=scale&q=75&w=1100&h=645 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3Le8JkBgyo6jzRlSq6pdoP/6251c49842db652e0317b5a0c5617265/Screenshot_2026-04-13_at_15.15.29.png"
                alt="&amp;lt;img    alt=&amp;quot;A cat wearing a hat.&amp;quot;   srcset=&amp;quot;     cat-s.jpg  300w,     cat-m.jpg  600w,     cat-l.jpg  1200w   &amp;quot;   loading=&amp;quot;lazy&amp;quot;   sizes=&amp;quot;auto&amp;quot; &amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Disclaimer: <code>sizes=auto</code> isn't on the baseline yet, but I'm so excited about it so that I'll plug it already. Responsive images are tough and many people implement them incorrectly. With <code>sizes=auto</code> we can provide the image sizes and let the browser figure out the rest.</p>
<p>There's one catch: images need to be lazy loaded so that the browser did layout already. Still, I think this is a much needed addition.</p>
<p>Where are we browser support wise:</p>
<ul>
<li>✅ Chromium already supports the attribute</li>
<li>⌛ <a href="https://www.firefox.com/en-US/firefox/150.0beta/releasenotes/#note-791548" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.firefox.com%2Fen-US%2Ffirefox%2F150.0beta%2Freleasenotes%2F%23note-791548')">Firefox will support it in two weeks with 150</a></li>
<li>⌛ <a href="https://webkit.org/blog/17917/release-notes-for-safari-technology-preview-241/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwebkit.org%2Fblog%2F17917%2Frelease-notes-for-safari-technology-preview-241%2F')">Webkit shipped it in tech preview</a></li>
</ul>
<p>Great times ahead!</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="three-valuable-projects-to-have-a-look-at" href="#three-valuable-projects-to-have-a-look-at">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="three-valuable-projects-to-have-a-look-at">Three valuable projects to have a look at</h2></div><ul>
<li><a href="https://github.com/SacDeNoeuds/yawn" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2FSacDeNoeuds%2Fyawn')">SacDeNoeuds/yawn</a> – A Frontend framework built on async iterables.</li>
<li><a href="https://github.com/kamranahmedse/slim" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fkamranahmedse%2Fslim')">kamranahmedse/slim</a> – Give your localhost a local or public URL.</li>
<li><a href="https://github.com/unmta/emailmd" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Funmta%2Femailmd')">unmta/emailmd</a> – Render markdown into email-safe HTML.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-tiny-helper" href="#a-new-tiny-helper">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-tiny-helper">A new Tiny Helper</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(118.22727272727272,118.22727272727272,136.77272727272728); --color2: rgb(124,124,140); --color3: rgb(183.87818181818182,183.87818181818182,193.52181818181816); --color4: rgb(196,196,204); --color5: rgb(68,68,92);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY4Ij48cGF0aCBmaWxsPSIjNDQ0NDVjIiBkPSJNMCAwaDMwMHYxNjhIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoNy4wMzQzMyAxNDUuOTAzODcgLTE1Ni4xOTY5MyA3LjUzMDU4IDEyOC43IDY4LjcpIi8+PGNpcmNsZSBjeD0iMTQxIiBjeT0iNzUiIHI9IjE3MCIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjEyNyIgY3k9IjEwNyIgcj0iMTc5IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTQzIiBjeT0iNDEiIHI9IjE4MiIgZmlsbD0iI2ZiZmJmZiIvPjxlbGxpcHNlIGN4PSIxNTIiIGN5PSIxOCIgZmlsbD0iIzVmNWY2ZiIgcng9IjExMiIgcnk9IjEiLz48ZWxsaXBzZSBjeD0iMjM3IiBjeT0iMTgiIGZpbGw9IiNmY2ZjZmYiIHJ4PSIyNiIgcnk9IjE0MyIvPjxwYXRoIGZpbGw9IiMyNzI3M2IiIGQ9Ik0yMTAgMThoMXYxMjZoLTF6Ii8+PGVsbGlwc2UgY3g9IjQxIiBjeT0iOTQiIGZpbGw9IiM0ZTRlNWYiIHJ4PSIxIiByeT0iNzciLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=avif&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=avif&fit=scale&q=75&w=500&h=281 500w, https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=avif&fit=scale&q=75&w=700&h=394 700w, https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=avif&fit=scale&q=75&w=900&h=506 900w, https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=avif&fit=scale&q=75&w=1100&h=619 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=webp&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=webp&fit=scale&q=75&w=500&h=281 500w, https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=webp&fit=scale&q=75&w=700&h=394 700w, https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=webp&fit=scale&q=75&w=900&h=506 900w, https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=webp&fit=scale&q=75&w=1100&h=619 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="563"
                srcset="https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=jpg&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=jpg&fit=scale&q=75&w=500&h=281 500w, https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=jpg&fit=scale&q=75&w=700&h=394 700w, https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=jpg&fit=scale&q=75&w=900&h=506 900w, https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png?fm=jpg&fit=scale&q=75&w=1100&h=619 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/63UoKjLVGxwqpNgMQtpwy6/8d80f02c94e309b88293ab500974ea21/Screenshot_2026-04-13_at_13.30.11.png"
                alt="ASCII mock up showing a form UI with controls."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you're looking for a quick way to mock or prototype UIs or service architectures, Wiretext is a quick app to rock all these ASCII characters. I love the look of these diagrams!</p>
<p><a class="btn btn__small" href="https://wiretext.app">Draw with text</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more single-purpose online tools on <a href="https://tiny-helpers.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ftiny-helpers.dev%2F')">tiny-helpers.dev</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="thought-of-the-week" href="#thought-of-the-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="thought-of-the-week">Thought of the week</h2></div><p><a href="https://ericwbailey.website/published/how-an-accessibility-designer-adds-keyboard-shortcuts-to-a-web-app/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fericwbailey.website%2Fpublished%2Fhow-an-accessibility-designer-adds-keyboard-shortcuts-to-a-web-app%2F')">Eric got into the complex topic of keyboard shortcuts and accessibility</a> and this sentence is an absolute banger, isn't it?</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <blockquote>
<p>Your web app is not the center of the universe.</p>
</blockquote>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="did-you-learn-something-from-this-issue%3F" href="#did-you-learn-something-from-this-issue%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="did-you-learn-something-from-this-issue%3F">Did you learn something from this issue?</h2></div><p>❤️ If so, <strong>join 40 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="this-is-all%2C-friends!" href="#this-is-all%2C-friends!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="this-is-all%2C-friends!">This is all, friends!</h2></div><p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr aria-hidden="true"><p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Web Weekly #189">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Web Weekly #188 (#blogPost)</title>
      <link href="https://www.stefanjudis.com/blog/web-weekly-188/"/>
      <published>2026-04-05T22:00:00+00:00</published>
      <updated>2026-04-05T22:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/blog/web-weekly-188/</id>
      <category term="blogPost"></category>
        <category term="Newsletter"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="guten-tag!-guten-tag!-%F0%9F%91%8B" href="#guten-tag!-guten-tag!-%F0%9F%91%8B">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="guten-tag!-guten-tag!-%F0%9F%91%8B">Guten Tag! Guten Tag! 👋</h2></div><p>Have you heard about the CSS <code>sticky</code> spec change? Or have you used the <code>position-visibility</code> property before? And are you aware of the new JavaScript features landing in 2026?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <p>Mark listens to <a href="https://www.youtube.com/watch?v=I-ej_xJzYZI" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DI-ej_xJzYZI')">&quot;Jet Black&quot; by Fletchr Fletchr</a> and says:</p>
<blockquote>
<p>An anthemic crashing guitar explosion, &quot;Jet Black&quot; ruined a perfectly good nap in the sun for me at Boardmasters Festival this summer by erupting on stage, and it's gone on heavy rotation since.</p>
</blockquote>
</div><p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>three more songs</strong> left in the queue.</p>
<hr aria-hidden="true"><p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mitokoviax2p">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116358695717170492" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffront-end.social%2F%40stefan%2F116358695717170492')">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_this-weeks-web-weekly-is-about-to-hit-all-share-7446956986132389889-LYuT" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.linkedin.com%2Fposts%2Fstefan-judis_this-weeks-web-weekly-is-about-to-hit-all-share-7446956986132389889-LYuT')">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr aria-hidden="true"><p>A big thank you and a huge bag of karma points go to &quot;vaupeh&quot; this week. Thank you for supporting indie publishing in the times of AI slop by covering a small fraction of the cost it takes to send Web Weekly every week! ❤️</p>
<p>You can support Web Weekly on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="no-code" href="#no-code">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="no-code">No code</h2></div><ul>
<li><a href="https://www.terrygodier.com/the-last-quiet-thing" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.terrygodier.com%2Fthe-last-quiet-thing')">The last quiet thing</a> → &quot;Nothing you own is finished. Everything exists in a state of permanent incompletion, permanently needing.&quot;</li>
<li><a href="https://alexhwoods.com/dont-let-ai-write-for-you/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Falexhwoods.com%2Fdont-let-ai-write-for-you%2F')">Don't Let AI Write For You</a> → &quot;Letting an LLM write for you is like paying somebody to work out for you.&quot;</li>
<li><a href="https://codegood.co/writing/ai-shrinks-the-team-not-the-problem" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcodegood.co%2Fwriting%2Fai-shrinks-the-team-not-the-problem')">AI Shrinks the Team, Not the Problem</a> → &quot;Reducing the team [because of AI] does not reduce the number of things that can go wrong. It reduces the number of people available to own them.&quot;</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="use-%60subgrid%60-to-deal-with-%22controlled%22-content" href="#use-%60subgrid%60-to-deal-with-%22controlled%22-content">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="use-%60subgrid%60-to-deal-with-%22controlled%22-content">Use <code>subgrid</code> to deal with &quot;controlled&quot; content</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(201,154,107); --color2: rgb(166,132,98); --color3: rgb(219.55247524752477,188.7,157.8475247524752); --color4: rgb(170,178,186); --color5: rgb(52,67,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTczIj48cGF0aCBmaWxsPSIjMzQ0MzU0IiBkPSJNMCAwaDMwMHYxNzNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjkxIiBjeT0iNjYiIHI9IjE4OSIgZmlsbD0iIzAxMDAwYiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzM2Mzk0NCIgdHJhbnNmb3JtPSJtYXRyaXgoNDMuNzIyIDE3Ljc2NzAxIC0xMy4zNzcxIDMyLjkxOTA4IDEwNC45IDY2LjQpIi8+PHBhdGggZmlsbD0iIzY3NjQ2YSIgZD0iTTY3IDYyaDEzMnY1SDY3eiIvPjxwYXRoIGZpbGw9IiM2NTZjN2IiIGQ9Ik03NSA5NGg3OHY0SDc1eiIvPjxwYXRoIGZpbGw9IiMwZDE1MjUiIGQ9Im0xNTAuNCA4Mi44LTkxLTEuNi4yLTE2IDkxIDEuNnoiLz48cGF0aCBmaWxsPSIjNjY2MTY0IiBkPSJNNjggNTJoODB2NEg2OHoiLz48ZWxsaXBzZSBjeD0iMTE1IiBjeT0iMTQ2IiBmaWxsPSIjMDIwYzI1IiByeD0iMjU1IiByeT0iOCIvPjxlbGxpcHNlIGN4PSIxMzYiIGN5PSIxIiBmaWxsPSIjMDQwZTI4IiByeD0iMjU1IiByeT0iOSIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=avif&fit=scale&q=75&w=300&h=174 300w, https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=avif&fit=scale&q=75&w=500&h=290 500w, https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=avif&fit=scale&q=75&w=700&h=406 700w, https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=avif&fit=scale&q=75&w=900&h=522 900w, https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=avif&fit=scale&q=75&w=1100&h=638 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=webp&fit=scale&q=75&w=300&h=174 300w, https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=webp&fit=scale&q=75&w=500&h=290 500w, https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=webp&fit=scale&q=75&w=700&h=406 700w, https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=webp&fit=scale&q=75&w=900&h=522 900w, https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=webp&fit=scale&q=75&w=1100&h=638 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="580"
                srcset="https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=jpg&fit=scale&q=75&w=300&h=174 300w, https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=jpg&fit=scale&q=75&w=500&h=290 500w, https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=jpg&fit=scale&q=75&w=700&h=406 700w, https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=jpg&fit=scale&q=75&w=900&h=522 900w, https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png?fm=jpg&fit=scale&q=75&w=1100&h=638 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/13T2rJDigLEEBxSSPe4I20/1c0d1a2e63a9df15d7f7015240109f59/Screenshot_2026-04-04_at_10.21.04.png"
                alt=".full-width {   display: grid;   grid-column: inline;   grid-template-columns: subgrid;    :where(&amp;) &gt; * {     grid-column: main;   } }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Short'n'sweet: David explains how CSS <code>subgrid</code> (available across browsers since September 2023) helps with laying out content coming from CMS systems.</p>
<p><a class="btn btn__small" href="https://dbushell.com/2026/04/02/css-subgrid-is-super-good/">Lay out!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="ts-type-guards-vs.-assertion-functions" href="#ts-type-guards-vs.-assertion-functions">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="ts-type-guards-vs.-assertion-functions">TS Type guards vs. assertion functions</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(62,123,177); --color2: rgb(116,156,92); --color3: rgb(198,229,246); --color4: rgb(213,213,180); --color5: rgb(48,74,97);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTEyIj48cGF0aCBmaWxsPSIjMzA0YTYxIiBkPSJNMCAwaDMwMHYxMTJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE2MSIgY3k9IjUwIiByPSIxNzEiLz48Y2lyY2xlIGN4PSIyMzEiIGN5PSI5MSIgcj0iMTQ3IiBmaWxsPSIjMDUxNzE4Ii8+PHBhdGggZmlsbD0iIzdkOTM4OSIgZD0iTTEzIDY0aDkwdjRIMTN6Ii8+PHBhdGggZmlsbD0iIzg1OTY4NCIgZD0iTTkgNDNoNjd2NEg5eiIvPjxlbGxpcHNlIGN4PSI0OCIgY3k9IjgyIiBmaWxsPSIjNzg4NjhiIiByeD0iMzIiIHJ5PSIzIi8+PHBhdGggZmlsbD0iIzRkNWQ1ZiIgZD0iTTkgMjJoMTgzdjRIOXoiLz48cGF0aCBmaWxsPSIjM2Q2MDNhIiBkPSJNNzggMTFoMTQxdjRINzh6Ii8+PHBhdGggZmlsbD0iIzAzMTcxOCIgZD0iTTExNS44IDQwLjYtMTYgMi4yIDIxMS42LTE2LTE2IDQyLjZ6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=avif&fit=scale&q=75&w=300&h=112 300w, https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=avif&fit=scale&q=75&w=500&h=188 500w, https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=avif&fit=scale&q=75&w=700&h=263 700w, https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=avif&fit=scale&q=75&w=900&h=338 900w, https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=avif&fit=scale&q=75&w=1100&h=414 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=webp&fit=scale&q=75&w=300&h=112 300w, https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=webp&fit=scale&q=75&w=500&h=188 500w, https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=webp&fit=scale&q=75&w=700&h=263 700w, https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=webp&fit=scale&q=75&w=900&h=338 900w, https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=webp&fit=scale&q=75&w=1100&h=414 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="376"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=jpg&fit=scale&q=75&w=300&h=112 300w, https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=jpg&fit=scale&q=75&w=500&h=188 500w, https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=jpg&fit=scale&q=75&w=700&h=263 700w, https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=jpg&fit=scale&q=75&w=900&h=338 900w, https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png?fm=jpg&fit=scale&q=75&w=1100&h=414 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2kA23jV3j3pn7tv7MWoceq/131c5a42e639d8214b50b9a7469bf632/Screenshot_2026-04-04_at_11.55.30.png"
                alt="// let&apos;s pretend JSON.parse is an unknown data source const data = JSON.parse(&apos;{&quot;name&quot;: &quot;Stefan&quot;}&apos;);   assertIsUser(data); // throws if not a User   data.name.toUpperCase(); // narrowed to User after assertion"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>While reading <a href="https://www.solberg.is/unknown-to-typed" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.solberg.is%2Funknown-to-typed')">Absorbing unknown Into the Type Realm</a> I learned a new TypeScript thing. Usually, I'm going for type guards to narrow types, but with assertion functions (<code>asserts data is Something</code>) you can narrow the type inside of the current scope. No <code>if</code>s or anything like that needed. Good stuff!</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/the-scope-of-type-guards-and-assertion-functions/">Narrow things down!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="what-to-know-in-javascript-2026" href="#what-to-know-in-javascript-2026">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="what-to-know-in-javascript-2026">What to know in JavaScript 2026</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(252,232,75); --color2: rgb(143,118,109); --color3: rgb(248,169,129); --color4: rgb(212,182,180); --color5: rgb(51,67,91);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTM0Ij48cGF0aCBmaWxsPSIjMzM0MzViIiBkPSJNMCAwaDMwMHYxMzRIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMTgiIGN5PSI1NyIgZmlsbD0iI2ZmZmZhNiIgcng9IjI1NSIgcnk9IjUzIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZjNzg1IiB0cmFuc2Zvcm09Im1hdHJpeCgtNS4yNDQzMSAtNTAuNzQwNzIgMTQ4LjM4MzQ0IC0xNS4zMzYxOSAxNTMuNiA1NykiLz48ZWxsaXBzZSBjeD0iMjU1IiBjeT0iNTciIHJ4PSI3IiByeT0iMTExIi8+PGVsbGlwc2UgY3g9IjU1IiBjeT0iODAiIGZpbGw9IiNmZmZmZmIiIHJ4PSI0OSIgcnk9IjI5Ii8+PGVsbGlwc2UgY3g9IjIxNSIgY3k9IjUxIiBmaWxsPSIjZmZlMTFlIiByeD0iMzQiIHJ5PSI0NyIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmODU4YyIgdHJhbnNmb3JtPSJyb3RhdGUoLTcyLjYgODIgLTQ2KSBzY2FsZSgyOS41MTU0NyA5Ny4xMDg5MykiLz48ZWxsaXBzZSBjeT0iNTciIHJ4PSI3IiByeT0iMTExIi8+PHBhdGggZmlsbD0iI2ZmYzM1OSIgZD0iTTE1NyA2aDg3djEwMmgtODd6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=avif&fit=scale&q=75&w=300&h=135 300w, https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=avif&fit=scale&q=75&w=500&h=225 500w, https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=avif&fit=scale&q=75&w=700&h=315 700w, https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=avif&fit=scale&q=75&w=900&h=405 900w, https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=avif&fit=scale&q=75&w=1100&h=495 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=webp&fit=scale&q=75&w=300&h=135 300w, https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=webp&fit=scale&q=75&w=500&h=225 500w, https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=webp&fit=scale&q=75&w=700&h=315 700w, https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=webp&fit=scale&q=75&w=900&h=405 900w, https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=webp&fit=scale&q=75&w=1100&h=495 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="450"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=jpg&fit=scale&q=75&w=300&h=135 300w, https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=jpg&fit=scale&q=75&w=500&h=225 500w, https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=jpg&fit=scale&q=75&w=700&h=315 700w, https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=jpg&fit=scale&q=75&w=900&h=405 900w, https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png?fm=jpg&fit=scale&q=75&w=1100&h=495 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1KAcO0yE68iYKNpMQpBCi0/e1ad069ff071aa5a7825e7cc6f93002a/Screenshot_2026-04-06_at_16.30.57.png"
                alt="2026 next to the JavaScript logo."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>CSS has been so much on fire that it sometimes feels as if nothing is happening in JavaScript land. Chris was so kind and summarized what you need to know this year!</p>
<p><a class="btn btn__small" href="https://frontendmasters.com/blog/what-to-know-in-javascript-2026-edition/">Stay up to date!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="everybody's-raving-about-%60pretext%60" href="#everybody's-raving-about-%60pretext%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="everybody's-raving-about-%60pretext%60">Everybody's raving about <code>pretext</code></h2></div><p><img src="https://images.ctfassets.net/f20lfrunubsq/3ZTY72IEfI0ErcZKjFbwEm/cf6ae3341a0298f932aca5c2dda4c0ac/retext.gif" alt="Demo showing a bubble being moved over a paragraph and all the text moves." loading="lazy" /></p>
<p>The <code>pretext</code> project is only one month old and already gained 40k GitHub stars. People are excited. Why?</p>
<p><code>pretext</code> is a &quot;JavaScript/TypeScript library for multiline text measurement &amp; layout&quot;. That means you can give it some text and it'll figure out how much space the text will need. Under the hood it normalizes the input text and then uses <a href="https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/measureText" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FAPI%2FCanvasRenderingContext2D%2FmeasureText')"><code>canvas<wbr>.measureText()</code></a> to get the size and layout information. I didn't even know that <code>measureText</code> is a thing in canvas land.</p>
<p>Now, <a href="https://chenglou.me/pretext/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fchenglou.me%2Fpretext%2F')">some of the demos are very impressive</a> but <a href="https://blog.damato.design/posts/pretext-review/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fblog.damato.design%2Fposts%2Fpretext-review%2F')">I agree a lot with Donnie's take</a>. Just because something can be done in JS, it doesn't mean it needs to be done with it. And also, CSS is moving fast, some of the layout issues might be resolved sooner than later if enough people show interest. What's your take?</p>
<p><a class="btn btn__small" href="https://github.com/chenglou/pretext?tab=readme-ov-file">Be fancy</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-view-transitions-toolkit" href="#the-view-transitions-toolkit">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-view-transitions-toolkit">The View Transitions Toolkit</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(11,124,204); --color2: rgb(102,117,141); --color3: rgb(72,75,228); --color4: rgb(208,157,210); --color5: rgb(52,68,92);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTcyIj48cGF0aCBmaWxsPSIjMzQ0NDVjIiBkPSJNMCAwaDMwMHYxNzJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMjgiIGN5PSI3MyIgZmlsbD0iI2ZmZiIgcng9IjEyMyIgcnk9IjE0NiIvPjxlbGxpcHNlIGN4PSIxMjciIGN5PSI3MSIgZmlsbD0iI2ZmZiIgcng9IjEyMSIgcnk9IjY4Ii8+PGVsbGlwc2UgY3g9IjEyMyIgY3k9IjE0NSIgcng9IjI1NSIgcnk9IjciLz48ZWxsaXBzZSBjeD0iMTIwIiBjeT0iMiIgcng9IjI1NCIgcnk9IjYiLz48Y2lyY2xlIGN4PSIyMDEiIGN5PSI5MyIgcj0iNDYiIGZpbGw9IiNmZmYiLz48ZWxsaXBzZSBjeD0iMzEiIGN5PSI0OCIgZmlsbD0iI2ZmZiIgcng9IjIzIiByeT0iOTIiLz48ZWxsaXBzZSBjeD0iMTQ0IiBjeT0iNDciIGZpbGw9IiNmZmYiIHJ4PSIxMDMiIHJ5PSI0MCIvPjxwYXRoIGZpbGw9IiNmZWZmZmYiIGQ9Ik0xMCAxMGgyMzd2MTI4SDEweiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=avif&fit=scale&q=75&w=300&h=172 300w, https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=avif&fit=scale&q=75&w=500&h=288 500w, https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=avif&fit=scale&q=75&w=700&h=403 700w, https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=avif&fit=scale&q=75&w=900&h=518 900w, https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=avif&fit=scale&q=75&w=1100&h=634 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=webp&fit=scale&q=75&w=300&h=172 300w, https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=webp&fit=scale&q=75&w=500&h=288 500w, https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=webp&fit=scale&q=75&w=700&h=403 700w, https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=webp&fit=scale&q=75&w=900&h=518 900w, https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=webp&fit=scale&q=75&w=1100&h=634 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="576"
                srcset="https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=jpg&fit=scale&q=75&w=300&h=172 300w, https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=jpg&fit=scale&q=75&w=500&h=288 500w, https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=jpg&fit=scale&q=75&w=700&h=403 700w, https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=jpg&fit=scale&q=75&w=900&h=518 900w, https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png?fm=jpg&fit=scale&q=75&w=1100&h=634 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/DMl9ABTHKSQC74FmoiSmC/c88ab70bd263ca75dfcc07b3795c8cf8/Screenshot_2026-04-04_at_21.07.44.png"
                alt="View Transitions Toolkit — A collection of utility functions to more easily work with View Transitions."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Bramus released a new npm package full of view transition utilities. <a href="https://github.com/GoogleChromeLabs/view-transitions-toolkit/tree/main/docs" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2FGoogleChromeLabs%2Fview-transitions-toolkit%2Ftree%2Fmain%2Fdocs')">The GitHub docs</a> are also worth a read if you want to learn more about view transition inner workings. For example, I didn't know that you can pause view transitions.</p>
<p><a class="btn btn__small" href="https://chrome.dev/view-transitions-toolkit/">Level up your transition game</a></p>
<p><em>Side note: while playing around with all these snippets I've also run into the situation of view transitions blocking document interactions. Luckily, <a href="https://www.bram.us/2025/01/29/view-transitions-page-interactivity/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.bram.us%2F2025%2F01%2F29%2Fview-transitions-page-interactivity%2F')">Bramus had a fix for that one</a>, too.</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-wonderful-weird-web-%E2%80%93-%60css-or-bs%60" href="#the-wonderful-weird-web-%E2%80%93-%60css-or-bs%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-wonderful-weird-web-%E2%80%93-%60css-or-bs%60">The wonderful weird web – <code>CSS-or-BS</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(251,219,75); --color2: rgb(81,177,142); --color3: rgb(236,124,140); --color4: rgb(191,188,179); --color5: rgb(81,74,43);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTYyIj48cGF0aCBmaWxsPSIjNTE0YTJiIiBkPSJNMCAwaDMwMHYxNjJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjkzIiBjeT0iMTI2IiByPSIyMDciIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxODkiIGN5PSI3MSIgcj0iMjA5IiBmaWxsPSIjZmZmIi8+PGVsbGlwc2UgY3g9IjEyMiIgY3k9Ijc5IiBmaWxsPSIjMTU0YTNiIiByeD0iNTkiIHJ5PSIxNCIvPjxlbGxpcHNlIGN4PSIzMCIgY3k9Ijg5IiBmaWxsPSIjZmZmIiByeD0iNDQiIHJ5PSI1MCIvPjxlbGxpcHNlIGN4PSIxMzEiIGN5PSIxMjIiIGZpbGw9IiNhMTc5MDAiIHJ4PSI3MiIgcnk9IjciLz48ZWxsaXBzZSBjeD0iMjMwIiBjeT0iOTciIGZpbGw9IiNmZmYiIHJ4PSI1MyIgcnk9IjQxIi8+PHBhdGggZmlsbD0iI2ZmMDAyYiIgZD0iTTEzNSA2N2g0MnYyNWgtNDJ6Ii8+PGVsbGlwc2UgY3g9IjEyNiIgY3k9IjU1IiByeD0iMTI5IiByeT0iMiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=avif&fit=scale&q=75&w=300&h=163 300w, https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=avif&fit=scale&q=75&w=500&h=273 500w, https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=avif&fit=scale&q=75&w=700&h=382 700w, https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=avif&fit=scale&q=75&w=900&h=491 900w, https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=avif&fit=scale&q=75&w=1100&h=601 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=webp&fit=scale&q=75&w=300&h=163 300w, https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=webp&fit=scale&q=75&w=500&h=273 500w, https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=webp&fit=scale&q=75&w=700&h=382 700w, https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=webp&fit=scale&q=75&w=900&h=491 900w, https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=webp&fit=scale&q=75&w=1100&h=601 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="546"
                srcset="https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=jpg&fit=scale&q=75&w=300&h=163 300w, https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=jpg&fit=scale&q=75&w=500&h=273 500w, https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=jpg&fit=scale&q=75&w=700&h=382 700w, https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=jpg&fit=scale&q=75&w=900&h=491 900w, https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png?fm=jpg&fit=scale&q=75&w=1100&h=601 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/38uibidiVKEARyg6qC4fZf/9f08259a7c6a0d2802e9d02379877f78/Screenshot_2026-04-02_at_21.28.05.png"
                alt="background-layer. CSS or BS?"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I must admit this was harder than I thought! Are you certain you can differentiate real from made up CSS properties?</p>
<p><a class="btn btn__small" href="https://www.keithcirkel.co.uk/css-or-bs/">Decide!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-%60human.json%60-protocol" href="#the-%60human.json%60-protocol">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-%60human.json%60-protocol">The <code>human<wbr>.json</code> protocol</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(76,124,52); --color2: rgb(110,164,114); --color3: rgb(179.65909090909085,215.8227272727273,161.5772727272727); --color4: rgb(181,200,178); --color5: rgb(52,68,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTczIj48cGF0aCBmaWxsPSIjMzQ0NDU0IiBkPSJNMCAwaDMwMHYxNzNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMjUiIGN5PSI3MiIgZmlsbD0iI2ZmZiIgcng9IjI1NSIgcnk9IjY5Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09Im1hdHJpeCgtMi45OTUwNSA2NS45NTYxNSAtMjE1LjE5NTE2IC05Ljc3MTk2IDEyOS4yIDc0LjEpIi8+PHBhdGggZD0iTTI0OCAwaDh2MTQ4aC04eiIvPjxlbGxpcHNlIGN5PSI3MiIgcng9IjciIHJ5PSIxNDYiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJtMTMgMSAyMzggMTM1LTI0NiA0eiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoMzYuODk4NDUgNy41NzQxNiAtMTIuMjIxOTQgNTkuNTQwNjYgMjA5LjggNjYuNSkiLz48cGF0aCBkPSJtNTYuNi01IDE2MyAzLS4yIDExLTE2My0zeiIvPjxwYXRoIGZpbGw9IiNmOGZmZmYiIGQ9Ik00NiA4aDIwMHY2OEg0NnoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=avif&fit=scale&q=75&w=300&h=174 300w, https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=avif&fit=scale&q=75&w=500&h=290 500w, https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=avif&fit=scale&q=75&w=700&h=406 700w, https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=avif&fit=scale&q=75&w=900&h=522 900w, https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=avif&fit=scale&q=75&w=1100&h=638 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=webp&fit=scale&q=75&w=300&h=174 300w, https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=webp&fit=scale&q=75&w=500&h=290 500w, https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=webp&fit=scale&q=75&w=700&h=406 700w, https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=webp&fit=scale&q=75&w=900&h=522 900w, https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=webp&fit=scale&q=75&w=1100&h=638 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="580"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=jpg&fit=scale&q=75&w=300&h=174 300w, https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=jpg&fit=scale&q=75&w=500&h=290 500w, https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=jpg&fit=scale&q=75&w=700&h=406 700w, https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=jpg&fit=scale&q=75&w=900&h=522 900w, https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png?fm=jpg&fit=scale&q=75&w=1100&h=638 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4ex450YLH9TOual3Uh39gw/a7127bd2d5865fcb4e03e22f016d4316/Screenshot_2026-04-06_at_16.53.26.png"
                alt="{   &quot;version&quot;: &quot;0.1.1&quot;,   &quot;url&quot;: &quot;https://example.com/~alice&quot;,   &quot;vouches&quot;: [     {       &quot;url&quot;: &quot;https://bob.example.com&quot;,       &quot;vouched_at&quot;: &quot;2026-01-15&quot;     }   ] }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>More and more content is primarily generated without any human reviewing things. The human part is more at danger in our beloved web. To counter this movement, I've seen multiple people implement the <code>human<wbr>.json</code> protocol. People can vouch for each other so that we can build a network of trust. Should we all get on board?</p>
<p><a class="btn btn__small" href="https://codeberg.org/robida/human.json/src/branch/main/README.md">Trust your fellow webmaster</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="%60light-dark()%60-works-soon-for-images" href="#%60light-dark()%60-works-soon-for-images">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="%60light-dark()%60-works-soon-for-images"><code>light-dark()</code> works soon for images</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(200,154,107); --color2: rgb(176,99,104); --color3: rgb(210,115,116); --color4: rgb(172,179,188); --color5: rgb(44,68,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgODYiPjxwYXRoIGZpbGw9IiMyYzQ0NTQiIGQ9Ik0wIDBoMzAwdjg2SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxMjAiIGN5PSI0NiIgcj0iMTU4IiBmaWxsPSIjMGEwMDBjIi8+PHBhdGggZmlsbD0iIzZkNmE3NiIgZD0iTTIwIDQwaDE2OXYzSDIweiIvPjxwYXRoIGZpbGw9IiM2YjY5NmMiIGQ9Ik0yNyAzMWg2NXY0SDI3eiIvPjxwYXRoIGZpbGw9IiM1OTNjNDgiIGQ9Ik0xMzkgMzloOTZ2NWgtOTZ6Ii8+PHBhdGggZmlsbD0iIzdjNjA0OCIgZD0iTTIzIDIxaDIzdjVIMjN6Ii8+PHBhdGggZmlsbD0iIzEzMWMyZSIgZD0ibTI1NC0xNi02Ny45IDY0LjNMMTQxLjggMTQtMTYgMi4xeiIvPjxlbGxpcHNlIGN4PSIxMzkiIGN5PSI3MyIgZmlsbD0iIzAzMGQyNiIgcng9IjI1NSIgcnk9IjYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwNDBmMjciIHRyYW5zZm9ybT0icm90YXRlKC4zIC00MzY4IDQ3NDQ2LjYpIHNjYWxlKDQuODY5ODkgMTA0LjE5ODc5KSIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=avif&fit=scale&q=75&w=300&h=87 300w, https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=avif&fit=scale&q=75&w=500&h=145 500w, https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=avif&fit=scale&q=75&w=700&h=203 700w, https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=avif&fit=scale&q=75&w=900&h=261 900w, https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=avif&fit=scale&q=75&w=1100&h=319 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=webp&fit=scale&q=75&w=300&h=87 300w, https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=webp&fit=scale&q=75&w=500&h=145 500w, https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=webp&fit=scale&q=75&w=700&h=203 700w, https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=webp&fit=scale&q=75&w=900&h=261 900w, https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=webp&fit=scale&q=75&w=1100&h=319 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="290"
                srcset="https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=jpg&fit=scale&q=75&w=300&h=87 300w, https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=jpg&fit=scale&q=75&w=500&h=145 500w, https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=jpg&fit=scale&q=75&w=700&h=203 700w, https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=jpg&fit=scale&q=75&w=900&h=261 900w, https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png?fm=jpg&fit=scale&q=75&w=1100&h=319 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/64aCwyQtH3orEeL7oypkeW/8d4bdbd5c5a04eb67a372b927037c269/Screenshot_2026-04-06_at_16.47.35.png"
                alt=".element {   color-scheme: dark;   background-image: light-dark(url(light.png), url(dark.png)); }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>The <code>light-dark()</code> CSS function was limited to color values but very soon will work for images in CSS, too. It'll land in Chromium and Firefox soon. Let's see when Safari joins the party.</p>
<p><a class="btn btn__small" href="https://www.bram.us/2026/03/19/more-easy-light-dark-mode-switching-light-dark-is-about-to-support-images/">Flip some images</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-%60sticky%60-css-spec-change" href="#a-%60sticky%60-css-spec-change">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-%60sticky%60-css-spec-change">A <code>sticky</code> CSS spec change</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(5,115,170); --color2: rgb(84,100,116); --color3: rgb(126.18857142857141,209.5371428571429,251.2114285714286); --color4: rgb(188,188,188); --color5: rgb(52,68,92);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTUzIj48cGF0aCBmaWxsPSIjMzQ0NDVjIiBkPSJNMCAwaDMwMHYxNTNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoMjU0Ljk5NzgxIC0xLjA1NTkxIC4yMzQ3OCA1Ni42OTgzIDEzNC41IDY1LjIpIi8+PGVsbGlwc2UgY3g9IjE2MCIgY3k9IjY1IiBmaWxsPSIjZmZmIiByeD0iMTU0IiByeT0iNTYiLz48cGF0aCBkPSJNMjcxIDMyLjggMjQ4LTE2bC0uNiAxNDUuNiA2LjQgMTYuNHoiLz48ZWxsaXBzZSBjeT0iNzQiIHJ4PSIxMCIgcnk9IjEzMCIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMSAxMWg3NHYxMTBIMTF6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InJvdGF0ZSgtOTguNSAxMTAuNiAtNTUuMikgc2NhbGUoMzUuMTEzNzMgNjYuOTY2ODMpIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09Im1hdHJpeCgtMi43OTYzOCAxMi4yMTI4OSAtNjIuODIwMzggLTE0LjM4Mzk0IDE4OCAxMDIuOCkiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNODYgMTBoMTYwdjExMUg4NnoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=avif&fit=scale&q=75&w=300&h=153 300w, https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=avif&fit=scale&q=75&w=500&h=256 500w, https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=avif&fit=scale&q=75&w=700&h=359 700w, https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=avif&fit=scale&q=75&w=900&h=461 900w, https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=avif&fit=scale&q=75&w=1100&h=564 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=webp&fit=scale&q=75&w=300&h=153 300w, https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=webp&fit=scale&q=75&w=500&h=256 500w, https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=webp&fit=scale&q=75&w=700&h=359 700w, https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=webp&fit=scale&q=75&w=900&h=461 900w, https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=webp&fit=scale&q=75&w=1100&h=564 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="513"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=jpg&fit=scale&q=75&w=300&h=153 300w, https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=jpg&fit=scale&q=75&w=500&h=256 500w, https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=jpg&fit=scale&q=75&w=700&h=359 700w, https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=jpg&fit=scale&q=75&w=900&h=461 900w, https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png?fm=jpg&fit=scale&q=75&w=1100&h=564 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6JXKgzyAvRBsjDRWCEecU/f746e2ea6e10933b14d4293f8ca7e88a/Screenshot_2026-04-05_at_18.56.59.png"
                alt="The Change — A recent change to CSS fixes this issue: position: sticky can now track the nearest scrolling container per axis."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>A nine-year-old CSS spec issue has been resolved and <code>position: sticky</code> now tracks the nearest scrolling container <strong>per axis</strong>. So, if you want to stick an element to a scroll container <strong>and</strong> the document, this will soon be possible. As usual, today, we're still in Chromium only land. Still, great that this landed!</p>
<p><a class="btn btn__small" href="https://www.bram.us/2026/03/30/css-sticky-per-axis/">Stick!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="edge's-experimental-network-efficiency-guardrails" href="#edge's-experimental-network-efficiency-guardrails">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="edge's-experimental-network-efficiency-guardrails">Edge's experimental network efficiency guardrails</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(68,140,228); --color2: rgb(116,132,156); --color3: rgb(166,212,241); --color4: rgb(187,189,191); --color5: rgb(58,67,82);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTEzIj48cGF0aCBmaWxsPSIjM2E0MzUyIiBkPSJNMCAwaDMwMHYxMTNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwLjIgODUgLTM4KSBzY2FsZSg0MC45MTQwNCAyMzIuNDcxMjgpIi8+PGVsbGlwc2UgY3g9IjEyOSIgY3k9IjQ2IiBmaWxsPSIjZmZmIiByeD0iMTIxIiByeT0iNDAiLz48ZWxsaXBzZSBjeD0iMiIgY3k9IjQ4IiByeD0iOCIgcnk9Ijk2Ii8+PHBhdGggZD0iTTI1OS41LTJ2MTAyaC0xM1YtMnoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTEgOGg1M3Y3OEgxMXoiLz48ZWxsaXBzZSBjeD0iMTY5IiBjeT0iNDgiIGZpbGw9IiNmZmYiIHJ4PSI3OCIgcnk9IjM5Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMGQzOTYyIiB0cmFuc2Zvcm09Im1hdHJpeCgtMjEuNjE2NDIgNC40NDE5NCAtMi43NjA3IC0xMy40MzQ4IDc2LjIgNDEuMykiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMxIDhoMTEzdjc4SDEzMXoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=avif&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=avif&fit=scale&q=75&w=500&h=190 500w, https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=avif&fit=scale&q=75&w=700&h=266 700w, https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=avif&fit=scale&q=75&w=900&h=342 900w, https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=avif&fit=scale&q=75&w=1100&h=418 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=webp&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=webp&fit=scale&q=75&w=500&h=190 500w, https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=webp&fit=scale&q=75&w=700&h=266 700w, https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=webp&fit=scale&q=75&w=900&h=342 900w, https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=webp&fit=scale&q=75&w=1100&h=418 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="380"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=jpg&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=jpg&fit=scale&q=75&w=500&h=190 500w, https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=jpg&fit=scale&q=75&w=700&h=266 700w, https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=jpg&fit=scale&q=75&w=900&h=342 900w, https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png?fm=jpg&fit=scale&q=75&w=1100&h=418 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2EO9XtK90MNq4xwHKyagix/5ca3ad549cff4413bc29ed8b311cd3b6/Screenshot_2026-03-21_at_14.15.32.png"
                alt="Data source (Analytics, Data, Images) going into the network to be displayed as a website."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Now, that's cool! Edge is experimenting with a new way to track and report low-quality network resources. The initial criteria are uncompressed text resources, images larger than 200 kB and data URLs larger than 100 kB. I'm game!</p>
<p><a class="btn btn__small" href="https://blogs.windows.com/msedgedev/2026/03/17/monitor-and-improve-your-web-apps-load-performance/">Watch out</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="css-containment-explained" href="#css-containment-explained">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="css-containment-explained">CSS containment explained</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(208,153,99); --color2: rgb(164,124,88); --color3: rgb(224.29950738916253,188.37339901477833,153.10049261083745); --color4: rgb(170,178,187); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQ2Ij48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxNDZIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE2MiIgY3k9Ijc3IiByPSIxODAiIGZpbGw9IiMwNjAzMGEiLz48ZWxsaXBzZSBjeD0iMTM0IiBjeT0iNjMiIGZpbGw9IiM2ODY4NmQiIHJ4PSIxMDEiIHJ5PSI0Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjNjg1NTQ2IiB0cmFuc2Zvcm09Im1hdHJpeCgtMzQuNDE1OTcgMS4wOTEwNSAtLjEwOTcyIC0zLjQ2MTEzIDYyLjYgNDcuMikiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwNDBlMjYiIHRyYW5zZm9ybT0ibWF0cml4KC0yMDIuMTc0NDMgLjM3MDIyIC0uMDI0MTMgLTEzLjE3Njg0IDEyMy44IDEyNCkiLz48ZWxsaXBzZSBjeD0iMjQ5IiBjeT0iNzMiIGZpbGw9IiMwNjEwMjgiIHJ4PSI5IiByeT0iMTI0Ii8+PHBhdGggZmlsbD0iIzAwMDUxNSIgZD0iTTk0IDU4aDEwdjlIOTR6Ii8+PHBhdGggZmlsbD0iIzZhNzI4MSIgZD0iTTQ0LjUgNjB2LTFsNDEgM3YxeiIvPjxlbGxpcHNlIGN5PSI2MiIgZmlsbD0iIzA2MTEyOCIgcng9IjE0IiByeT0iMTI0Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=avif&fit=scale&q=75&w=300&h=147 300w, https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=avif&fit=scale&q=75&w=500&h=245 500w, https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=avif&fit=scale&q=75&w=700&h=343 700w, https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=avif&fit=scale&q=75&w=900&h=441 900w, https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=avif&fit=scale&q=75&w=1100&h=539 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=webp&fit=scale&q=75&w=300&h=147 300w, https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=webp&fit=scale&q=75&w=500&h=245 500w, https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=webp&fit=scale&q=75&w=700&h=343 700w, https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=webp&fit=scale&q=75&w=900&h=441 900w, https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=webp&fit=scale&q=75&w=1100&h=539 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="490"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=jpg&fit=scale&q=75&w=300&h=147 300w, https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=jpg&fit=scale&q=75&w=500&h=245 500w, https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=jpg&fit=scale&q=75&w=700&h=343 700w, https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=jpg&fit=scale&q=75&w=900&h=441 900w, https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png?fm=jpg&fit=scale&q=75&w=1100&h=539 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/7vCzRfih2Z5GZmG65I0f2l/ae7e1ad59f544dad5a9087737886389b/Screenshot_2026-04-06_at_16.23.26.png"
                alt=".article {   contain: layout paint style; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Harry has a gift for publishing reference pieces. This time the new article is about CSS containment (<code>contain</code>, <code>content-visibility</code> or <code>contain-intrinsic-size</code>). It's a stellar piece and if you wonder how to save the browser some rendering and recalculation work, you should check it out!</p>
<p><a class="btn btn__small" href="https://csswizardry.com/2026/04/what-is-css-containment-and-how-can-i-use-it/">Save some work</a></p>
<p><em>CSS containment can be used in other situations, too, though. <a href="https://ryanmulligan.dev/blog/50-50-overflow/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fryanmulligan.dev%2Fblog%2F50-50-overflow%2F')">Ryan explained how <code>contain</code> helped with a tricky layout situation</a>.</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="random-mdn-%E2%80%93-%60position-visibility%60" href="#random-mdn-%E2%80%93-%60position-visibility%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="random-mdn-%E2%80%93-%60position-visibility%60">Random MDN – <code>position-visibility</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(202,155,107); --color2: rgb(165,132,98); --color3: rgb(220.0358208955224,189.02985074626864,157.3641791044776); --color4: rgb(171,178,187); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTgyIj48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxODJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzMCIgY3k9Ijg0IiByPSIxNTYiIGZpbGw9IiMwYzA4MGUiLz48cGF0aCBmaWxsPSIjNDI0MzRiIiBkPSJtMzcgMTAyIDI0LTcwIDE1MyA3MHoiLz48ZWxsaXBzZSBjeD0iMTQyIiBjeT0iNTYiIGZpbGw9IiM1ZDY0NzIiIHJ4PSI5NyIgcnk9IjMiLz48cGF0aCBmaWxsPSIjNjQ2NDZhIiBkPSJNMjA5LjUgODMuNnY2bC02Ny0xLjJ2LTZ6Ii8+PGVsbGlwc2UgY3g9IjkxIiBjeT0iOTIiIGZpbGw9IiMwYzE0MjMiIHJ4PSIyNTUiIHJ5PSI0Ii8+PGVsbGlwc2UgY3g9IjEwNSIgY3k9Ijc4IiBmaWxsPSIjMGExMjIxIiByeD0iOTMiIHJ5PSI0Ii8+PGVsbGlwc2UgY3g9IjI0MCIgY3k9Ijk5IiBmaWxsPSIjMTAxODJhIiByeD0iMzIiIHJ5PSIxNTUiLz48cGF0aCBmaWxsPSIjNjM2YzdjIiBkPSJNNTAgODNoNzd2NUg1MHoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=avif&fit=scale&q=75&w=300&h=183 300w, https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=avif&fit=scale&q=75&w=500&h=305 500w, https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=avif&fit=scale&q=75&w=700&h=427 700w, https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=avif&fit=scale&q=75&w=900&h=549 900w, https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=avif&fit=scale&q=75&w=1100&h=671 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=webp&fit=scale&q=75&w=300&h=183 300w, https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=webp&fit=scale&q=75&w=500&h=305 500w, https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=webp&fit=scale&q=75&w=700&h=427 700w, https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=webp&fit=scale&q=75&w=900&h=549 900w, https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=webp&fit=scale&q=75&w=1100&h=671 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="610"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=jpg&fit=scale&q=75&w=300&h=183 300w, https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=jpg&fit=scale&q=75&w=500&h=305 500w, https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=jpg&fit=scale&q=75&w=700&h=427 700w, https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=jpg&fit=scale&q=75&w=900&h=549 900w, https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png?fm=jpg&fit=scale&q=75&w=1100&h=671 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3IGaaW1bPaRNewBhtOeRh2/d25928b41c73d78f9bd2e50fcf9746c2/Screenshot_2026-04-06_at_17.01.47.png"
                alt=".infobox {   position-anchor: --my-anchor;   position: fixed;   position-area: top span-all;  position-visibility: always; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Now that anchor positioning works across browsers, do you know that there's a CSS property to control when an anchored element is shown?</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/position-visibility">Hide and seek</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-recap-%E2%80%93-forbidden-%60fetch%60-headers" href="#til-recap-%E2%80%93-forbidden-%60fetch%60-headers">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-recap-%E2%80%93-forbidden-%60fetch%60-headers">TIL recap – Forbidden <code>fetch</code> headers</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(113,167,229); --color2: rgb(158,90,98); --color3: rgb(211,115,116); --color4: rgb(166,172,188); --color5: rgb(52,67,82);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTAzIj48cGF0aCBmaWxsPSIjMzQ0MzUyIiBkPSJNMCAwaDMwMHYxMDNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzNCIgY3k9IjM0IiByPSIxNjIiIGZpbGw9IiMwNDAzMGYiLz48ZWxsaXBzZSBjeD0iMTAwIiBjeT0iMzUiIGZpbGw9IiMyZTM3MzkiIHJ4PSI4OCIgcnk9IjIwIi8+PHBhdGggZmlsbD0iIzU2NzM1ZiIgZD0iTTEzIDE4aDEzNnY0SDEzeiIvPjxwYXRoIGZpbGw9IiMwZTEzMjciIGQ9Ik01OSAyM2gxMzB2MTNINTl6Ii8+PHBhdGggZmlsbD0iIzVlN2E1NiIgZD0iTTMyIDQ3aDUwdjRIMzJ6Ii8+PHBhdGggZmlsbD0iI2EwNDg1YSIgZD0iTTI1IDI4aDIzdjRIMjV6Ii8+PHBhdGggZmlsbD0iIzQxNGI0ZCIgZD0iTTEwNCA0N2gxMzV2NEgxMDR6Ii8+PGVsbGlwc2UgY3g9IjE0MiIgY3k9Ijg3IiBmaWxsPSIjMDEwYTI1IiByeD0iMjU1IiByeT0iNSIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=avif&fit=scale&q=75&w=300&h=103 300w, https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=avif&fit=scale&q=75&w=500&h=173 500w, https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=avif&fit=scale&q=75&w=700&h=242 700w, https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=avif&fit=scale&q=75&w=900&h=311 900w, https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=avif&fit=scale&q=75&w=1100&h=381 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=webp&fit=scale&q=75&w=300&h=103 300w, https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=webp&fit=scale&q=75&w=500&h=173 500w, https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=webp&fit=scale&q=75&w=700&h=242 700w, https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=webp&fit=scale&q=75&w=900&h=311 900w, https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=webp&fit=scale&q=75&w=1100&h=381 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="346"
                srcset="https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=jpg&fit=scale&q=75&w=300&h=103 300w, https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=jpg&fit=scale&q=75&w=500&h=173 500w, https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=jpg&fit=scale&q=75&w=700&h=242 700w, https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=jpg&fit=scale&q=75&w=900&h=311 900w, https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png?fm=jpg&fit=scale&q=75&w=1100&h=381 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/BYQcOHQ8IzAq8kz16hM6X/a92d376c5827115765a1e7fdd2a0607d/Screenshot_2026-04-06_at_17.05.46.png"
                alt="fetch(&apos;https://api.example.com/data&apos;, {   headers: {     &apos;Content-Length&apos;: &apos;100&apos;,  // This will be ignored     &apos;X-Custom-Header&apos;: &apos;This is fine&apos;  // This will be sent   } })"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Did you know that you can't set all the headers in your &quot;common&quot; <code>fetch</code> calls?</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/forbidden-headers-cant-be-set-in-fetch-requests/">Stay in your lane</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-on-the-baseline" href="#new-on-the-baseline">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-on-the-baseline">New on the baseline</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(203,155,108); --color2: rgb(173,137,98); --color3: rgb(211,116,116); --color4: rgb(170,178,186); --color5: rgb(52,68,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTI3Ij48cGF0aCBmaWxsPSIjMzQ0NDU0IiBkPSJNMCAwaDMwMHYxMjdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjkxIiBjeT0iNDIiIHI9IjE3OSIgZmlsbD0iIzAxMDAwYiIvPjxwYXRoIGZpbGw9IiM3YTY5NjYiIGQ9Ik01NCA1MWgxNjR2Nkg1NHoiLz48cGF0aCBmaWxsPSIjODk2ODRkIiBkPSJNNDcgMzZoNDF2Nkg0N3oiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwMzBjMjYiIHRyYW5zZm9ybT0ibWF0cml4KC4xMTk1NiA3LjU1MDI0IC0xNzguNzU3IDIuODMwNyA4OC45IDEwOCkiLz48cGF0aCBmaWxsPSIjMDEwYzFlIiBkPSJNMTIyIDQ4aDEwdjloLTEweiIvPjxwYXRoIGZpbGw9IiNiNGJhYzciIGQ9Im05NS42IDQwLjMgMS44LTYuOCAxIC4yLTEuOCA2Ljh6Ii8+PHBhdGggZmlsbD0iI2E0YWFiOCIgZD0iTTQyIDYzaDJ2OGgtMnoiLz48cGF0aCBmaWxsPSIjMDQwZTI4IiBkPSJNMjQ4IDBoOHYxMDNoLTh6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=avif&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=avif&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=avif&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=avif&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=avif&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=webp&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=webp&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=webp&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=webp&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=webp&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="426"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=jpg&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=jpg&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=jpg&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=jpg&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png?fm=jpg&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/5Mrh2qCOGfs52BmE5hRn2R/9e3f07b2a7e6ffb1d464af0e658754f0/Screenshot_2026-04-06_at_17.10.28.png"
                alt=".article {   text-indent: 3em each-line; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I'm not sure I'll ever use this but if you're into typography and fancy text layouts, you might dig it. The <code>text-indent</code> values <code>hanging</code> and <code>each-line</code> are now supported across browsers.</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/text-indent">Move your text around</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="three-valuable-projects-to-have-a-look-at" href="#three-valuable-projects-to-have-a-look-at">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="three-valuable-projects-to-have-a-look-at">Three valuable projects to have a look at</h2></div><ul>
<li><a href="https://github.com/jaywcjlove/awesome-mac" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fjaywcjlove%2Fawesome-mac')">jaywcjlove/awesome-mac</a> – A collection of high-quality macOS software.</li>
<li><a href="https://github.com/unhappychoice/gitlogue" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Funhappychoice%2Fgitlogue')">unhappychoice/gitlogue</a> – Turn your Git history into a living, animated story.</li>
<li><a href="https://github.com/zhw2590582/ArtPlayer" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fzhw2590582%2FArtPlayer')">zhw2590582/ArtPlayer</a> – A modern and full featured HTML5 video player.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-tiny-helper" href="#a-new-tiny-helper">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-tiny-helper">A new Tiny Helper</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(220,92,154); --color2: rgb(164,76,116); --color3: rgb(232,155,194); --color4: rgb(188,187,188); --color5: rgb(50,62,77);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTUzIj48cGF0aCBmaWxsPSIjMzIzZTRkIiBkPSJNMCAwaDMwMHYxNTNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoLTQuNzg5NzMgLTY4LjQ5NjI3IDI1NC4zNzg4MyAtMTcuNzg3OSAxODQuNiA1NC4zKSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoMTczLjA4NTI5IDMuMjk0MDggLTEuMDc4ODMgNTYuNjg2MjggMTc5LjEgNjUuNikiLz48ZWxsaXBzZSBjeD0iMTE2IiBjeT0iNCIgcng9IjI0NSIgcnk9IjUiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNNyAxMGgyNDN2MTExSDd6Ii8+PHBhdGggZD0ibTI1MC4yIDU4LjUuMyA3OC44TDI3MSA2Ny44bC0yMC4zLTgxek0tOCAxNDguNVY3LjVIOHYxNDF6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMzUzNDMyIiB0cmFuc2Zvcm09Im1hdHJpeCg1Mi4zMjU2NCAtLjM5OTE3IC4wMzg1MSA1LjA0ODQgODQgMjkpIi8+PGVsbGlwc2UgY3g9IjEyOSIgY3k9IjEyOSIgcng9IjE4MyIgcnk9IjgiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=avif&fit=scale&q=75&w=300&h=153 300w, https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=avif&fit=scale&q=75&w=500&h=256 500w, https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=avif&fit=scale&q=75&w=700&h=359 700w, https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=avif&fit=scale&q=75&w=900&h=461 900w, https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=avif&fit=scale&q=75&w=1100&h=564 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=webp&fit=scale&q=75&w=300&h=153 300w, https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=webp&fit=scale&q=75&w=500&h=256 500w, https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=webp&fit=scale&q=75&w=700&h=359 700w, https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=webp&fit=scale&q=75&w=900&h=461 900w, https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=webp&fit=scale&q=75&w=1100&h=564 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="513"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=jpg&fit=scale&q=75&w=300&h=153 300w, https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=jpg&fit=scale&q=75&w=500&h=256 500w, https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=jpg&fit=scale&q=75&w=700&h=359 700w, https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=jpg&fit=scale&q=75&w=900&h=461 900w, https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png?fm=jpg&fit=scale&q=75&w=1100&h=564 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4ogn44swgPbsNSE0cvW1MA/d6c47c86508a793650115f8c0bffd7f8/Screenshot_2026-04-06_at_17.13.38.png"
                alt="An image with a pixelated area."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you're looking for a quick way to pixelate images, this tiny helper is for you!</p>
<p><a class="btn btn__small" href="https://www.pixelateimage.co">Pixelate</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more single-purpose online tools on <a href="https://tiny-helpers.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ftiny-helpers.dev%2F')">tiny-helpers.dev</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="thought-of-the-week" href="#thought-of-the-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="thought-of-the-week">Thought of the week</h2></div><p><a href="https://www.seangoedecke.com/how-i-estimate-work/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.seangoedecke.com%2Fhow-i-estimate-work%2F')">So true</a>.</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <blockquote>
<p>Software engineering projects are not dominated by the known work, but by the unknown work, which always takes 90% of the time.</p>
</blockquote>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="did-you-learn-something-from-this-issue%3F" href="#did-you-learn-something-from-this-issue%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="did-you-learn-something-from-this-issue%3F">Did you learn something from this issue?</h2></div><p>❤️ If so, <strong>join 40 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="this-is-all%2C-friends!" href="#this-is-all%2C-friends!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="this-is-all%2C-friends!">This is all, friends!</h2></div><p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr aria-hidden="true"><p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Web Weekly #188">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Intl can localize units, too! (#tilPost)</title>
      <link href="https://www.stefanjudis.com/today-i-learned/intl-can-localize-units-too/"/>
      <published>2026-04-05T22:00:00+00:00</published>
      <updated>2026-04-05T22:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/today-i-learned/intl-can-localize-units-too/</id>
      <category term="tilPost"></category>
        <category term="JavaScript"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>Today I learned that <code>Intl</code> allows you to format numbers with currencies or units!</p>
<pre class="language-javascript"><code class="language-javascript">console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>
  <span class="token keyword">new</span> <span class="token class-name">Intl<span class="token punctuation">.</span>NumberFormat</span><span class="token punctuation">(</span><span class="token string">"de-DE"</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> 
    <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">"currency"</span><span class="token punctuation">,</span> 
    <span class="token literal-property property">currency</span><span class="token operator">:</span> <span class="token string">"EUR"</span> 
  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">format</span><span class="token punctuation">(</span><span class="token number">123456789</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "123.456.789,00 €"</span>

console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>
  <span class="token keyword">new</span> <span class="token class-name">Intl<span class="token punctuation">.</span>NumberFormat</span><span class="token punctuation">(</span><span class="token string">"ja-JP"</span><span class="token punctuation">,</span> <span class="token punctuation">{</span> 
    <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">"currency"</span><span class="token punctuation">,</span> 
    <span class="token literal-property property">currency</span><span class="token operator">:</span> <span class="token string">"JPY"</span> 
  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">format</span><span class="token punctuation">(</span><span class="token number">123456789</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "￥123,456,789"</span>

console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>
  <span class="token keyword">new</span> <span class="token class-name">Intl<span class="token punctuation">.</span>NumberFormat</span><span class="token punctuation">(</span><span class="token string">"pt-PT"</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
    <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">"unit"</span><span class="token punctuation">,</span>
    <span class="token literal-property property">unit</span><span class="token operator">:</span> <span class="token string">"kilometer-per-hour"</span><span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">format</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "50 km/h"</span>

console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>
  <span class="token keyword">new</span> <span class="token class-name">Intl<span class="token punctuation">.</span>NumberFormat</span><span class="token punctuation">(</span><span class="token string">'fr-FR'</span><span class="token punctuation">,</span> <span class="token punctuation">{</span>
    <span class="token literal-property property">style</span><span class="token operator">:</span> <span class="token string">'unit'</span><span class="token punctuation">,</span>
    <span class="token literal-property property">unit</span><span class="token operator">:</span> <span class="token string">'kilobyte'</span><span class="token punctuation">,</span>
    <span class="token literal-property property">unitDisplay</span><span class="token operator">:</span> <span class="token string">'long'</span><span class="token punctuation">,</span>
  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">format</span><span class="token punctuation">(</span><span class="token number">123456</span><span class="token punctuation">)</span>
<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// "123 456 kilooctets"</span>
</code></pre>
<p>Did you notice how the Japanese Yen symbol (￥) moved in front of the numbers? Or that, apparently, French folks translate the unit kilobyte? Fun!</p>
<p>Whenever you put currency/unit logic into userland JavaScript, don't. It's all baked into the language these days.</p>
<p><em>Tip: here's <a href="https://tc39.es/ecma402/#sec-issanctionedsimpleunitidentifier" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ftc39.es%2Fecma402%2F%23sec-issanctionedsimpleunitidentifier')">the list of supported units</a>.</em></p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Intl can localize units, too!">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>The scope of type guards and assertion functions (#tilPost)</title>
      <link href="https://www.stefanjudis.com/today-i-learned/the-scope-of-type-guards-and-assertion-functions/"/>
      <published>2026-04-03T22:00:00+00:00</published>
      <updated>2026-04-03T22:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/today-i-learned/the-scope-of-type-guards-and-assertion-functions/</id>
      <category term="tilPost"></category>
        <category term="TypeScript"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>I've just read <a href="https://www.solberg.is/unknown-to-typed" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.solberg.is%2Funknown-to-typed')">Absorbing unknown Into the Type Realm</a>. It's a good read, check it out.</p>
<p>However I also learned an important difference between TypeScript type guards and assertion functions. And to be fair, I didn't even know assertion functions were a thing in TypeScript.</p>
<p>Let's look at a standard type guard.</p>
<pre class="shiki dark-plus twoslash lsp" style="background-color: #1E1E1E; color: #D4D4D4"><div class="language-id">ts</div><div class='code-container'><code><div class='line'><span style="color: #569CD6">interface</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0"><data-lsp lsp='interface User' >User</data-lsp></span><span style="color: #D4D4D4"> {</span></div><div class='line'><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE"><data-lsp lsp='(property) User.name: string' >name</data-lsp></span><span style="color: #D4D4D4">: </span><span style="color: #4EC9B0">string</span><span style="color: #D4D4D4">;</span></div><div class='line'><span style="color: #D4D4D4">}</span></div><div class='line'>&nbsp;</div><div class='line'><span style="color: #6A9955">// standard type guard</span></div><div class='line'><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA"><data-lsp lsp='function isUser(value: unknown): value is User' >isUser</data-lsp></span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE"><data-lsp lsp='(parameter) value: unknown' >value</data-lsp></span><span style="color: #D4D4D4">: </span><span style="color: #4EC9B0">unknown</span><span style="color: #D4D4D4">): </span><span style="color: #9CDCFE"><data-lsp lsp='(parameter) value: unknown' >value</data-lsp></span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">is</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0"><data-lsp lsp='interface User' >User</data-lsp></span><span style="color: #D4D4D4"> {</span></div><div class='line'><span style="color: #D4D4D4">  </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">typeof</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE"><data-lsp lsp='(parameter) value: unknown' >value</data-lsp></span><span style="color: #D4D4D4"> === </span><span style="color: #CE9178">"object"</span><span style="color: #D4D4D4"> && </span><span style="color: #9CDCFE"><data-lsp lsp='(parameter) value: object | null' >value</data-lsp></span><span style="color: #D4D4D4"> !== </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4"> && </span><span style="color: #CE9178">"name"</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">in</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE"><data-lsp lsp='(parameter) value: object' >value</data-lsp></span><span style="color: #D4D4D4">;</span></div><div class='line'><span style="color: #D4D4D4">}</span></div><div class='line'>&nbsp;</div><div class='line'><span style="color: #6A9955">// let&apos;s pretend JSON.parse is an unknown data source</span></div><div class='line'><span style="color: #569CD6">const</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF"><data-lsp lsp='const data: any' >data</data-lsp></span><span style="color: #D4D4D4"> = </span><span style="color: #4EC9B0"><data-lsp lsp='var JSON: JSON' >JSON</data-lsp></span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA"><data-lsp lsp='(method) JSON.parse(text: string, reviver?: ((this: any, key: string, value: any) => any) | undefined): any' >parse</data-lsp></span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&apos;{"name": "Stefan"}&apos;</span><span style="color: #D4D4D4">);</span></div><div class='line'>&nbsp;</div><div class='line'><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #DCDCAA"><data-lsp lsp='function isUser(value: unknown): value is User' >isUser</data-lsp></span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE"><data-lsp lsp='const data: any' >data</data-lsp></span><span style="color: #D4D4D4">)) {</span></div><div class='line'><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE"><data-lsp lsp='const data: User' style='border-bottom: solid 2px lightgrey;'>data</data-lsp></span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE"><data-lsp lsp='(property) User.name: string' >name</data-lsp></span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA"><data-lsp lsp='(method) String.toUpperCase(): string' >toUpperCase</data-lsp></span><span style="color: #D4D4D4">(); </span><span style="color: #6A9955">// narrowed to User inside of condition scope</span></div><div class='meta-line'><span class='popover-prefix'>   </span><span class='popover'><div class='arrow'></div>const data: User</span></div><div class='line'><span style="color: #D4D4D4">}</span></div><div class='line'>&nbsp;</div><div class='line'><span style="color: #9CDCFE"><data-lsp lsp='const data: any' style='border-bottom: solid 2px lightgrey;'>data</data-lsp></span><span style="color: #D4D4D4">;</span></div><div class='meta-line'><span class='popover-prefix'> </span><span class='popover'><div class='arrow'></div>const data: any</span></div></code></div></pre>
<p>If you receive data from an unknown source (most likely via <code>fetch</code> or HTTP), TypeScript doesn't know the types. To be on the safe side, you should bring in a validation library like <a href="https://zod.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fzod.dev%2F')">Zod</a> but if you only care about the types, a classic type guard might do the trick.</p>
<p>When you check the types above you see that thanks to the <code>isUser</code> type guard, <code>data</code> is of type <code>User</code> inside the condition scope. Great! But if you leave the scope you'll see that <code>data</code> is again back at <code>any</code>. Booh!</p>
<p>Now check this out!</p>
<pre class="shiki dark-plus twoslash lsp" style="background-color: #1E1E1E; color: #D4D4D4"><div class="language-id">ts</div><div class='code-container'><code><div class='line'><span style="color: #569CD6">interface</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0"><data-lsp lsp='interface User' >User</data-lsp></span><span style="color: #D4D4D4"> {</span></div><div class='line'><span style="color: #D4D4D4">  </span><span style="color: #9CDCFE"><data-lsp lsp='(property) User.name: string' >name</data-lsp></span><span style="color: #D4D4D4">: </span><span style="color: #4EC9B0">string</span><span style="color: #D4D4D4">;</span></div><div class='line'><span style="color: #D4D4D4">}</span></div><div class='line'>&nbsp;</div><div class='line'><span style="color: #6A9955">// assertion function</span></div><div class='line'><span style="color: #569CD6">function</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA"><data-lsp lsp='function assertIsUser(value: unknown): asserts value is User' >assertIsUser</data-lsp></span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE"><data-lsp lsp='(parameter) value: unknown' >value</data-lsp></span><span style="color: #D4D4D4">: </span><span style="color: #4EC9B0">unknown</span><span style="color: #D4D4D4">): asserts </span><span style="color: #9CDCFE"><data-lsp lsp='(parameter) value: unknown' >value</data-lsp></span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">is</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0"><data-lsp lsp='interface User' >User</data-lsp></span><span style="color: #D4D4D4"> {</span></div><div class='line'><span style="color: #D4D4D4">  </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #569CD6">typeof</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE"><data-lsp lsp='(parameter) value: unknown' >value</data-lsp></span><span style="color: #D4D4D4"> !== </span><span style="color: #CE9178">"object"</span><span style="color: #D4D4D4"> || </span><span style="color: #9CDCFE"><data-lsp lsp='(parameter) value: object | null' >value</data-lsp></span><span style="color: #D4D4D4"> === </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4"> || !(</span><span style="color: #CE9178">"name"</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">in</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE"><data-lsp lsp='(parameter) value: object' >value</data-lsp></span><span style="color: #D4D4D4">)) {</span></div><div class='line'><span style="color: #D4D4D4">    </span><span style="color: #C586C0">throw</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0"><data-lsp lsp='var Error: ErrorConstructor&#10;new (message?: string | undefined) => Error' >Error</data-lsp></span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">"Expected a User"</span><span style="color: #D4D4D4">);</span></div><div class='line'><span style="color: #D4D4D4">  }</span></div><div class='line'><span style="color: #D4D4D4">}</span></div><div class='line'>&nbsp;</div><div class='line'><span style="color: #6A9955">// let&apos;s pretend JSON.parse is an unknown data source</span></div><div class='line'><span style="color: #569CD6">const</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF"><data-lsp lsp='const data: any' >data</data-lsp></span><span style="color: #D4D4D4"> = </span><span style="color: #4EC9B0"><data-lsp lsp='var JSON: JSON' >JSON</data-lsp></span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA"><data-lsp lsp='(method) JSON.parse(text: string, reviver?: ((this: any, key: string, value: any) => any) | undefined): any' >parse</data-lsp></span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&apos;{"name": "Stefan"}&apos;</span><span style="color: #D4D4D4">);</span></div><div class='line'>&nbsp;</div><div class='line'><span style="color: #DCDCAA"><data-lsp lsp='function assertIsUser(value: unknown): asserts value is User' >assertIsUser</data-lsp></span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE"><data-lsp lsp='const data: any' >data</data-lsp></span><span style="color: #D4D4D4">); </span><span style="color: #6A9955">// throws if not a User</span></div><div class='line'>&nbsp;</div><div class='line'><span style="color: #9CDCFE"><data-lsp lsp='const data: User' style='border-bottom: solid 2px lightgrey;'>data</data-lsp></span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE"><data-lsp lsp='(property) User.name: string' >name</data-lsp></span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA"><data-lsp lsp='(method) String.toUpperCase(): string' >toUpperCase</data-lsp></span><span style="color: #D4D4D4">(); </span><span style="color: #6A9955">// narrowed to User after assertion</span></div><div class='meta-line'><span class='popover-prefix'> </span><span class='popover'><div class='arrow'></div>const data: User</span></div></code></div></pre>
<p>If you now change the type guard to be an assertion function with <code>asserts value is User</code> the type will be adjusted for the rest of <strong>the current scope</strong>. The contract is: if this function doesn't throw, apply the type to the current scope.</p>
<p>Good stuff!</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20The scope of type guards and assertion functions">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Web Weekly #187 (#blogPost)</title>
      <link href="https://www.stefanjudis.com/blog/web-weekly-187/"/>
      <published>2026-03-16T23:00:00+00:00</published>
      <updated>2026-03-16T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/blog/web-weekly-187/</id>
      <category term="blogPost"></category>
        <category term="Newsletter"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="guten-tag!-guten-tag!-%F0%9F%91%8B" href="#guten-tag!-guten-tag!-%F0%9F%91%8B">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="guten-tag!-guten-tag!-%F0%9F%91%8B">Guten Tag! Guten Tag! 👋</h2></div><p>Have you heard of <code>focusgroup</code>? Did you try aliases in Node.js imports already? Or do you know that <code>CSS</code> is available in JavaScript?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <p>Mario listens to &quot;<a href="https://www.youtube.com/watch?v=aFzqrK7_dA0" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DaFzqrK7_dA0')">Ethel Cain - Waco, Texas</a>&quot; and says:</p>
<blockquote>
<p>This is my kind of opera.</p>
</blockquote>
</div><p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>four more songs</strong> left in the queue.</p>
<hr aria-hidden="true"><p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mhbgli5jsc22">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116245547487623246" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffront-end.social%2F%40stefan%2F116245547487623246')">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_this-weeks-web-weekly-is-about-to-hit-all-activity-7439715268194615297-P_Ky" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.linkedin.com%2Fposts%2Fstefan-judis_this-weeks-web-weekly-is-about-to-hit-all-activity-7439715268194615297-P_Ky')">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr aria-hidden="true"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="web-weekly-housekeeping" href="#web-weekly-housekeeping">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="web-weekly-housekeeping">Web Weekly housekeeping</h2></div><p>A big thank you and a huge bag of karma points go to Jonathan this week. <strong>Thank you for supporting indie publishing in the times of AI slop</strong> by covering a small fraction of the cost it takes to send Web Weekly every week! My little side project is now supported by 40 people. This makes me incredibly happy (and proud). ❤️</p>
<p><em>You can support Web Weekly on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</em></p>
<p>And also, I messed up a link last week. I clicked all the links before sending the email, but because last week was an &quot;unofficial Temami edition&quot;, I didn't recognize that I linked to the wrong post. Here's <a href="https://css-tip.com/anchor-issues/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcss-tip.com%2Fanchor-issues%2F')">the correct link to anchor positioning issues</a>. Sorry!</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="no-code" href="#no-code">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="no-code">No code</h2></div><p>I didn't discover good &quot;No code&quot; articles this week. Did you read something great beyond coding lately? I'd love to read it, too!</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="%60color-contrast()%60-beyond-black-%26-white" href="#%60color-contrast()%60-beyond-black-%26-white">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="%60color-contrast()%60-beyond-black-%26-white"><code>color-contrast()</code> beyond black &amp; white</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(203,156,108); --color2: rgb(179,114,104); --color3: rgb(210,115,116); --color4: rgb(169,177,185); --color5: rgb(51,67,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTgzIj48cGF0aCBmaWxsPSIjMzM0MzU0IiBkPSJNMCAwaDMwMHYxODNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE4MiIgY3k9IjgyIiByPSIyMDAiIGZpbGw9IiMwMDAwMDkiLz48ZWxsaXBzZSBjeD0iMTA1IiBjeT0iNzEiIGZpbGw9IiMzMTJlM2QiIHJ4PSI0NyIgcnk9IjQxIi8+PHBhdGggZmlsbD0iIzdlNTA0ZSIgZD0iTTEwNCA0M2g4OXY0aC04OXoiLz48cGF0aCBmaWxsPSIjNTU2Nzc0IiBkPSJtMTE5IDUzLjItMS42IDQuNC01Mi41LTEuNS01LjEtMy4xeiIvPjxlbGxpcHNlIGN4PSI5MyIgY3k9IjE1MSIgZmlsbD0iIzAyMGMyNSIgcng9IjI1NSIgcnk9IjEwIi8+PHBhdGggZmlsbD0iIzZlM2Q0OSIgZD0iTTY5IDEwMWg5N3Y1SDY5eiIvPjxlbGxpcHNlIGN4PSIxMjkiIGZpbGw9IiMwMzBkMjciIHJ4PSIyNTUiIHJ5PSIxNSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzA2MTAyOCIgdHJhbnNmb3JtPSJtYXRyaXgoMy4zODIzNyAxNDEuOTg4NzggLTE1Ljc0IC4zNzQ5NSAyNTUgMTA3KSIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=avif&fit=scale&q=75&w=300&h=184 300w, https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=avif&fit=scale&q=75&w=500&h=308 500w, https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=avif&fit=scale&q=75&w=700&h=431 700w, https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=avif&fit=scale&q=75&w=900&h=554 900w, https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=avif&fit=scale&q=75&w=1100&h=678 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=webp&fit=scale&q=75&w=300&h=184 300w, https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=webp&fit=scale&q=75&w=500&h=308 500w, https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=webp&fit=scale&q=75&w=700&h=431 700w, https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=webp&fit=scale&q=75&w=900&h=554 900w, https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=webp&fit=scale&q=75&w=1100&h=678 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="616"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=jpg&fit=scale&q=75&w=300&h=184 300w, https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=jpg&fit=scale&q=75&w=500&h=308 500w, https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=jpg&fit=scale&q=75&w=700&h=431 700w, https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=jpg&fit=scale&q=75&w=900&h=554 900w, https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png?fm=jpg&fit=scale&q=75&w=1100&h=678 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4qe8igdAyoClTAtiX0qhVR/b3360441a3249573522efec6a55f53c9/Screenshot_2026-03-14_at_09.20.08.png"
                alt=".card {   --bg: var(--brand-color, #6c1afb);   background: var(--bg);    color: color-mix(     in oklch,      var(--bg) 10%,      contrast-color(var(--bg))   ); }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>With Chrome 147 (planned for Mar 25), <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color_value/contrast-color" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FValues%2Fcolor_value%2Fcontrast-color')">the <code>contrast-color()</code> function</a> will be newly available across all browsers. Theoretically, the function lets you throw a color in and get an accessible contrast color out. It's a great idea, but <code>contrast-color()</code> is limited to returning black or white right now.</p>
<p>Una describes how to work around this limitation.</p>
<p><a class="btn btn__small" href="https://una.im/advanced-contrast-color/">Mix all the colors</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="form-associated-custom-elements" href="#form-associated-custom-elements">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="form-associated-custom-elements">Form-associated custom elements</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(112,166,223); --color2: rgb(162,97,125); --color3: rgb(219,195,132); --color4: rgb(164,131,193); --color5: rgb(51,67,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTc5Ij48cGF0aCBmaWxsPSIjMzM0MzUzIiBkPSJNMCAwaDMwMHYxNzlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0NCIgY3k9Ijc5IiByPSIxNjciIGZpbGw9IiMwMjAwMGQiLz48ZWxsaXBzZSBjeD0iMTA4IiBjeT0iMzYiIGZpbGw9IiM4YzZmNmQiIHJ4PSI4MCIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iNzMiIGN5PSI0NyIgZmlsbD0iIzY3M2Q1NCIgcng9IjU4IiByeT0iNCIvPjxlbGxpcHNlIGN4PSIxMjciIGN5PSI5MiIgZmlsbD0iIzViNWM2OSIgcng9IjEwOCIgcnk9IjMiLz48cGF0aCBmaWxsPSIjN2U1MjkyIiBkPSJNNDEgNjhoNDd2NUg0MXoiLz48ZWxsaXBzZSBjeD0iMTI4IiBjeT0iMTUxIiBmaWxsPSIjMDEwYzIzIiByeD0iMjU1IiByeT0iMTQiLz48cGF0aCBmaWxsPSIjOTg4MzVlIiBkPSJNNDQgNzloMjZ2NUg0NHoiLz48cGF0aCBmaWxsPSIjNzQ0ZjRkIiBkPSJNOTAgNDZoNzZ2NEg5MHoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=avif&fit=scale&q=75&w=300&h=180 300w, https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=avif&fit=scale&q=75&w=500&h=300 500w, https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=avif&fit=scale&q=75&w=700&h=420 700w, https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=avif&fit=scale&q=75&w=900&h=540 900w, https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=avif&fit=scale&q=75&w=1100&h=660 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=webp&fit=scale&q=75&w=300&h=180 300w, https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=webp&fit=scale&q=75&w=500&h=300 500w, https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=webp&fit=scale&q=75&w=700&h=420 700w, https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=webp&fit=scale&q=75&w=900&h=540 900w, https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=webp&fit=scale&q=75&w=1100&h=660 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="600"
                srcset="https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=jpg&fit=scale&q=75&w=300&h=180 300w, https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=jpg&fit=scale&q=75&w=500&h=300 500w, https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=jpg&fit=scale&q=75&w=700&h=420 700w, https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=jpg&fit=scale&q=75&w=900&h=540 900w, https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png?fm=jpg&fit=scale&q=75&w=1100&h=660 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/20x4FmUSw8VEfbDQHQEemA/dd6d4a7fb72ba80a2dfbbda2a0fa3deb/Screenshot_2026-03-14_at_09.44.25.png"
                alt="class MyInput extends HTMLElement {   static formAssociated = true; // The &quot;I&apos;m a form control&quot; flag    constructor() {     super();     // This gives you the keys to the kingdom     this._internals = this.attachInternals();   } }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Granted, Rob's article is very long, but the intro paragraphs make it worth reading already.</p>
<p>I've seen <a href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/attachInternals" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FAPI%2FHTMLElement%2FattachInternals')">the <code>attachInternals()</code> method</a> quite a few times in custom elements materials, but I never really understood what it's about.</p>
<p>Now I do, and it's quite cool if you're dealing with web components. Thanks, Rob!</p>
<p><a class="btn btn__small" href="https://frontendmasters.com/blog/form-associated-custom-elements-in-practice/">Attach your inputs</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-%60focusgroup%60-rfc" href="#a-new-%60focusgroup%60-rfc">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-%60focusgroup%60-rfc">A new <code>focusgroup</code> RFC</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(201,154,107); --color2: rgb(175,102,105); --color3: rgb(211,115,116); --color4: rgb(172,179,188); --color5: rgb(51,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQ4Ij48cGF0aCBmaWxsPSIjMzMzYzU0IiBkPSJNMCAwaDMwMHYxNDhIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzOCIgY3k9IjU5IiByPSIxNjIiIGZpbGw9IiMwMzA0MGIiLz48ZWxsaXBzZSBjeD0iMTI4IiBjeT0iNTciIGZpbGw9IiM0YTNmNDciIHJ4PSI1NiIgcnk9IjI0Ii8+PHBhdGggZmlsbD0iIzc0NTE1ZSIgZD0iTTc5IDczaDEwNHY1SDc5eiIvPjxwYXRoIGZpbGw9IiM2NTVmNGMiIGQ9Ik03MCAzNmgxMjR2NUg3MHoiLz48ZWxsaXBzZSBjeD0iMjEzIiBjeT0iMTIzIiBmaWxsPSIjMDIwZDI2IiByeD0iMjU1IiByeT0iMTEiLz48ZWxsaXBzZSBjeD0iOTIiIGN5PSI1IiBmaWxsPSIjMDMwZjI4IiByeD0iMjU1IiByeT0iOCIvPjxwYXRoIGZpbGw9IiM3YjU5NjUiIGQ9Ik02NSA4NmgyOHY1SDY1eiIvPjxlbGxpcHNlIGN4PSIxMjciIGN5PSI2MyIgZmlsbD0iIzZkNGU1YyIgcng9IjU4IiByeT0iMyIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=avif&fit=scale&q=75&w=300&h=148 300w, https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=avif&fit=scale&q=75&w=500&h=248 500w, https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=avif&fit=scale&q=75&w=700&h=347 700w, https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=avif&fit=scale&q=75&w=900&h=446 900w, https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=avif&fit=scale&q=75&w=1100&h=546 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=webp&fit=scale&q=75&w=300&h=148 300w, https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=webp&fit=scale&q=75&w=500&h=248 500w, https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=webp&fit=scale&q=75&w=700&h=347 700w, https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=webp&fit=scale&q=75&w=900&h=446 900w, https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=webp&fit=scale&q=75&w=1100&h=546 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="496"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=jpg&fit=scale&q=75&w=300&h=148 300w, https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=jpg&fit=scale&q=75&w=500&h=248 500w, https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=jpg&fit=scale&q=75&w=700&h=347 700w, https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=jpg&fit=scale&q=75&w=900&h=446 900w, https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png?fm=jpg&fit=scale&q=75&w=1100&h=546 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4WZ00rWQbJijT0OvGjQhrH/a257980281b336fba0d1fb6bc871bd56/Screenshot_2026-03-17_at_17.03.53.png"
                alt="&amp;lt;div focusgroup=&amp;quot;tablist&amp;quot;&amp;gt;   &amp;lt;button&amp;gt;Tab 1&amp;lt;/button&amp;gt;   &amp;lt;button&amp;gt;Tab 2&amp;lt;/button&amp;gt;   &amp;lt;button&amp;gt;Tab 3&amp;lt;/button&amp;gt; &amp;lt;/div&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>There's a new HTML feature shipping behind a flag in Chromium: <code>focusgroup</code>. The idea is that the attribute will make it easier to build components that require custom focus handling.</p>
<p>It's also wild that a <code>focusgroup</code> is supposed to set the correct ARIA roles automatically. If this works, maybe that will make the web a bit more accessible? I've heard some skeptical voices already, though.</p>
<p>Browsers are asking for feedback, so now is your chance!</p>
<p><a class="btn btn__small" href="https://developer.chrome.com/blog/focusgroup-rfc">Test it out!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="stop-checking-for-view-transition-support" href="#stop-checking-for-view-transition-support">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="stop-checking-for-view-transition-support">Stop checking for view transition support</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(114,170,232); --color2: rgb(84,120,163); --color3: rgb(217,193,131); --color4: rgb(171,174,188); --color5: rgb(51,67,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTM0Ij48cGF0aCBmaWxsPSIjMzM0MzUzIiBkPSJNMCAwaDMwMHYxMzRIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyNyIgY3k9IjUzIiByPSIxNDYiIGZpbGw9IiMwMzAwMGUiLz48cGF0aCBmaWxsPSIjM2M0MjRmIiBkPSJNMzUgMzNoNzd2MzlIMzV6Ii8+PHBhdGggZmlsbD0iIzY5NjQ3MyIgZD0iTTM3IDY2aDE4OXY1SDM3eiIvPjxwYXRoIGZpbGw9IiM4NTU0NTAiIGQ9Ik00NyAzMmgxMzR2NUg0N3oiLz48cGF0aCBmaWxsPSIjMzg3MmEzIiBkPSJNMzUgNDNoNTR2NUgzNXoiLz48cGF0aCBmaWxsPSIjMGMxMzIyIiBkPSJNNTIgNDloNjZ2MThINTJ6Ii8+PGVsbGlwc2UgY3g9IjEzMSIgY3k9IjExMSIgZmlsbD0iIzAxMGIyNCIgcng9IjI1NSIgcnk9IjgiLz48ZWxsaXBzZSBjeD0iMTAyIiBjeT0iMSIgZmlsbD0iIzAzMGUyNyIgcng9IjI1NSIgcnk9IjEwIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=avif&fit=scale&q=75&w=300&h=135 300w, https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=avif&fit=scale&q=75&w=500&h=225 500w, https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=avif&fit=scale&q=75&w=700&h=315 700w, https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=avif&fit=scale&q=75&w=900&h=405 900w, https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=avif&fit=scale&q=75&w=1100&h=495 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=webp&fit=scale&q=75&w=300&h=135 300w, https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=webp&fit=scale&q=75&w=500&h=225 500w, https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=webp&fit=scale&q=75&w=700&h=315 700w, https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=webp&fit=scale&q=75&w=900&h=405 900w, https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=webp&fit=scale&q=75&w=1100&h=495 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="450"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=jpg&fit=scale&q=75&w=300&h=135 300w, https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=jpg&fit=scale&q=75&w=500&h=225 500w, https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=jpg&fit=scale&q=75&w=700&h=315 700w, https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=jpg&fit=scale&q=75&w=900&h=405 900w, https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png?fm=jpg&fit=scale&q=75&w=1100&h=495 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6yHaxee1HIYxuoAJfoEDAo/cd3e20ae9195180e24caf7a17b08af98/Screenshot_2026-03-17_at_15.40.03.png"
                alt="if (!document.startViewTransition) {   updateTheDOM(); } else {   document.startViewTransition(updateTheDOM); }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>You've probably written this snippet many times by now. 👆 Even though view transitions have been cross-browser supported for a while, you still have to check every time if they're available with <code>if (document<wbr>.startViewTransition)</code>. What if you didn't have to do that? Bramus released a non-visual polyfill.</p>
<p><a class="btn btn__small" href="https://www.bram.us/2026/03/11/view-transitions-mock-is-a-non-visual-polyfill-for-same-document-view-transitions/">Remove some ifs</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-wonderful-weird-web-%E2%80%93-jnd" href="#the-wonderful-weird-web-%E2%80%93-jnd">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-wonderful-weird-web-%E2%80%93-jnd">The wonderful weird web – JND</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(89,144,228); --color2: rgb(108,173,173); --color3: rgb(140,220,188); --color4: rgb(188,188,188); --color5: rgb(69,78,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTEzIj48cGF0aCBmaWxsPSIjNDU0ZTU0IiBkPSJNMCAwaDMwMHYxMTNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0MyIgY3k9IjY4IiByPSIxNjMiLz48cGF0aCBmaWxsPSIjM2NhNGQ0IiBkPSJtMTgzLjggMTAuMi40IDIyLTk2IDEuNi0uNC0yMnoiLz48Y2lyY2xlIHI9IjEiIHRyYW5zZm9ybT0ibWF0cml4KC04Mi41NzEzIC05Ni4zMzc1OSAzOC42ODU1MyAtMzMuMTU3NTEgMzkgNjMpIi8+PGNpcmNsZSByPSIxIiB0cmFuc2Zvcm09Im1hdHJpeCg0NS40OTE5NyA2LjYzNjU2IC0xNy41OTQ0IDEyMC42MDUzIDIyMyA1Ni4xKSIvPjxjaXJjbGUgY3g9IjgzIiBjeT0iMjIiIHI9IjExIiBmaWxsPSIjNjlmOGRiIi8+PGVsbGlwc2UgY3g9IjE5OCIgY3k9IjU1IiBmaWxsPSIjNzE2ZjZjIiByeD0iMjQ5IiByeT0iMyIvPjxlbGxpcHNlIGN4PSIxMzciIGN5PSIxIiByeD0iMjU1IiByeT0iMTEiLz48ZWxsaXBzZSBjeD0iMTMzIiBjeT0iNDMiIHJ4PSIyNTUiIHJ5PSI5Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=avif&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=avif&fit=scale&q=75&w=500&h=190 500w, https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=avif&fit=scale&q=75&w=700&h=266 700w, https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=avif&fit=scale&q=75&w=900&h=342 900w, https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=avif&fit=scale&q=75&w=1100&h=418 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=webp&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=webp&fit=scale&q=75&w=500&h=190 500w, https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=webp&fit=scale&q=75&w=700&h=266 700w, https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=webp&fit=scale&q=75&w=900&h=342 900w, https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=webp&fit=scale&q=75&w=1100&h=418 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="380"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=jpg&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=jpg&fit=scale&q=75&w=500&h=190 500w, https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=jpg&fit=scale&q=75&w=700&h=266 700w, https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=jpg&fit=scale&q=75&w=900&h=342 900w, https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png?fm=jpg&fit=scale&q=75&w=1100&h=418 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3LTktx4RSjH5LQrbo3QiVP/bae1a557662d65c1acd6e4d666471d20/Screenshot_2026-03-17_at_16.45.45.png"
                alt="0.0042 - Genuinely remarkable. You sailed past the theoretical human limit like it owed you money. I&apos;d accuse you of cheating but I don&apos;t actually know you you&apos;d cheat at this."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Today I learned about JND: Just Noticeable Difference. Keith built a fun little game for your lunch break. To what point can you differentiate the colors?</p>
<p><a class="btn btn__small" href="https://www.keithcirkel.co.uk/whats-my-jnd/">Look closely</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="native-json-modules-with-import-attributes" href="#native-json-modules-with-import-attributes">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="native-json-modules-with-import-attributes">Native JSON modules with import attributes</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(201,117,114); --color2: rgb(138,108,160); --color3: rgb(185,123,210); --color4: rgb(161,193,130); --color5: rgb(51,67,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgNjciPjxwYXRoIGZpbGw9IiMzMzQzNTMiIGQ9Ik0wIDBoMzAwdjY3SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxODQiIGN5PSIyNiIgcj0iMTkyIiBmaWxsPSIjMDAwMDBiIi8+PGVsbGlwc2UgY3g9IjEyMyIgY3k9IjI5IiBmaWxsPSIjNTc0YTU1IiByeD0iMTEzIiByeT0iMyIvPjxlbGxpcHNlIGN4PSIxMzEiIGN5PSI1NiIgZmlsbD0iIzAzMGIyNSIgcng9IjI1NSIgcnk9IjkiLz48ZWxsaXBzZSBjeD0iMTQ1IiBmaWxsPSIjMDYwZjI5IiByeD0iMjU1IiByeT0iMTAiLz48cGF0aCBmaWxsPSIjNzE0NzhjIiBkPSJtMzUuMyAzMS45LTExLS44LjQtNSAxMSAuOHoiLz48Y2lyY2xlIGN5PSIzMSIgcj0iMjYiIGZpbGw9IiMxMTE4MmMiLz48cGF0aCBmaWxsPSIjMDUwZTI3IiBkPSJNMjQ3IDhoOXY0MWgtOXoiLz48cGF0aCBmaWxsPSIjMWIyMzJkIiBkPSJtMTkxLjQgMjEuMSAyNS4yIDE3LjEgMjYuMS0zMC41LTQ2LjUgMzYuOXoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=avif&fit=scale&q=75&w=300&h=67 300w, https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=avif&fit=scale&q=75&w=500&h=113 500w, https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=avif&fit=scale&q=75&w=700&h=158 700w, https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=avif&fit=scale&q=75&w=900&h=203 900w, https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=avif&fit=scale&q=75&w=1100&h=249 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=webp&fit=scale&q=75&w=300&h=67 300w, https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=webp&fit=scale&q=75&w=500&h=113 500w, https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=webp&fit=scale&q=75&w=700&h=158 700w, https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=webp&fit=scale&q=75&w=900&h=203 900w, https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=webp&fit=scale&q=75&w=1100&h=249 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="226"
                srcset="https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=jpg&fit=scale&q=75&w=300&h=67 300w, https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=jpg&fit=scale&q=75&w=500&h=113 500w, https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=jpg&fit=scale&q=75&w=700&h=158 700w, https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=jpg&fit=scale&q=75&w=900&h=203 900w, https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png?fm=jpg&fit=scale&q=75&w=1100&h=249 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/67ifIv9V9s2bUm5Kp9HyZl/39d3b790591d05027726437b4a524666/Screenshot_2026-03-17_at_07.35.12.png"
                alt="import config from &quot;./config.json&quot; with { type: &quot;json&quot; };"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>You can load JSON files via <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import/with" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FJavaScript%2FReference%2FStatements%2Fimport%2Fwith')">import attributes</a> (that's the fancy <code>with</code> syntax) across modern browsers for roughly a year now. But how do import attributes affect caching? And are they really that much better than what bundlers already provided for years? Matt has some answers.</p>
<p><a class="btn btn__small" href="https://allthingssmitty.com/2026/03/16/native-json-modules-are-finally-real/">Import your JSON</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="even-more-customizable-selects" href="#even-more-customizable-selects">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="even-more-customizable-selects">Even more customizable selects</h2></div><p><img src="https://images.ctfassets.net/f20lfrunubsq/6QlHv8mYpbwPXVvEn4pzkg/18df029585edd055bd2d235a06cd8ac5/select.gif" alt="A deck of cards that unfolds to select a card." loading="lazy" /></p>
<p>I know that I plugged a great-looking <code>select</code> last week already, but man... I'm very much into these new ways of customizing <code>select</code> elements. Patrick's article comes with many explanations this week.</p>
<p><a class="btn btn__small" href="https://css-tricks.com/abusing-customizable-selects/">Select!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="feature-detection-of-at-rules" href="#feature-detection-of-at-rules">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="feature-detection-of-at-rules">Feature detection of at-rules</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(85,184,58); --color2: rgb(148,100,173); --color3: rgb(148,220,132); --color4: rgb(169,174,186); --color5: rgb(51,68,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgOTIiPjxwYXRoIGZpbGw9IiMzMzQ0NTMiIGQ9Ik0wIDBoMzAwdjkySDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwMDAwMGQiIHRyYW5zZm9ybT0icm90YXRlKDc4LjIgNDUuNiAxMDcuOCkgc2NhbGUoMTQ1LjIwMjI1IDE3Mi4wODEyMikiLz48ZWxsaXBzZSBjeD0iNzkiIGN5PSIzMCIgZmlsbD0iIzZiNjA3YyIgcng9IjY0IiByeT0iMyIvPjxwYXRoIGZpbGw9IiM0ZjVkNWMiIGQ9Ik0yOCAzOGgxNjl2NEgyOHoiLz48Y2lyY2xlIGN4PSI0MyIgY3k9IjM5IiByPSI0IiBmaWxsPSIjMjlmZjI0Ii8+PGVsbGlwc2UgY3g9IjEzMCIgY3k9Ijc4IiBmaWxsPSIjMDMwYjI0IiByeD0iMjU1IiByeT0iOCIvPjxlbGxpcHNlIGN4PSIxMzQiIGN5PSI0IiBmaWxsPSIjMDcxMDI5IiByeD0iMjI5IiByeT0iNSIvPjxwYXRoIGZpbGw9IiMwNjEzMWEiIGQ9Ik0zOSAzMmg4OHYxSDM5eiIvPjxwYXRoIGZpbGw9IiM2YzNmODEiIGQ9Im0yMi42IDMyLjEuMi45LTQuOC02LjMgMzcuNyAzLjZ6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=avif&fit=scale&q=75&w=300&h=93 300w, https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=avif&fit=scale&q=75&w=500&h=155 500w, https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=avif&fit=scale&q=75&w=700&h=217 700w, https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=avif&fit=scale&q=75&w=900&h=279 900w, https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=avif&fit=scale&q=75&w=1100&h=341 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=webp&fit=scale&q=75&w=300&h=93 300w, https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=webp&fit=scale&q=75&w=500&h=155 500w, https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=webp&fit=scale&q=75&w=700&h=217 700w, https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=webp&fit=scale&q=75&w=900&h=279 900w, https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=webp&fit=scale&q=75&w=1100&h=341 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="310"
                srcset="https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=jpg&fit=scale&q=75&w=300&h=93 300w, https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=jpg&fit=scale&q=75&w=500&h=155 500w, https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=jpg&fit=scale&q=75&w=700&h=217 700w, https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=jpg&fit=scale&q=75&w=900&h=279 900w, https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png?fm=jpg&fit=scale&q=75&w=1100&h=341 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/25IjBj9xbI86DGsYT9XStz/062c30f59ba62482420aa8924b0586b6/Screenshot_2026-03-17_at_16.39.45.png"
                alt="@supports at-rule(@supports) {   /* ✅ The browser supports `@supports at-rule(…)` */ }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Disclaimer: <code>at-rule()</code> is far from being cross-browser supported and will only hit Chrome in version 148 (we're currently at 146), but it's still cool that we'll be able to check support for at-rules (e.g. <code>@starting-style</code>) in the future.</p>
<p><a class="btn btn__small" href="https://www.bram.us/2026/03/15/at-rule/">Detect</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="node.js-subpath-imports" href="#node.js-subpath-imports">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="node.js-subpath-imports">Node.js subpath imports</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(240,161,58); --color2: rgb(126,172,114); --color3: rgb(184,248,153); --color4: rgb(148,194,133); --color5: rgb(46,58,78);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTc2Ij48cGF0aCBmaWxsPSIjMmUzYTRlIiBkPSJNMCAwaDMwMHYxNzZIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzMiIgY3k9IjYxIiByPSIxNjUiIGZpbGw9IiMwNTA2MGUiLz48cGF0aCBmaWxsPSIjNGQ0MDI4IiBkPSJNODMgMzhoNTZ2NTJIODN6Ii8+PGVsbGlwc2UgY3g9IjE2NCIgY3k9IjgxIiBmaWxsPSIjNDA1YzQ4IiByeD0iMjIiIHJ5PSIxMCIvPjxwYXRoIGZpbGw9IiM2M2E5NmYiIGQ9Im0xMTcuNSAzOC44IDMxLS42djVsLTMxIC42eiIvPjxwYXRoIGZpbGw9IiNhNjY5MGMiIGQ9Ik04MiA1MWgzMXY0SDgyeiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzNhM2U0YSIgdHJhbnNmb3JtPSJtYXRyaXgoMTUuOTY3MTggLTIwLjY1OTEyIDIuMzE2MSAxLjc5MDA4IDc2LjUgMTEyLjMpIi8+PHBhdGggZmlsbD0iIzk5NjIwZiIgZD0iTTk4IDg1aDI4djRIOTh6Ii8+PGVsbGlwc2UgY3g9IjEzMSIgY3k9IjE1MCIgZmlsbD0iIzAzMGMyNiIgcng9IjI1NSIgcnk9IjEyIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=avif&fit=scale&q=75&w=300&h=177 300w, https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=avif&fit=scale&q=75&w=500&h=295 500w, https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=avif&fit=scale&q=75&w=700&h=413 700w, https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=avif&fit=scale&q=75&w=900&h=531 900w, https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=avif&fit=scale&q=75&w=1100&h=649 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=webp&fit=scale&q=75&w=300&h=177 300w, https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=webp&fit=scale&q=75&w=500&h=295 500w, https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=webp&fit=scale&q=75&w=700&h=413 700w, https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=webp&fit=scale&q=75&w=900&h=531 900w, https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=webp&fit=scale&q=75&w=1100&h=649 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="590"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=jpg&fit=scale&q=75&w=300&h=177 300w, https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=jpg&fit=scale&q=75&w=500&h=295 500w, https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=jpg&fit=scale&q=75&w=700&h=413 700w, https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=jpg&fit=scale&q=75&w=900&h=531 900w, https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png?fm=jpg&fit=scale&q=75&w=1100&h=649 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1xzo0Vjt4fic6YhHNyqVlA/c7c526dc68c3fd1b5368be30cff19f05/Screenshot_2026-03-17_at_17.12.08.png"
                alt="{   &quot;type&quot;: &quot;module&quot;,   &quot;imports&quot;: {     &quot;#src/*&quot;: {       &quot;types&quot;: &quot;./src/*&quot;,       &quot;default&quot;: &quot;./lib/*&quot;     },     &quot;#test/*&quot;: {       &quot;types&quot;: &quot;./test/*&quot;,       &quot;default&quot;: &quot;./test/*&quot;     }   } }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Do you know that you can set custom import paths in vanilla Node.js? If not, John explains how they work. He's kind of skeptical about the idea, but I'm really digging it!</p>
<p><a class="btn btn__small" href="https://johnnyreilly.com/only-node-subpaths-with-no-restricted-imports-and-perfectionist-sort-imports">Shorten your imports</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="random-mdn-%E2%80%93-css-%60.to()%60-in-js" href="#random-mdn-%E2%80%93-css-%60.to()%60-in-js">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="random-mdn-%E2%80%93-css-%60.to()%60-in-js">Random MDN – CSS <code>.to()</code> in JS</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(114,169,231); --color2: rgb(89,127,171); --color3: rgb(218,193,131); --color4: rgb(171,179,188); --color5: rgb(51,66,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTAwIj48cGF0aCBmaWxsPSIjMzM0MjUzIiBkPSJNMCAwaDMwMHYxMDBIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxNTMiIGN5PSIzNSIgZmlsbD0iIzAwMDAwYyIgcng9IjE5MiIgcnk9Ijg1Ii8+PHBhdGggZmlsbD0iIzU5NmE2ZSIgZD0iTTIxIDQ2aDIwMHY1SDIxeiIvPjxlbGxpcHNlIGN4PSI3NSIgY3k9IjM3IiBmaWxsPSIjNTM1NzYyIiByeD0iNTAiIHJ5PSIzIi8+PGVsbGlwc2UgY3g9IjEyMiIgY3k9IjgwIiBmaWxsPSIjMDQwZDI2IiByeD0iMjU1IiByeT0iOSIvPjxlbGxpcHNlIGN4PSIxMjQiIGN5PSI2IiBmaWxsPSIjMDUwZjI4IiByeD0iMjU1IiByeT0iOCIvPjxwYXRoIGZpbGw9IiM4OTZiNDUiIGQ9Ik0zMCA1MS4ydi00bDI4LS40djR6Ii8+PHBhdGggZmlsbD0iIzBlMTYyYiIgZD0iTTExLjcgNDUuNSA5LjEtMTQuNy0xNiA4Ni42bDU2LjEtNTIuMnoiLz48cGF0aCBmaWxsPSIjMzI0MjUwIiBkPSJNNDcgNDVoMTc3djdINDd6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=avif&fit=scale&q=75&w=300&h=100 300w, https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=avif&fit=scale&q=75&w=500&h=168 500w, https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=avif&fit=scale&q=75&w=700&h=235 700w, https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=avif&fit=scale&q=75&w=900&h=302 900w, https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=avif&fit=scale&q=75&w=1100&h=370 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=webp&fit=scale&q=75&w=300&h=100 300w, https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=webp&fit=scale&q=75&w=500&h=168 500w, https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=webp&fit=scale&q=75&w=700&h=235 700w, https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=webp&fit=scale&q=75&w=900&h=302 900w, https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=webp&fit=scale&q=75&w=1100&h=370 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="336"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=jpg&fit=scale&q=75&w=300&h=100 300w, https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=jpg&fit=scale&q=75&w=500&h=168 500w, https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=jpg&fit=scale&q=75&w=700&h=235 700w, https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=jpg&fit=scale&q=75&w=900&h=302 900w, https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png?fm=jpg&fit=scale&q=75&w=1100&h=370 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1Jx1NrziWOR7RA55gT3rMs/50b6a9f1156679a0b21e5f3367d93674/Screenshot_2026-03-17_at_16.50.28.png"
                alt="// Prints &quot;0.608542cm&quot; console.log(CSS.px(&quot;23&quot;).to(&quot;cm&quot;).toString());"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Here are two fun ones. First, do you know that <code>CSS</code> exists in JavaScript? And second, how cool is it that you can convert one unit into another?</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/API/CSSNumericValue/to">Convert</a></p>
<p><em>Disclaimer: <code>.to()</code> doesn't work in all browsers yet but will land in Firefox soon!</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-recap-%E2%80%93-%60svg%60-elements-can-be-nested" href="#til-recap-%E2%80%93-%60svg%60-elements-can-be-nested">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-recap-%E2%80%93-%60svg%60-elements-can-be-nested">TIL recap – <code>svg</code> elements can be nested</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(203,155,108); --color2: rgb(172,100,108); --color3: rgb(209,114,115); --color4: rgb(164,196,132); --color5: rgb(51,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTYyIj48cGF0aCBmaWxsPSIjMzMzYzU0IiBkPSJNMCAwaDMwMHYxNjJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMjYiIGN5PSI1NSIgZmlsbD0iIzAxMDUwYiIgcng9IjE3NyIgcnk9IjEyOSIvPjxlbGxpcHNlIGN4PSIxMjQiIGN5PSIzOCIgZmlsbD0iIzZkNzg1OCIgcng9IjEwNyIgcnk9IjMiLz48cGF0aCBmaWxsPSIjNTI1NzYyIiBkPSJNOTQgNzNoMTA5djVIOTR6Ii8+PGVsbGlwc2UgY3g9IjExOCIgY3k9IjUwIiBmaWxsPSIjNTA1NTYwIiByeD0iNTciIHJ5PSIzIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjNGMzYTQ2IiB0cmFuc2Zvcm09InJvdGF0ZSgtMTYuNSAzNDUgLTEzNC41KSBzY2FsZSgyMi44OTY4MyA3LjI3OTQpIi8+PGVsbGlwc2UgY3g9IjEyNyIgY3k9IjEzNSIgZmlsbD0iIzAyMGMyNiIgcng9IjI1NSIgcnk9IjExIi8+PGVsbGlwc2UgY3g9IjEzMCIgZmlsbD0iIzA0MGYyOCIgcng9IjI0NSIgcnk9IjEzIi8+PHBhdGggZmlsbD0iIzkwNTg2MiIgZD0iTTUwIDYxaDIwdjVINTB6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=avif&fit=scale&q=75&w=300&h=162 300w, https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=avif&fit=scale&q=75&w=500&h=271 500w, https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=avif&fit=scale&q=75&w=700&h=380 700w, https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=avif&fit=scale&q=75&w=900&h=488 900w, https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=avif&fit=scale&q=75&w=1100&h=597 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=webp&fit=scale&q=75&w=300&h=162 300w, https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=webp&fit=scale&q=75&w=500&h=271 500w, https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=webp&fit=scale&q=75&w=700&h=380 700w, https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=webp&fit=scale&q=75&w=900&h=488 900w, https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=webp&fit=scale&q=75&w=1100&h=597 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="543"
                srcset="https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=jpg&fit=scale&q=75&w=300&h=162 300w, https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=jpg&fit=scale&q=75&w=500&h=271 500w, https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=jpg&fit=scale&q=75&w=700&h=380 700w, https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=jpg&fit=scale&q=75&w=900&h=488 900w, https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png?fm=jpg&fit=scale&q=75&w=1100&h=597 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/rWmFTJwtZWizSVWfhQq8U/8f6022b14b74bcd472f7a6e2375f0880/Screenshot_2026-03-17_at_17.15.49.png"
                alt="&amp;lt;svg xmlns=&amp;quot;http://www.w3.org/2000/svg&amp;quot;&amp;gt;     &amp;lt;!-- some SVG content --&amp;gt;     &amp;lt;svg&amp;gt;         &amp;lt;!-- some inner SVG content --&amp;gt;     &amp;lt;/svg&amp;gt; &amp;lt;svg&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Here's a quick learning from eight years ago: did you know that you can nest <code>svg</code> elements? Now you do!</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/you-can-nest-svg-elements/">Nest all these SVGs</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-on-the-baseline-%E2%80%94-css-%60shape()%60" href="#new-on-the-baseline-%E2%80%94-css-%60shape()%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-on-the-baseline-%E2%80%94-css-%60shape()%60">New on the baseline — CSS <code>shape()</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(111,164,224); --color2: rgb(167,133,98); --color3: rgb(211,116,116); --color4: rgb(166,172,188); --color5: rgb(44,60,79);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTkzIj48cGF0aCBmaWxsPSIjMmMzYzRmIiBkPSJNMCAwaDMwMHYxOTNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyMSIgY3k9Ijk4IiByPSIxNzMiIGZpbGw9IiMwYjA3MTEiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiM0MzQwNDciIHRyYW5zZm9ybT0ibWF0cml4KC00MC44MDIzOSAtMjkuMjIxMSAxNS42MTAyIC0yMS43OTcwNCA2OS42IDY2LjcpIi8+PHBhdGggZmlsbD0iIzUxNDk0ZCIgZD0iTTExMSA4NGgxMTZ2MTZIMTExeiIvPjxwYXRoIGZpbGw9IiM2ZDU5NDkiIGQ9Ik0zOCA5NWg3MnY1SDM4eiIvPjxlbGxpcHNlIGN4PSIxMzciIGN5PSI5MSIgZmlsbD0iIzA1MTAyMSIgcng9IjEyMCIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iMTA2IiBjeT0iMTYwIiBmaWxsPSIjMDEwYjI0IiByeD0iMjU1IiByeT0iOCIvPjxwYXRoIGZpbGw9IiM0MDdiYWQiIGQ9Ik0yMSAzMGgyN3Y0SDIxeiIvPjxwYXRoIGZpbGw9IiM1NjYxNzIiIGQ9Ik00MSA2Mmg2NXY1SDQxeiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=avif&fit=scale&q=75&w=300&h=193 300w, https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=avif&fit=scale&q=75&w=500&h=323 500w, https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=avif&fit=scale&q=75&w=700&h=452 700w, https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=avif&fit=scale&q=75&w=900&h=581 900w, https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=avif&fit=scale&q=75&w=1100&h=711 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=webp&fit=scale&q=75&w=300&h=193 300w, https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=webp&fit=scale&q=75&w=500&h=323 500w, https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=webp&fit=scale&q=75&w=700&h=452 700w, https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=webp&fit=scale&q=75&w=900&h=581 900w, https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=webp&fit=scale&q=75&w=1100&h=711 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="646"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=jpg&fit=scale&q=75&w=300&h=193 300w, https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=jpg&fit=scale&q=75&w=500&h=323 500w, https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=jpg&fit=scale&q=75&w=700&h=452 700w, https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=jpg&fit=scale&q=75&w=900&h=581 900w, https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png?fm=jpg&fit=scale&q=75&w=1100&h=711 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6HlIxHjG0GhRsiq0Z9q3p9/26b5b6891215419d78955aee64af2b94/Screenshot_2026-03-17_at_16.55.45.png"
                alt="#fancy {   width: 200px;   height: 200px;   clip-path: shape(     from center left,     curve by 200px 0px with 50% -80% from start,     smooth to center with 50% 100% from origin,     close   ); }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>With Firefox 148, the CSS <code>shape()</code> function entered the baseline, which means that you can now pair <code>offset-path</code> or <code>clip-path</code> with a function that understands CSS. That's right! No more SVG syntax fiddling!</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/basic-shape/shape">Shape!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="three-valuable-projects-to-have-a-look-at" href="#three-valuable-projects-to-have-a-look-at">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="three-valuable-projects-to-have-a-look-at">Three valuable projects to have a look at</h2></div><ul>
<li><a href="https://github.com/arktypeio/arktype" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Farktypeio%2Farktype')">arktypeio/arktype</a> – A TypeScript validator that's optimized from editor to runtime.</li>
<li><a href="https://github.com/mcollina/snipgrapher" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fmcollina%2Fsnipgrapher')">mcollina/snipgrapher</a> – A CLI to generate image snippets from code files.</li>
<li><a href="https://github.com/jalonsogo/tui-studio" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fjalonsogo%2Ftui-studio')">jalonsogo/tui-studio</a> – A visual design tool for building Terminal User Interfaces.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-tiny-helper" href="#a-new-tiny-helper">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-tiny-helper">A new Tiny Helper</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(92,184,174); --color2: rgb(85,168,156); --color3: rgb(108,219,204); --color4: rgb(170,217,186); --color5: rgb(49,98,91);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQyIj48cGF0aCBmaWxsPSIjMzE2MjViIiBkPSJNMCAwaDMwMHYxNDJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEwMiIgY3k9IjM4IiByPSIxODQiLz48cGF0aCBmaWxsPSIjN2NkOGQ1IiBkPSJNNzQgNjJoMTA5djEySDc0eiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzA3MDAwMCIgdHJhbnNmb3JtPSJtYXRyaXgoLTExOS42NDQ0IDE1MC45NTM2NyAtNDUuMjk5MTcgLTM1LjkwMzY4IDMzLjYgMjQpIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMDYwMDAwIiB0cmFuc2Zvcm09Im1hdHJpeCgxNDQuODcxNSAxOTAuNDcyNDggLTQwLjM4MDcyIDMwLjcxMzE4IDIxNi4xIDIyLjgpIi8+PHBhdGggZmlsbD0iIzQ3YmQ4MSIgZD0iTTEwNyAyMmg0OHYxOGgtNDh6Ii8+PGVsbGlwc2UgY3g9IjE3NCIgY3k9IjkzIiBmaWxsPSIjODk3ZDg3IiByeD0iMTYyIiByeT0iMyIvPjxlbGxpcHNlIGN4PSIxMzEiIGN5PSIxMjEiIGZpbGw9IiMwOTAwMDgiIHJ4PSIyNTIiIHJ5PSIyNyIvPjxwYXRoIGZpbGw9IiNmMGNiZDUiIGQ9Ik03NSA1OGgxMXYxMkg3NXoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=avif&fit=scale&q=75&w=300&h=144 300w, https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=avif&fit=scale&q=75&w=500&h=240 500w, https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=avif&fit=scale&q=75&w=700&h=336 700w, https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=avif&fit=scale&q=75&w=900&h=432 900w, https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=avif&fit=scale&q=75&w=1100&h=528 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=webp&fit=scale&q=75&w=300&h=144 300w, https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=webp&fit=scale&q=75&w=500&h=240 500w, https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=webp&fit=scale&q=75&w=700&h=336 700w, https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=webp&fit=scale&q=75&w=900&h=432 900w, https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=webp&fit=scale&q=75&w=1100&h=528 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="480"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=jpg&fit=scale&q=75&w=300&h=144 300w, https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=jpg&fit=scale&q=75&w=500&h=240 500w, https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=jpg&fit=scale&q=75&w=700&h=336 700w, https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=jpg&fit=scale&q=75&w=900&h=432 900w, https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png?fm=jpg&fit=scale&q=75&w=1100&h=528 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/5ZVqicpuB8OuXgOtA5uexf/597ddfb6016991b62cd636adec42ea32/Screenshot_2026-03-17_at_16.33.31.png"
                alt="BaseWatch. Never miss the moment a CSS feature goes Baseline."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>As a WW subscriber, you should be pretty well aware of what's going on with browser features and the baseline. If the newsletter isn't enough, BaseWatch looks great!</p>
<p><a class="btn btn__small" href="https://basewatch.dev/">Stay up to date</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more single-purpose online tools on <a href="https://tiny-helpers.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ftiny-helpers.dev%2F')">tiny-helpers.dev</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="thought-of-the-week" href="#thought-of-the-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="thought-of-the-week">Thought of the week</h2></div><p>Here are <a href="https://blog.jim-nielsen.com/2026/say-no-to-data/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fblog.jim-nielsen.com%2F2026%2Fsay-no-to-data%2F')">some wise words from one of my favorite bloggers</a>.</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <blockquote>
<p>Data tells you what people consume, not what you should make. [...] &quot;What is happening?&quot; and &quot;What should happen?&quot; are two completely different questions and should be dealt with as such.</p>
</blockquote>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="did-you-learn-something-from-this-issue%3F" href="#did-you-learn-something-from-this-issue%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="did-you-learn-something-from-this-issue%3F">Did you learn something from this issue?</h2></div><p>❤️ If so, <strong>join 40 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="this-is-all%2C-friends!" href="#this-is-all%2C-friends!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="this-is-all%2C-friends!">This is all, friends!</h2></div><p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr aria-hidden="true"><p>And with that, take care of yourself — mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Web Weekly #187">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Web Weekly #186 (#blogPost)</title>
      <link href="https://www.stefanjudis.com/blog/web-weekly-186/"/>
      <published>2026-03-09T23:00:00+00:00</published>
      <updated>2026-03-09T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/blog/web-weekly-186/</id>
      <category term="blogPost"></category>
        <category term="Newsletter"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="guten-tag!-guten-tag!-%F0%9F%91%8B" href="#guten-tag!-guten-tag!-%F0%9F%91%8B">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="guten-tag!-guten-tag!-%F0%9F%91%8B">Guten Tag! Guten Tag! 👋</h2></div><p>Are you struggling to understand why your anchor positioning doesn't work? Did you know that there's a <code>window<wbr>.stop()</code> method? And did you ever wonder how to apply a theme color to Safari?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <p>I am listening to &quot;<a href="https://www.youtube.com/watch?v=5kU_z8wD4eg" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D5kU_z8wD4eg')">KRAFTKLUB - Marlboro Mann</a>&quot; and say:</p>
<blockquote>
<p>I've seen Kraftklub live twice so far. The first time I was surprised by the excellent show. The second time I was truly amazed. This week, I'm going to see Germany's best live band for the third time, and I'm sure that I'll tear up while dancing my ass off. I can't wait!</p>
</blockquote>
</div><p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>six more songs</strong> left in the queue.</p>
<hr aria-hidden="true"><p>A huge thank you and a huge bag of karma points go to Paweł, Johann, and Corey this week. Thank you for <strong>supporting indie publishing in the times of AI slop</strong> by covering a small fraction of the cost it takes to send Web Weekly every week! ❤️</p>
<p>If you enjoy Web Weekly, too, join 39 supporters on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>. It really makes a difference!</p>
<hr aria-hidden="true"><p>And if you learned something from this week's edition, share Web Weekly with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mgq5hknhsk22">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116206627138761786" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffront-end.social%2F%40stefan%2F116206627138761786')">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_the-new-web-weekly-is-about-to-hit-all-the-activity-7437224449243783168-PGBX" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.linkedin.com%2Fposts%2Fstefan-judis_the-new-web-weekly-is-about-to-hit-all-the-activity-7437224449243783168-PGBX')">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps the newsletter out. Thank you! ❤️</p>
<hr aria-hidden="true"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="no-code" href="#no-code">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="no-code">No code</h2></div><ul>
<li><a href="https://raymyers.org/post/dont-make-me-talk-to-your-chatbot/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fraymyers.org%2Fpost%2Fdont-make-me-talk-to-your-chatbot%2F')">Don't Make Me Talk to Your Chatbot</a> → &quot;It's fine that people talk to chatbots, but they should not expect me to listen to theirs&quot;.</li>
<li><a href="https://terriblesoftware.org/2026/03/03/nobody-gets-promoted-for-simplicity/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fterriblesoftware.org%2F2026%2F03%2F03%2Fnobody-gets-promoted-for-simplicity%2F')">Nobody Gets Promoted for Simplicity</a> → &quot;Nobody gets promoted for the complexity they avoided&quot;.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="heads-up%3A-chrome-will-adopt-a-new-release-cycle" href="#heads-up%3A-chrome-will-adopt-a-new-release-cycle">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="heads-up%3A-chrome-will-adopt-a-new-release-cycle">Heads up: Chrome will adopt a new release cycle</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(44,100,220); --color2: rgb(116,165,94); --color3: rgb(244,220,108); --color4: rgb(177,190,204); --color5: rgb(52,64,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQyIj48cGF0aCBmaWxsPSIjMzQ0MDUzIiBkPSJNMCAwaDMwMHYxNDJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0MCIgY3k9Ijk2IiByPSIxNzEiIGZpbGw9IiMwMDA0MGYiLz48Y2lyY2xlIGN4PSIxMjIiIGN5PSI0NiIgcj0iMjUiIGZpbGw9IiNmZmVmODciLz48ZWxsaXBzZSBjeD0iMTIxIiBjeT0iOTUiIGZpbGw9IiNjM2M0Y2MiIHJ4PSI0NSIgcnk9IjQiLz48Y2lyY2xlIGN4PSIxMjIiIGN5PSI0NiIgcj0iMTIiIGZpbGw9IiMyMmE0ZmYiLz48cGF0aCBmaWxsPSIjZmY4NDAwIiBkPSJtOTYuNCAzNCA1NC40IDMuMkwxMzQgNzcuMWwtMy42LTU0LjR6Ii8+PHBhdGggZmlsbD0iIzAwOGUzMiIgZD0ibTk2IDYyIDMtMzAgMjMgMzh6Ii8+PHBhdGggZmlsbD0iI2YxMDAxYSIgZD0ibTEzOC41IDMzLjQtMzguNyAzLjQgNy42LTEzLjMgMjguNS0uNHoiLz48cGF0aCBmaWxsPSIjZmZlOTBkIiBkPSJtMTQ1LjEgMzUtMjUuOSA0MS4yIDI3LjUtMjAuNS0yMi4yLTIxLjR6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=avif&fit=scale&q=75&w=300&h=142 300w, https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=avif&fit=scale&q=75&w=500&h=238 500w, https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=avif&fit=scale&q=75&w=700&h=333 700w, https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=avif&fit=scale&q=75&w=900&h=428 900w, https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=avif&fit=scale&q=75&w=1100&h=524 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=webp&fit=scale&q=75&w=300&h=142 300w, https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=webp&fit=scale&q=75&w=500&h=238 500w, https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=webp&fit=scale&q=75&w=700&h=333 700w, https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=webp&fit=scale&q=75&w=900&h=428 900w, https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=webp&fit=scale&q=75&w=1100&h=524 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="476"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=jpg&fit=scale&q=75&w=300&h=142 300w, https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=jpg&fit=scale&q=75&w=500&h=238 500w, https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=jpg&fit=scale&q=75&w=700&h=333 700w, https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=jpg&fit=scale&q=75&w=900&h=428 900w, https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png?fm=jpg&fit=scale&q=75&w=1100&h=524 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2cmcTJ0vNnKymPm7D1CO4A/9645f1be68825ead6f39db018398f43c/Screenshot_2026-03-10_at_19.36.30.png"
                alt="Chrome releases every 2 weeks"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Starting in September, Chrome will ship a new version every two weeks, and I already see these version numbers going through the roof. But honestly, more updates are a good thing.</p>
<p><a class="btn btn__small" href="https://developer.chrome.com/blog/chrome-two-week-release">Catch up</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="do-you-remember-%60theme-color%60%3F" href="#do-you-remember-%60theme-color%60%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="do-you-remember-%60theme-color%60%3F">Do you remember <code>theme-color</code>?</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(203,155,108); --color2: rgb(174,142,100); --color3: rgb(188,114,109); --color4: rgb(162,193,130); --color5: rgb(51,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgNzMiPjxwYXRoIGZpbGw9IiMzMzNjNTQiIGQ9Ik0wIDBoMzAwdjczSDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxMzkiIGN5PSIyNiIgcj0iMTU1IiBmaWxsPSIjMDAwMjA5Ii8+PHBhdGggZmlsbD0iIzc1NzU1OCIgZD0iTTI1IDI5aDE4N3Y0SDI1eiIvPjxlbGxpcHNlIGN4PSIxMjAiIGN5PSI1OCIgZmlsbD0iIzA1MGYyOCIgcng9IjI1NSIgcnk9IjgiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwNzEyMmMiIHRyYW5zZm9ybT0ibWF0cml4KDE3My4xMTE0NyAxLjAyOTk5IC0uMDYzODcgMTAuNzM1MjYgMTE1LjggMCkiLz48ZWxsaXBzZSBjeD0iMjE2IiBjeT0iMzAiIGZpbGw9IiM0MjUzNGQiIHJ4PSIxNSIgcnk9IjMiLz48cGF0aCBmaWxsPSIjMDkxMTI1IiBkPSJNMTE1IDI5aDEwdjZoLTEweiIvPjxwYXRoIGZpbGw9IiMwNTBmMjgiIGQ9Ik0yNDcgN2g5djQ1aC05eiIvPjxwYXRoIGZpbGw9IiMwNTEwMjkiIGQ9Im0xMC43IDUwLjItMTEgLjYtMi40LTQ1IDExLS42eiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=avif&fit=scale&q=75&w=300&h=73 300w, https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=avif&fit=scale&q=75&w=500&h=123 500w, https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=avif&fit=scale&q=75&w=700&h=172 700w, https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=avif&fit=scale&q=75&w=900&h=221 900w, https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=avif&fit=scale&q=75&w=1100&h=271 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=webp&fit=scale&q=75&w=300&h=73 300w, https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=webp&fit=scale&q=75&w=500&h=123 500w, https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=webp&fit=scale&q=75&w=700&h=172 700w, https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=webp&fit=scale&q=75&w=900&h=221 900w, https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=webp&fit=scale&q=75&w=1100&h=271 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="246"
                srcset="https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=jpg&fit=scale&q=75&w=300&h=73 300w, https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=jpg&fit=scale&q=75&w=500&h=123 500w, https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=jpg&fit=scale&q=75&w=700&h=172 700w, https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=jpg&fit=scale&q=75&w=900&h=221 900w, https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png?fm=jpg&fit=scale&q=75&w=1100&h=271 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/PGlLbIzPCmqIeYJDrkqyr/e007726cea5172dfc44ba556da6edb66/Screenshot_2026-03-10_at_18.51.31.png"
                alt="&lt;meta name=&quot;theme-color&quot; content=&quot;cornflowerblue&quot; /&gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p><a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/meta/name/theme-color" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FHTML%2FReference%2FElements%2Fmeta%2Fname%2Ftheme-color')">The <code>theme-color</code> meta element</a> used to color Safari's frame and configure a color for progressive web apps.</p>
<p>Turns out, Safari dropped the theme color support for &quot;normal&quot; websites. And yet, sometimes the Safari frame is colored in website colors.</p>
<p>What is going on? Martin investigated Safari's behavior.</p>
<p><a class="btn btn__small" href="https://grooovinger.com/notes/2026-02-27-safari-26-header-background">Color the Safari frame</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="yes%2C-this-is-a-custom-%60select%60!" href="#yes%2C-this-is-a-custom-%60select%60!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="yes%2C-this-is-a-custom-%60select%60!">Yes, this is a custom <code>select</code>!</h2></div><p><img src="https://images.ctfassets.net/f20lfrunubsq/1Lhfo2KpV9dj05mE3H6wHw/812c6b6c03a4b52ce2de2e8027f55f57/select.gif" alt="A custom select which opens racecar drivers on click to select one." loading="lazy" /></p>
<p>Disclaimer: customizable <code>select</code> elements are still a Chromium-only thing, but man, look at this beauty!</p>
<p><a class="btn btn__small" href="https://codepen.io/editor/cbolson/pen/019cbfe5-85da-7d31-a7de-44b6b35e7c1c">Select with style</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="%60%3A%60-and-%60%3D%60-in-style-queries" href="#%60%3A%60-and-%60%3D%60-in-style-queries">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="%60%3A%60-and-%60%3D%60-in-style-queries"><code>:</code> and <code>=</code> in style queries</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(195,150,105); --color2: rgb(163,92,100); --color3: rgb(209,116,116); --color4: rgb(172,179,188); --color5: rgb(52,67,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMjAxIj48cGF0aCBmaWxsPSIjMzQ0MzU0IiBkPSJNMCAwaDMwMHYyMDFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjIxOSIgY3k9Ijk5IiByPSIyNDMiIGZpbGw9IiMwMDAwMGIiLz48cGF0aCBmaWxsPSIjMzMzNDQxIiBkPSJNNzAgNDdoMTE1djY2SDcweiIvPjxwYXRoIGZpbGw9IiM2YTZhNmYiIGQ9Ik03OSAxMDdoNzR2NUg3OXoiLz48cGF0aCBmaWxsPSIjNWI1YTY3IiBkPSJNNzAgNDloMTI3djVINzB6Ii8+PHBhdGggZmlsbD0iIzBlMTYyNCIgZD0ibTc1IDY3LjggMTA1LTMuNiAxIDI4LTEwNSAzLjZ6Ii8+PHBhdGggZmlsbD0iIzU5NTg2NSIgZD0iTTY4IDk1aDEyN3Y1SDY4eiIvPjxlbGxpcHNlIGN4PSIxMjYiIGN5PSIxNjQiIGZpbGw9IiMwMzBiMjUiIHJ4PSIyNTUiIHJ5PSI4Ii8+PHBhdGggZmlsbD0iIzZiNzQ4MSIgZD0iTTc4IDYxaDQ5djVINzh6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=avif&fit=scale&q=75&w=300&h=201 300w, https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=avif&fit=scale&q=75&w=500&h=336 500w, https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=avif&fit=scale&q=75&w=700&h=471 700w, https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=avif&fit=scale&q=75&w=900&h=605 900w, https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=avif&fit=scale&q=75&w=1100&h=740 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=webp&fit=scale&q=75&w=300&h=201 300w, https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=webp&fit=scale&q=75&w=500&h=336 500w, https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=webp&fit=scale&q=75&w=700&h=471 700w, https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=webp&fit=scale&q=75&w=900&h=605 900w, https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=webp&fit=scale&q=75&w=1100&h=740 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="673"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=jpg&fit=scale&q=75&w=300&h=201 300w, https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=jpg&fit=scale&q=75&w=500&h=336 500w, https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=jpg&fit=scale&q=75&w=700&h=471 700w, https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=jpg&fit=scale&q=75&w=900&h=605 900w, https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png?fm=jpg&fit=scale&q=75&w=1100&h=740 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/5t8jEdS59OJ9CrgF5Pg2lY/4e354cad18d4585f6ef430f0969160ef/Screenshot_2026-03-10_at_18.45.44.png"
                alt=".box {   @container style(--n = 3) {     background: red;     }    @container style(--n : 3) {     background: red;     } }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Style queries aren't supported in Firefox yet, so I must say that I didn't really play with them yet. But today I learned there's a difference between using <code>:</code> and <code>=</code>.</p>
<p>Whoot? Big thanks go to Temani for sharing yet another CSS pro tip!</p>
<p><a class="btn btn__small" href="https://css-tip.com/if-trick/">Compare styles</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="problems-with-anchor-positioning" href="#problems-with-anchor-positioning">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="problems-with-anchor-positioning">Problems with anchor positioning</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(79.6875,143.43749999999997,175.3125); --color2: rgb(124,124,131); --color3: rgb(163.83749999999998,196.98749999999998,213.5625); --color4: rgb(196,188,196); --color5: rgb(36,44,60);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgOTQiPjxwYXRoIGZpbGw9IiMyNDJjM2MiIGQ9Ik0wIDBoMzAwdjk0SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48ZWxsaXBzZSBjeD0iMTk2IiBjeT0iMzAiIGZpbGw9IiNiZGJmYmEiIHJ4PSIyMjYiIHJ5PSI1Ii8+PHBhdGggZmlsbD0iI2QwZDFjYiIgZD0iTTE1IDQ3aDEwMnYxMEgxNXoiLz48cGF0aCBmaWxsPSIjMDQxMjE4IiBkPSJNMjU0LjYtMTYtMTYgMTQuOWwyNTAuMiA5LjhMMjU4LjggOTZ6Ii8+PGVsbGlwc2UgY3g9IjgiIGN5PSIxOSIgZmlsbD0iIzAwMGUxNCIgcng9IjExIiByeT0iNjkiLz48cGF0aCBmaWxsPSIjMDcxNTFiIiBkPSJtMjQ0IDk2IDE5LTY0TDE1IDc1eiIvPjxwYXRoIGZpbGw9IiNhYmFkYWQiIGQ9Ik01MSAzNyA5IDIxbDQ2IDR6Ii8+PHBhdGggZmlsbD0iIzA4MTYxZCIgZD0ibTEyMC4zIDcwLjQgOTUuOC0zNC41LTcyLjUuNS0xLjUtMTYuMnoiLz48cGF0aCBmaWxsPSIjMGMxODIxIiBkPSJNLTE2IDM4LjQgOTAuOC04IDc2LjUgMzkuMyA1Ni44LTE2eiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=avif&fit=scale&q=75&w=300&h=96 300w, https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=avif&fit=scale&q=75&w=500&h=160 500w, https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=avif&fit=scale&q=75&w=700&h=224 700w, https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=avif&fit=scale&q=75&w=900&h=288 900w, https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=avif&fit=scale&q=75&w=1100&h=352 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=webp&fit=scale&q=75&w=300&h=96 300w, https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=webp&fit=scale&q=75&w=500&h=160 500w, https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=webp&fit=scale&q=75&w=700&h=224 700w, https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=webp&fit=scale&q=75&w=900&h=288 900w, https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=webp&fit=scale&q=75&w=1100&h=352 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="320"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=jpg&fit=scale&q=75&w=300&h=96 300w, https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=jpg&fit=scale&q=75&w=500&h=160 500w, https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=jpg&fit=scale&q=75&w=700&h=224 700w, https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=jpg&fit=scale&q=75&w=900&h=288 900w, https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png?fm=jpg&fit=scale&q=75&w=1100&h=352 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6utI0WTOYke0bQgrmO0C1A/26566080b8dab7745a7adadb59564a76/Screenshot_2026-03-10_at_20.07.54.png"
                alt="Why is Anchor Positioning not working?"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I still haven't fully adopted anchor positioning, but I figured there are many edge cases, and sometimes I'm also just scratching my head. Temani covered many reasons why the anchors might not show up where you expect them to.</p>
<p><a class="btn btn__small" href="https://css-tip.com/anchor-issues/">Master all these anchors</a></p>
<p><em>And if you want to see Chris rant a bit, <a href="https://frontendmasters.com/blog/the-big-gotcha-of-anchor-positioning/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffrontendmasters.com%2Fblog%2Fthe-big-gotcha-of-anchor-positioning%2F')">he also talks about common anchor positioning mistakes</a>.</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="style-restrictions-of-the-new-%60geolocation%60-element" href="#style-restrictions-of-the-new-%60geolocation%60-element">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="style-restrictions-of-the-new-%60geolocation%60-element">Style restrictions of the new <code>geolocation</code> element</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(203,142,110); --color2: rgb(157,117,94); --color3: rgb(183,121,207); --color4: rgb(172,179,188); --color5: rgb(52,66,82);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTkxIj48cGF0aCBmaWxsPSIjMzQ0MjUyIiBkPSJNMCAwaDMwMHYxOTFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE3OCIgY3k9IjU0IiByPSIyMTMiIGZpbGw9IiMwMTAwMGYiLz48ZWxsaXBzZSBjeD0iMTIwIiBjeT0iNzciIGZpbGw9IiMzODNkNDciIHJ4PSI0OSIgcnk9IjQ3Ii8+PGVsbGlwc2UgY3g9IjE0MCIgY3k9IjU4IiBmaWxsPSIjNzQ1YzVhIiByeD0iNTciIHJ5PSIzIi8+PHBhdGggZmlsbD0iIzkwNThhNiIgZD0iTTcwIDM0aDQ4djRINzB6Ii8+PHBhdGggZmlsbD0iIzU5NjQ2YyIgZD0iTTc1IDExM2gxMDR2NUg3NXoiLz48cGF0aCBmaWxsPSIjNWY2Njc1IiBkPSJNODEgMTAyaDUydjVIODF6Ii8+PGVsbGlwc2UgY3g9IjEyNiIgY3k9IjcwIiBmaWxsPSIjNGM1ZjZhIiByeD0iNDkiIHJ5PSIzIi8+PGVsbGlwc2UgY3g9IjI1NSIgY3k9IjgyIiBmaWxsPSIjMDQwZTI2IiByeD0iMTUiIHJ5PSIxNjIiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=avif&fit=scale&q=75&w=300&h=192 300w, https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=avif&fit=scale&q=75&w=500&h=320 500w, https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=avif&fit=scale&q=75&w=700&h=448 700w, https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=avif&fit=scale&q=75&w=900&h=576 900w, https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=avif&fit=scale&q=75&w=1100&h=704 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=webp&fit=scale&q=75&w=300&h=192 300w, https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=webp&fit=scale&q=75&w=500&h=320 500w, https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=webp&fit=scale&q=75&w=700&h=448 700w, https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=webp&fit=scale&q=75&w=900&h=576 900w, https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=webp&fit=scale&q=75&w=1100&h=704 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="640"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=jpg&fit=scale&q=75&w=300&h=192 300w, https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=jpg&fit=scale&q=75&w=500&h=320 500w, https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=jpg&fit=scale&q=75&w=700&h=448 700w, https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=jpg&fit=scale&q=75&w=900&h=576 900w, https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png?fm=jpg&fit=scale&q=75&w=1100&h=704 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/5cPye27Q9PUFmPLOHOFcYN/0e79e1985d8327672573bc6fc3996fba/Screenshot_2026-03-10_at_20.12.30.png"
                alt="geolocation {   /* NOPE */   translate: 100px 100px;   transform: scale(0);   opacity: 0.75;   filter: opacity(0);   inline-size: 2px;   clip-path: inset(50%); }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>And speaking of Chris, he also played with the new <code>geolocation</code> element (currently Chrome-only, and <a href="https://webweekly.email/archive/web-weekly-181/#more-declarative-html%3A-%3Cgeolocation%3E" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwebweekly.email%2Farchive%2Fweb-weekly-181%2F%23more-declarative-html%253A-%253Cgeolocation%253E')">I covered it six weeks ago</a>) and found some &quot;interesting&quot; CSS quirks of this new native element.</p>
<p><a class="btn btn__small" href="https://frontendmasters.com/blog/the-enforced-accessibility-of-the-geolocation-element/">Style the location</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-wonderful-weird-web-%E2%80%93-a-map-of-us" href="#the-wonderful-weird-web-%E2%80%93-a-map-of-us">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-wonderful-weird-web-%E2%80%93-a-map-of-us">The wonderful weird web – A map of us</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(213.9406779661017,75.63559322033898,41.05932203389831); --color2: rgb(123,124,132); --color3: rgb(236,172,156); --color4: rgb(214,204,193); --color5: rgb(66,69,76);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTcxIj48cGF0aCBmaWxsPSIjNDI0NTRjIiBkPSJNMCAwaDMwMHYxNzFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzOCIgY3k9IjY0IiByPSIxODMiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMjYiIGN5PSI5MCIgcj0iMTc2IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZWNlZGU4IiB0cmFuc2Zvcm09Im1hdHJpeCgtMjAuMTEyNDUgLTEzNi40Njk2OCAxNzguMzE3MjcgLTI2LjI3OTgxIDE0NC42IDgyKSIvPjxlbGxpcHNlIGN4PSIxMTUiIGN5PSI0NiIgZmlsbD0iIzg2ODg4YyIgcng9IjYxIiByeT0iMiIvPjxlbGxpcHNlIGN4PSIxMTgiIGN5PSI1NSIgZmlsbD0iIzg1ODc4YyIgcng9IjQ0IiByeT0iMiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik05OSA1N2g4NXYyM0g5OXoiLz48cGF0aCBmaWxsPSIjNmU3MDc2IiBkPSJtMTQ2LjIgODEgMjIuOC0zIC44IDctMjIuOCAyLjh6Ii8+PHBhdGggZmlsbD0iIzUzNTU1YSIgZD0iTTc3IDk2aDEwNnYxSDc3eiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=avif&fit=scale&q=75&w=300&h=171 300w, https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=avif&fit=scale&q=75&w=500&h=286 500w, https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=avif&fit=scale&q=75&w=700&h=401 700w, https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=avif&fit=scale&q=75&w=900&h=515 900w, https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=avif&fit=scale&q=75&w=1100&h=630 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=webp&fit=scale&q=75&w=300&h=171 300w, https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=webp&fit=scale&q=75&w=500&h=286 500w, https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=webp&fit=scale&q=75&w=700&h=401 700w, https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=webp&fit=scale&q=75&w=900&h=515 900w, https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=webp&fit=scale&q=75&w=1100&h=630 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="573"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=jpg&fit=scale&q=75&w=300&h=171 300w, https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=jpg&fit=scale&q=75&w=500&h=286 500w, https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=jpg&fit=scale&q=75&w=700&h=401 700w, https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=jpg&fit=scale&q=75&w=900&h=515 900w, https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png?fm=jpg&fit=scale&q=75&w=1100&h=630 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/5RiH5VMlLIXQMHfHqiIs1U/67d079fb145364d7f1fb4d6b255d1b0e/Screenshot_2026-03-10_at_18.31.19.png"
                alt="A map with a tooltip saying &quot;Public Map▴ I wonder what would have happened if I stayed. I think we will meet again someday. I miss you&quot;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>AMOU is a map of memories. People can share memories from a certain place. I've spent quite some time discovering all these unknown memories in my neighborhood. ❤️</p>
<p><a class="btn btn__small" href="https://amapof.us/map">Discover memories</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="%60npmx%60-is-having-a-moment" href="#%60npmx%60-is-having-a-moment">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="%60npmx%60-is-having-a-moment"><code>npmx</code> is having a moment</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(84,144,183); --color2: rgb(84,140,172); --color3: rgb(116,196,244); --color4: rgb(188,188,188); --color5: rgb(50,65,78);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTc5Ij48cGF0aCBmaWxsPSIjMzI0MTRlIiBkPSJNMCAwaDMwMHYxNzlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjExNyIgY3k9IjY2IiByPSIxNjgiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjQ0LjggOTQuNyAyMjkuMyAxMDdsLTM1LjctMS4xIDMuNS0xNi41eiIvPjxwYXRoIGZpbGw9IiNiNmFlYWEiIGQ9Ik0xODIuNSAyNXYxOGgtNzVWMjV6Ii8+PGVsbGlwc2UgY3g9IjQzIiBjeT0iNzgiIGZpbGw9IiMwYTA2MDYiIHJ4PSI3OSIgcnk9IjE0NiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im0xOTEgMTAzIDM4LTE1IDcgMTd6Ii8+PGNpcmNsZSBjeD0iMjQ5IiBjeT0iMjQiIHI9IjcxIiBmaWxsPSIjMDMwMDAwIi8+PGVsbGlwc2UgY3g9IjIxMyIgY3k9IjE0MSIgZmlsbD0iIzA2MDAwMCIgcng9IjEwNyIgcnk9IjMwIi8+PHBhdGggZmlsbD0iIzU0ZDdmZiIgZD0ibTk2LjcgMjMuNi41LTcuMUw4Ny44IDQwIDg2IDUzLjN6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=avif&fit=scale&q=75&w=300&h=180 300w, https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=avif&fit=scale&q=75&w=500&h=300 500w, https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=avif&fit=scale&q=75&w=700&h=420 700w, https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=avif&fit=scale&q=75&w=900&h=540 900w, https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=avif&fit=scale&q=75&w=1100&h=660 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=webp&fit=scale&q=75&w=300&h=180 300w, https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=webp&fit=scale&q=75&w=500&h=300 500w, https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=webp&fit=scale&q=75&w=700&h=420 700w, https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=webp&fit=scale&q=75&w=900&h=540 900w, https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=webp&fit=scale&q=75&w=1100&h=660 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="600"
                srcset="https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=jpg&fit=scale&q=75&w=300&h=180 300w, https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=jpg&fit=scale&q=75&w=500&h=300 500w, https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=jpg&fit=scale&q=75&w=700&h=420 700w, https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=jpg&fit=scale&q=75&w=900&h=540 900w, https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png?fm=jpg&fit=scale&q=75&w=1100&h=660 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/CceQfvOp01ooqnEez72Uu/467e332f72b1ada25edabcba3de66050/Screenshot_2026-03-10_at_19.39.35.png"
                alt="npmx — a fast, modern browser for the npm registry"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I plugged <code>npmx</code> in a previous Web Weekly, and while I thought the project was cool, I secretly didn't have high hopes of me using it. But I do! And the team is building a nice community around the project. Good stuff!</p>
<p><a class="btn btn__small" href="https://npmx.dev/">Check packages with style</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-css-state-machine" href="#a-css-state-machine">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-css-state-machine">A CSS state machine</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(199,153,107); --color2: rgb(147,100,175); --color3: rgb(210,115,116); --color4: rgb(170,178,186); --color5: rgb(44,60,76);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY3Ij48cGF0aCBmaWxsPSIjMmMzYzRjIiBkPSJNMCAwaDMwMHYxNjdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0MiIgY3k9IjMxIiByPSIxODEiIGZpbGw9IiMwOTA0MTMiLz48ZWxsaXBzZSBjeD0iNzkiIGN5PSI2OSIgZmlsbD0iIzMyMzIzZCIgcng9IjYwIiByeT0iNDIiLz48cGF0aCBmaWxsPSIjNzA2MjVhIiBkPSJNMzUgNDloMTk0djRIMzV6Ii8+PHBhdGggZmlsbD0iIzY2NjY2YiIgZD0iTTMzIDc1aDEwMnY0SDMzeiIvPjxwYXRoIGZpbGw9IiM4MjRhNzQiIGQ9Ik0yMSA5M2g4MnYzSDIxeiIvPjxlbGxpcHNlIGN4PSIxMTEiIGN5PSIzIiBmaWxsPSIjMDQwZTI4IiByeD0iMjU1IiByeT0iMTIiLz48ZWxsaXBzZSBjeD0iMTQ0IiBjeT0iMTM5IiBmaWxsPSIjMDMwZDI2IiByeD0iMjU1IiByeT0iMTAiLz48cGF0aCBmaWxsPSIjNzA0OTU2IiBkPSJNMzggNDBoNjN2NEgzOHoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=avif&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=avif&fit=scale&q=75&w=500&h=280 500w, https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=avif&fit=scale&q=75&w=700&h=392 700w, https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=avif&fit=scale&q=75&w=900&h=504 900w, https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=avif&fit=scale&q=75&w=1100&h=616 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=webp&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=webp&fit=scale&q=75&w=500&h=280 500w, https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=webp&fit=scale&q=75&w=700&h=392 700w, https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=webp&fit=scale&q=75&w=900&h=504 900w, https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=webp&fit=scale&q=75&w=1100&h=616 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="560"
                srcset="https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=jpg&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=jpg&fit=scale&q=75&w=500&h=280 500w, https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=jpg&fit=scale&q=75&w=700&h=392 700w, https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=jpg&fit=scale&q=75&w=900&h=504 900w, https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png?fm=jpg&fit=scale&q=75&w=1100&h=616 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/10qJDcJhQ87SCSgsxY9C3v/c7c97948c073bd317cb9e64a4679b154/Screenshot_2026-03-10_at_05.22.11.png"
                alt=".track-focus {   --was-focused: false;   animation: track-focus 0.000001s linear forwards paused; } .track-focus:focus-within {   animation-play-state: running; } @keyframes track-focus {   to { --was-focused: true; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Patrick tried to find a CSS-only way to store the information of whether an element was previously focused. The solution is hacky but also... elegant?</p>
<p><a class="btn btn__small" href="https://patrickbrosset.com/articles/2026-03-09-using-css-animations-as-state-machines-to-remember-focus-and-hover-states-with-css-only/">Remember focus</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="you-don't-know-html-tables" href="#you-don't-know-html-tables">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="you-don't-know-html-tables">You Don't Know HTML Tables</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(79.6875,79.6875,175.3125); --color2: rgb(116,124,132); --color3: rgb(163.83749999999998,163.83749999999998,213.5625); --color4: rgb(187,187,188); --color5: rgb(51,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTg1Ij48cGF0aCBmaWxsPSIjMzMzYzU0IiBkPSJNMCAwaDMwMHYxODVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMjciIGN5PSI3OCIgZmlsbD0iI2ZmZiIgcng9IjI1NSIgcnk9IjcwIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTI0MSAxNDYuOC0yMDItMy42IDItMTE2IDIwMiAzLjZ6Ii8+PGVsbGlwc2UgY3g9IjIiIGN5PSI3MyIgcng9IjExIiByeT0iMTU3Ii8+PHBhdGggZD0iTTI0NCAwaDEydjE1OGgtMTJ6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09Im1hdHJpeCgtMi4wMjkyIDU4LjEwODY4IC00Ni4zMDI4IC0xLjYxNjkzIDU4LjIgODgpIi8+PHBhdGggZmlsbD0iI2ZmZmNmNiIgZD0iTTEyIDEyaDIzMXYxMjNIMTJ6Ii8+PHBhdGggZmlsbD0iIzRmNGU0ZCIgZD0iTTIxIDIzaDE5OHYxMUgyMXoiLz48ZWxsaXBzZSBjeD0iMTU3IiBjeT0iMTUyIiBmaWxsPSIjMDAwMDA2IiByeD0iMjE1IiByeT0iOCIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=avif&fit=scale&q=75&w=300&h=186 300w, https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=avif&fit=scale&q=75&w=500&h=310 500w, https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=avif&fit=scale&q=75&w=700&h=434 700w, https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=avif&fit=scale&q=75&w=900&h=558 900w, https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=avif&fit=scale&q=75&w=1100&h=682 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=webp&fit=scale&q=75&w=300&h=186 300w, https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=webp&fit=scale&q=75&w=500&h=310 500w, https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=webp&fit=scale&q=75&w=700&h=434 700w, https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=webp&fit=scale&q=75&w=900&h=558 900w, https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=webp&fit=scale&q=75&w=1100&h=682 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="620"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=jpg&fit=scale&q=75&w=300&h=186 300w, https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=jpg&fit=scale&q=75&w=500&h=310 500w, https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=jpg&fit=scale&q=75&w=700&h=434 700w, https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=jpg&fit=scale&q=75&w=900&h=558 900w, https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png?fm=jpg&fit=scale&q=75&w=1100&h=682 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2bfTTC7jHXn2ePBwF668qd/2d84e79b7847b1f27c5d13bd46d48e9f/Screenshot_2026-03-10_at_20.04.08.png"
                alt="You Don&apos;t Know HTML Tables"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Frank claims that I don't know HTML tables, and turns out he's right. This is a massive read, but I'm sure you'll learn a thing or two. I mean, did you know that there's a TOM (table object model)?</p>
<p><a class="btn btn__small" href="https://blog.frankmtaylor.com/2026/03/05/you-dont-know-html-tables/">Level up your table game</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="creative-ways-to-select-%60%3Aroot%60" href="#creative-ways-to-select-%60%3Aroot%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="creative-ways-to-select-%60%3Aroot%60">Creative ways to select <code>:root</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(207,114,115); --color2: rgb(162,92,100); --color3: rgb(221.32380952380953,156.07619047619045,156.77777777777774); --color4: rgb(176,152,197); --color5: rgb(44,60,79);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTAzIj48cGF0aCBmaWxsPSIjMmMzYzRmIiBkPSJNMCAwaDMwMHYxMDNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyOSIgY3k9IjUzIiByPSIxNTQiIGZpbGw9IiMwMzAxMGUiLz48ZWxsaXBzZSBjeD0iMTMxIiBjeT0iNDIiIGZpbGw9IiM0OTRkNTgiIHJ4PSI5OSIgcnk9IjMiLz48cGF0aCBmaWxsPSIjNTk1YzZkIiBkPSJNMjcgMzFoMzR2NEgyN3oiLz48cGF0aCBmaWxsPSIjMDYwZjI3IiBkPSJNMCA3NGgyNTZ2MTRIMHoiLz48cGF0aCBmaWxsPSIjMDYxMDI4IiBkPSJNMjQ1IDBoMTF2NzRoLTExeiIvPjxlbGxpcHNlIGN4PSIxMTkiIGN5PSIxIiBmaWxsPSIjMDgxMjJhIiByeD0iMjQzIiByeT0iNyIvPjxwYXRoIGZpbGw9IiMwNzEwMjgiIGQ9Im0tMTAuNiA4MC4zIDEuMi03MSAyMCAuNC0xLjIgNzF6Ii8+PHBhdGggZmlsbD0iIzFlMjIyZSIgZD0iTTUwIDE1aDkwdjI2SDUweiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=avif&fit=scale&q=75&w=300&h=103 300w, https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=avif&fit=scale&q=75&w=500&h=173 500w, https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=avif&fit=scale&q=75&w=700&h=242 700w, https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=avif&fit=scale&q=75&w=900&h=311 900w, https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=avif&fit=scale&q=75&w=1100&h=381 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=webp&fit=scale&q=75&w=300&h=103 300w, https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=webp&fit=scale&q=75&w=500&h=173 500w, https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=webp&fit=scale&q=75&w=700&h=242 700w, https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=webp&fit=scale&q=75&w=900&h=311 900w, https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=webp&fit=scale&q=75&w=1100&h=381 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="346"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=jpg&fit=scale&q=75&w=300&h=103 300w, https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=jpg&fit=scale&q=75&w=500&h=173 500w, https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=jpg&fit=scale&q=75&w=700&h=242 700w, https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=jpg&fit=scale&q=75&w=900&h=311 900w, https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png?fm=jpg&fit=scale&q=75&w=1100&h=381 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/7bSCx7C5Tuwxyl0GgiLdK3/6a1619d2a7c3561df3aa4d8197223bdc/Screenshot_2026-03-10_at_20.17.51.png"
                alt=":not(* *) {   /* (* *) are my starry eyes looking at CSS &lt;3 */ }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Temani and Daniel get into an unofficial competition about unconventional ways to select the <code>:root</code> element and some of these approaches made me smile. I love CSS.</p>
<ul>
<li><a href="https://css-tip.com/root-selectors/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcss-tip.com%2Froot-selectors%2F')">The Hidden Selectors of The HTML Element</a></li>
<li><a href="https://css-tricks.com/the-different-ways-to-select-html-in-css/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcss-tricks.com%2Fthe-different-ways-to-select-html-in-css%2F')">The Different Ways to Select <code>html</code> in CSS</a></li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="random-mdn-%E2%80%93-%60stop()%60" href="#random-mdn-%E2%80%93-%60stop()%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="random-mdn-%E2%80%93-%60stop()%60">Random MDN – <code>stop()</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(114,170,232); --color2: rgb(86,125,169); --color3: rgb(220,196,132); --color4: rgb(167,172,188); --color5: rgb(52,68,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTIxIj48cGF0aCBmaWxsPSIjMzQ0NDU0IiBkPSJNMCAwaDMwMHYxMjFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0MCIgY3k9IjUwIiByPSIxNTQiIGZpbGw9IiMwMDAwMDciLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiM2OTZlNzAiIHRyYW5zZm9ybT0ibWF0cml4KC4wMDM0MyAtMy41OTc3MyA0MS40NTc1OCAuMDM5NDcgMTI3LjkgNTAuOCkiLz48ZWxsaXBzZSBjeD0iMTMxIiBjeT0iOTgiIGZpbGw9IiMwNDBjMjgiIHJ4PSIyNTUiIHJ5PSIyMiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzA2MTAyYyIgdHJhbnNmb3JtPSJtYXRyaXgoLTI1NC45OTc4IC0xLjA2MTE4IC4wOTYxNyAtMjMuMTA5NjkgMTE2LjcgMCkiLz48cGF0aCBmaWxsPSIjMDYwZjJhIiBkPSJtMjc0LjUgMTguMSAxIDYxLTQ0IC44LTEtNjF6Ii8+PHBhdGggZmlsbD0iIzhmNzQ0YSIgZD0iTTg3IDQ4aDM1djZIODd6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMDcxMDJiIiB0cmFuc2Zvcm09InJvdGF0ZSgxNTkuOCAtMy42IDIwLjEpIHNjYWxlKDIxLjI1Mjk0IDQ1LjY2OTM2KSIvPjxwYXRoIGZpbGw9IiMyMTU3OGQiIGQ9Ik0xMjUgNDhoMjV2NWgtMjV6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=avif&fit=scale&q=75&w=300&h=121 300w, https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=avif&fit=scale&q=75&w=500&h=203 500w, https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=avif&fit=scale&q=75&w=700&h=284 700w, https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=avif&fit=scale&q=75&w=900&h=365 900w, https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=avif&fit=scale&q=75&w=1100&h=447 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=webp&fit=scale&q=75&w=300&h=121 300w, https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=webp&fit=scale&q=75&w=500&h=203 500w, https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=webp&fit=scale&q=75&w=700&h=284 700w, https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=webp&fit=scale&q=75&w=900&h=365 900w, https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=webp&fit=scale&q=75&w=1100&h=447 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="406"
                srcset="https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=jpg&fit=scale&q=75&w=300&h=121 300w, https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=jpg&fit=scale&q=75&w=500&h=203 500w, https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=jpg&fit=scale&q=75&w=700&h=284 700w, https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=jpg&fit=scale&q=75&w=900&h=365 900w, https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png?fm=jpg&fit=scale&q=75&w=1100&h=447 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/yZQymxpOPgUZ7X9cTZbha/37897f9a6b043f0084f909e9da73c00c/Screenshot_2026-03-10_at_18.41.25.png"
                alt="window.stop()"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Here's a fun one: did you know that there's a global <code>stop()</code> method? Well, now you do!</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/API/Window/stop">Stop!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-recap-%E2%80%93-overwrite-your-dependencies'-dependencies" href="#til-recap-%E2%80%93-overwrite-your-dependencies'-dependencies">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-recap-%E2%80%93-overwrite-your-dependencies'-dependencies">TIL recap – Overwrite your dependencies' dependencies</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(81.13636363636363,127.49999999999996,173.86363636363637); --color2: rgb(124,156,108); --color3: rgb(164.59090909090907,188.69999999999996,212.8090909090909); --color4: rgb(161,193,130); --color5: rgb(51,67,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTgzIj48cGF0aCBmaWxsPSIjMzM0MzU0IiBkPSJNMCAwaDMwMHYxODNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzMCIgY3k9IjQzIiByPSIxODciIGZpbGw9IiMwMDAwMDgiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMzODQ0NDAiIHRyYW5zZm9ybT0ibWF0cml4KC00LjExNDY2IDE4LjA2MDQzIC0zOS4yOTYxNSAtOC45NTI3MyAxMzIuOCA2Ni43KSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzA0MGMyNyIgdHJhbnNmb3JtPSJyb3RhdGUoODkuNCAtMzMgMTI0LjEpIHNjYWxlKDE0LjcyNTYyIDI0OC41NzA2OSkiLz48ZWxsaXBzZSBjeD0iMjUxIiBjeT0iNjAiIGZpbGw9IiMwNjBmMjkiIHJ4PSIxNiIgcnk9IjE1NiIvPjxlbGxpcHNlIGN4PSIxMjIiIGN5PSI2IiBmaWxsPSIjMDYwZjJhIiByeD0iMjU1IiByeT0iOSIvPjxwYXRoIGZpbGw9IiM1ODcyNTEiIGQ9Ik0xMDIgNjNoNDZ2NmgtNDZ6Ii8+PHBhdGggZmlsbD0iIzViNzQ1MyIgZD0iTTg3IDUxaDQ4djVIODd6Ii8+PHBhdGggZmlsbD0iIzA2MGUyOSIgZD0ibTE2LjYgMTQxLjItMzEgLjYtMi4yLTEzMSAzMS0uNnoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=avif&fit=scale&q=75&w=300&h=184 300w, https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=avif&fit=scale&q=75&w=500&h=308 500w, https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=avif&fit=scale&q=75&w=700&h=431 700w, https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=avif&fit=scale&q=75&w=900&h=554 900w, https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=avif&fit=scale&q=75&w=1100&h=678 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=webp&fit=scale&q=75&w=300&h=184 300w, https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=webp&fit=scale&q=75&w=500&h=308 500w, https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=webp&fit=scale&q=75&w=700&h=431 700w, https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=webp&fit=scale&q=75&w=900&h=554 900w, https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=webp&fit=scale&q=75&w=1100&h=678 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="616"
                srcset="https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=jpg&fit=scale&q=75&w=300&h=184 300w, https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=jpg&fit=scale&q=75&w=500&h=308 500w, https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=jpg&fit=scale&q=75&w=700&h=431 700w, https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=jpg&fit=scale&q=75&w=900&h=554 900w, https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png?fm=jpg&fit=scale&q=75&w=1100&h=678 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/uMnH0TRVXKlmdKQ42Y1Dx/474ef816fabec4c9c20afc1430bfcb2a/Screenshot_2026-03-10_at_18.55.51.png"
                alt="{   &quot;overrides&quot;: {     &quot;bar@2.0.0&quot;: {       &quot;foo&quot;: &quot;1.0.0&quot;     }   } }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Did you know that npm supports an <code>overrides</code> key in your <code>package<wbr>.json</code>? If one of your dependencies is pulling in something nasty, you can fix the dependency right from the root level. Handy!</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/how-to-override-your-dependencys-dependencies/">Fix your deps</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-on-the-baseline-%E2%80%94-trusted-types" href="#new-on-the-baseline-%E2%80%94-trusted-types">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-on-the-baseline-%E2%80%94-trusted-types">New on the baseline — Trusted Types</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(114,169,232); --color2: rgb(86,118,162); --color3: rgb(215,167,126); --color4: rgb(176,162,195); --color5: rgb(51,66,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTUwIj48cGF0aCBmaWxsPSIjMzM0MjUzIiBkPSJNMCAwaDMwMHYxNTBIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzAxMDAwZSIgdHJhbnNmb3JtPSJyb3RhdGUoMS44IC0xOTQxLjQgMzc5OS44KSBzY2FsZSgxNzQuMjM0MTkgMTE3LjQ5NDAzKSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzM1M2U0NiIgdHJhbnNmb3JtPSJtYXRyaXgoLTg0LjE3MjE4IC45OTg1IC0uMjYzNDMgLTIyLjIwNjgxIDEwMy41IDUxKSIvPjxlbGxpcHNlIGN4PSIxMTQiIGN5PSIzNSIgZmlsbD0iIzU1NjQ2MiIgcng9IjkxIiByeT0iMyIvPjxlbGxpcHNlIGN4PSIxMjYiIGN5PSI1NyIgZmlsbD0iIzU0NjQ0ZSIgcng9Ijg4IiByeT0iMyIvPjxlbGxpcHNlIGN4PSI1MiIgY3k9IjEyMiIgZmlsbD0iIzAzMGQyNSIgcng9IjI1NSIgcnk9IjkiLz48cGF0aCBmaWxsPSIjM2E2ZmEwIiBkPSJNMzYgNDVoNDV2NEgzNnoiLz48cGF0aCBmaWxsPSIjNTQ0OTcwIiBkPSJNNDQgNjZoOTV2NUg0NHoiLz48cGF0aCBmaWxsPSIjMGYxNDIzIiBkPSJNMTEyIDM5aDc2djE3aC03NnoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=avif&fit=scale&q=75&w=300&h=150 300w, https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=avif&fit=scale&q=75&w=500&h=250 500w, https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=avif&fit=scale&q=75&w=700&h=350 700w, https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=avif&fit=scale&q=75&w=900&h=450 900w, https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=avif&fit=scale&q=75&w=1100&h=550 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=webp&fit=scale&q=75&w=300&h=150 300w, https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=webp&fit=scale&q=75&w=500&h=250 500w, https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=webp&fit=scale&q=75&w=700&h=350 700w, https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=webp&fit=scale&q=75&w=900&h=450 900w, https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=webp&fit=scale&q=75&w=1100&h=550 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="500"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=jpg&fit=scale&q=75&w=300&h=150 300w, https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=jpg&fit=scale&q=75&w=500&h=250 500w, https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=jpg&fit=scale&q=75&w=700&h=350 700w, https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=jpg&fit=scale&q=75&w=900&h=450 900w, https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png?fm=jpg&fit=scale&q=75&w=1100&h=550 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1z5KyoSqDsxH81QebUaxml/3d0035623b9cbcb7c4e455451cfe5bf6/Screenshot_2026-03-10_at_19.00.59.png"
                alt="trustedTypes.createPolicy(&quot;default&quot;, {   createHTML(value) {     console.log(&quot;Please refactor this code&quot;);     return sanitize(value);   }, });"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>With Firefox 148 and Safari 26, Trusted Types entered the baseline! 🎉 What are they for?</p>
<p>Whenever you're dealing with user-generated content, you can enforce content to pass a sanitization step before injecting it into the DOM. You can enforce this via CSP, too. Pretty cool!</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/API/Trusted_Types_API">Be safe</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="three-valuable-projects-to-have-a-look-at" href="#three-valuable-projects-to-have-a-look-at">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="three-valuable-projects-to-have-a-look-at">Three valuable projects to have a look at</h2></div><ul>
<li><a href="https://github.com/lokesh/color-thief" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Flokesh%2Fcolor-thief')">lokesh/color-thief</a> – Grab the color palette from an image using just JavaScript. <em>The demo site is pretty nice!</em></li>
<li><a href="https://github.com/searlsco/posse_party" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsearlsco%2Fposse_party')">searlsco/posse_party</a> – Crossposting content from your site to a variety of social media platforms.</li>
<li><a href="https://github.com/webpro-nl/unbarrelify" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fwebpro-nl%2Funbarrelify')">webpro-nl/unbarrelify</a> – Barrel file removal tool for JavaScript &amp; TypeScript.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-tiny-helper" href="#a-new-tiny-helper">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-tiny-helper">A new Tiny Helper</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(123.20224719101117,126.06741573033703,131.79775280898883); --color2: rgb(116,122,137); --color3: rgb(186.46516853932582,187.95505617977526,190.9348314606742); --color4: rgb(209,210,212); --color5: rgb(60,60,60);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgODQiPjxwYXRoIGZpbGw9IiMzYzNjM2MiIGQ9Ik0wIDBoMzAwdjg0SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxNjMiIGN5PSIzMiIgcj0iMTc4IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTUyIiBjeT0iNiIgcj0iMTc2IiBmaWxsPSIjZmZmIi8+PGVsbGlwc2UgY3g9IjExOCIgY3k9IjU5IiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iMjUiLz48ZWxsaXBzZSBjeD0iMTI1IiBjeT0iMjkiIGZpbGw9IiMzNjM2MzYiIHJ4PSIxMTQiIHJ5PSI2Ii8+PGVsbGlwc2UgY3g9IjEzMSIgY3k9IjEwIiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iMTIiLz48ZWxsaXBzZSBjeD0iMTM5IiBjeT0iNTkiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSIyNSIvPjxlbGxpcHNlIGN4PSIxMDEiIGN5PSIxMCIgZmlsbD0iI2ZmZiIgcng9IjI1NSIgcnk9IjEyIi8+PHBhdGggZmlsbD0iIzRjNGM0YyIgZD0iTTE3NyAyNWg2MnYxMGgtNjJ6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=avif&fit=scale&q=75&w=300&h=84 300w, https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=avif&fit=scale&q=75&w=500&h=141 500w, https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=avif&fit=scale&q=75&w=700&h=198 700w, https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=avif&fit=scale&q=75&w=900&h=254 900w, https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=avif&fit=scale&q=75&w=1100&h=311 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=webp&fit=scale&q=75&w=300&h=84 300w, https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=webp&fit=scale&q=75&w=500&h=141 500w, https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=webp&fit=scale&q=75&w=700&h=198 700w, https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=webp&fit=scale&q=75&w=900&h=254 900w, https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=webp&fit=scale&q=75&w=1100&h=311 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="283"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=jpg&fit=scale&q=75&w=300&h=84 300w, https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=jpg&fit=scale&q=75&w=500&h=141 500w, https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=jpg&fit=scale&q=75&w=700&h=198 700w, https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=jpg&fit=scale&q=75&w=900&h=254 900w, https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png?fm=jpg&fit=scale&q=75&w=1100&h=311 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/7CfJlOJnFfB9AI1bdCGXae/55213a38e6ca141e6bb598d47dd9b3c6/Screenshot_2026-03-10_at_19.08.50.png"
                alt="Free online SVG converter"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I can't be the only person who tries to transform a <code>png</code> to an <code>svg</code> at least once a month. I played with this converter a bit, and the results looked promising.</p>
<p><a class="btn btn__small" href="https://svgconverter.online">Convert</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more single-purpose online tools on <a href="https://tiny-helpers.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ftiny-helpers.dev%2F')">tiny-helpers.dev</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="thought-of-the-week" href="#thought-of-the-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="thought-of-the-week">Thought of the week</h2></div><p>Here's <a href="https://adventures.nodeland.dev/archive/the-human-in-the-loop/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fadventures.nodeland.dev%2Farchive%2Fthe-human-in-the-loop%2F')">Matteo on everyone's &quot;favorite&quot; topic</a>.</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <blockquote>
<p>The human in the loop isn't a bug to be fixed. It's a feature to be protected.</p>
</blockquote>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="did-you-learn-something-from-this-issue%3F" href="#did-you-learn-something-from-this-issue%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="did-you-learn-something-from-this-issue%3F">Did you learn something from this issue?</h2></div><p>❤️ If so, <strong>join 39 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="this-is-all%2C-friends!" href="#this-is-all%2C-friends!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="this-is-all%2C-friends!">This is all, friends!</h2></div><p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr aria-hidden="true"><p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Web Weekly #186">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Web Weekly #185 (#blogPost)</title>
      <link href="https://www.stefanjudis.com/blog/web-weekly-185/"/>
      <published>2026-03-02T23:00:00+00:00</published>
      <updated>2026-03-02T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/blog/web-weekly-185/</id>
      <category term="blogPost"></category>
        <category term="Newsletter"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="guten-tag!-guten-tag!-%F0%9F%91%8B" href="#guten-tag!-guten-tag!-%F0%9F%91%8B">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="guten-tag!-guten-tag!-%F0%9F%91%8B">Guten Tag! Guten Tag! 👋</h2></div><p>Have you heard of Chrome's soft navigations? Do you parse the <code>sec-fetch</code> header to prevent CSRF? Or do you know that elements with <code>overflow: hidden</code> are still scrollable?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <p><a href="https://pablolarah.cl/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fpablolarah.cl%2F')">Pablo</a> listens to <a href="https://www.youtube.com/watch?v=htQBS2Ikz6c" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DhtQBS2Ikz6c')">ROSALÍA - Berghain</a> and says:</p>
<blockquote>
<p>Rosalía's Berghain (&amp; the LUX album) are real masterpieces. Berghain has passages in German, showing us in the key of Opera what Hildegard of Bingen was experiencing, who saw &quot;the reflection of the living Light&quot; as a vision of God. Rosalía's Berghain translates in German the religious visions as &quot;The flame penetrates my brain Like a lead teddy bear&quot;. I absolutely recommend listening to this album, sung in German, French, Catalan, Italian, Ukrainian, Japanese and Spanish.</p>
</blockquote>
</div><p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>six more songs</strong> left in the queue.</p>
<hr aria-hidden="true"><p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mg6lj5hg622t">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116167081441472403" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffront-end.social%2F%40stefan%2F116167081441472403')">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_my-time-management-has-been-all-over-the-activity-7434693506897563648-l3u9" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.linkedin.com%2Fposts%2Fstefan-judis_my-time-management-has-been-all-over-the-activity-7434693506897563648-l3u9')">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr aria-hidden="true"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="no-code" href="#no-code">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="no-code">No code</h2></div><ul>
<li><a href="https://emilkowal.ski/ui/developing-taste" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Femilkowal.ski%2Fui%2Fdeveloping-taste')">Developing Taste</a> → &quot;Expose yourself to great work, this way you’ll learn how greatness looks and feels like.&quot;</li>
<li><a href="https://terriblesoftware.org/2026/02/02/why-am-i-doing-the-thinking-for-you/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fterriblesoftware.org%2F2026%2F02%2F02%2Fwhy-am-i-doing-the-thinking-for-you%2F')">Why Am I Doing the Thinking for You?</a> → &quot;when you ask someone 'what do you think?' without sharing what <strong>you</strong> think, you’re not collaborating, but more like outsourcing?&quot;</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="soft-navigations-in-chrome" href="#soft-navigations-in-chrome">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="soft-navigations-in-chrome">Soft navigations in Chrome</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(126.55555555555557,128.44444444444443,128.44444444444443); --color2: rgb(120,120,122); --color3: rgb(188.2088888888889,189.1911111111111,189.1911111111111); --color4: rgb(187,188,188); --color5: rgb(60,60,68);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTE3Ij48cGF0aCBmaWxsPSIjM2MzYzQ0IiBkPSJNMCAwaDMwMHYxMTdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0NSIgY3k9IjM5IiByPSIxNzUiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMTciIGN5PSI0NSIgcj0iMTUwIiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTYxIiBjeT0iMzMiIHI9IjE5OSIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjE1NyIgY3k9IjMzIiByPSIxNzUiIGZpbGw9IiNmZmYiLz48ZWxsaXBzZSBjeD0iMTMxIiBjeT0iNjkiIGZpbGw9IiM5Njk2OTciIHJ4PSIxMTAiIHJ5PSIzIi8+PHBhdGggZmlsbD0iIzc5Nzk3YSIgZD0iTTExIDE1aDEwNXY1SDExeiIvPjxwYXRoIGZpbGw9IiM5MDkxOTIiIGQ9Ik0wIDM4aDE5MnY0SDB6Ii8+PGVsbGlwc2UgY3g9Ijg2IiBjeT0iNTYiIGZpbGw9IiM4MTgxODIiIHJ4PSI2NCIgcnk9IjIiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=avif&fit=scale&q=75&w=300&h=117 300w, https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=avif&fit=scale&q=75&w=500&h=196 500w, https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=avif&fit=scale&q=75&w=700&h=275 700w, https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=avif&fit=scale&q=75&w=900&h=353 900w, https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=avif&fit=scale&q=75&w=1100&h=432 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=webp&fit=scale&q=75&w=300&h=117 300w, https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=webp&fit=scale&q=75&w=500&h=196 500w, https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=webp&fit=scale&q=75&w=700&h=275 700w, https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=webp&fit=scale&q=75&w=900&h=353 900w, https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=webp&fit=scale&q=75&w=1100&h=432 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="393"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=jpg&fit=scale&q=75&w=300&h=117 300w, https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=jpg&fit=scale&q=75&w=500&h=196 500w, https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=jpg&fit=scale&q=75&w=700&h=275 700w, https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=jpg&fit=scale&q=75&w=900&h=353 900w, https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png?fm=jpg&fit=scale&q=75&w=1100&h=432 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6EbM4d4WWQlNXGB8RtFvGf/47e9577c11f576d2b7eef68505724667/Screenshot_2026-03-03_at_20.31.06.png"
                alt="What is a soft navigation? We came up with the following definition: The navigation is initiated by a user action. The navigation results in a visible URL change to the user, and a history change. The navigation results in a DOM change."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>This is probably old news for all the performance experts, but I learned this week that Chrome has been experimenting with a new navigation type for a while: <em>soft</em> navigations.</p>
<p>The goal is to gather common web vitals across JS-navigations in single-page apps. I'm game!</p>
<p><a class="btn btn__small" href="https://developer.chrome.com/docs/web-platform/soft-navigations-experiment">Measure!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="laws-of-ux" href="#laws-of-ux">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="laws-of-ux">Laws of UX</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(127.5,127.5,127.5); --color2: rgb(124,124,124); --color3: rgb(188.7,188.7,188.7); --color4: rgb(196,196,196); --color5: rgb(68,68,68);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTEyIj48cGF0aCBmaWxsPSIjNDQ0IiBkPSJNMCAwaDMwMHYxMTJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMzYiIGN5PSIyOSIgcng9IjIwNSIgcnk9Ijk1Ii8+PHBhdGggZmlsbD0iI2JmYmZiZiIgZD0iTTEyIDE4aDczdjdIMTJ6Ii8+PGVsbGlwc2UgY3g9IjEzMSIgY3k9IjU1IiBmaWxsPSIjNzY3Njc2IiByeD0iMTE1IiByeT0iMyIvPjxwYXRoIGZpbGw9IiM3MzczNzMiIGQ9Ik0yNyA2OWg3NHY2SDI3eiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzExMSIgdHJhbnNmb3JtPSJtYXRyaXgoLS45NTY4MiAzMi4yMzg2NiAtOTQuODcyNTQgLTIuODE1NzUgMTc5LjMgMjApIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMTExIiB0cmFuc2Zvcm09Im1hdHJpeCgtMjM2LjY4MTcgMzQuMzU2NTcgLTMuNTM0OTcgLTI0LjM1MjMgMTY0LjQgOTApIi8+PHBhdGggZmlsbD0iIzEyMTIxMiIgZD0iTS00IDk1LjYtMi41LTE2IDguMi0yLjIgMzQuOCAxMTF6Ii8+PHBhdGggZmlsbD0iIzExMSIgZD0ibTY3LjcgMzEuNy03LjgtMTYuNC02LjggMzQuNSAxMDAuNiAxLjl6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=avif&fit=scale&q=75&w=300&h=112 300w, https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=avif&fit=scale&q=75&w=500&h=188 500w, https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=avif&fit=scale&q=75&w=700&h=263 700w, https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=avif&fit=scale&q=75&w=900&h=338 900w, https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=avif&fit=scale&q=75&w=1100&h=414 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=webp&fit=scale&q=75&w=300&h=112 300w, https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=webp&fit=scale&q=75&w=500&h=188 500w, https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=webp&fit=scale&q=75&w=700&h=263 700w, https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=webp&fit=scale&q=75&w=900&h=338 900w, https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=webp&fit=scale&q=75&w=1100&h=414 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="376"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=jpg&fit=scale&q=75&w=300&h=112 300w, https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=jpg&fit=scale&q=75&w=500&h=188 500w, https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=jpg&fit=scale&q=75&w=700&h=263 700w, https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=jpg&fit=scale&q=75&w=900&h=338 900w, https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png?fm=jpg&fit=scale&q=75&w=1100&h=414 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/5UnF8n4isRJZ3QTuoKokqI/21a8694553aa0b2db8d54c63e976b012/Screenshot_2026-03-03_at_19.45.11.png"
                alt="Postel&apos;s Law &quot;Be conservative in what you send, be liberal in what you accept.&quot;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Just in case you want to be the person quoting UX laws in your next interface discussion, Raphael put together a nice guide with interactive examples.</p>
<p><a class="btn btn__small" href="https://www.userinterface.wiki/laws-of-ux">Follow the law</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="%60sethtml%60-is-coming-to-firefox" href="#%60sethtml%60-is-coming-to-firefox">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="%60sethtml%60-is-coming-to-firefox"><code>setHTML</code> is coming to Firefox</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(111,165,226); --color2: rgb(160,142,109); --color3: rgb(218,193,131); --color4: rgb(171,179,188); --color5: rgb(51,66,82);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgOTAiPjxwYXRoIGZpbGw9IiMzMzQyNTIiIGQ9Ik0wIDBoMzAwdjkwSDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxMjYiIGN5PSI0MCIgcj0iMTYxIiBmaWxsPSIjMDAwMDBiIi8+PHBhdGggZmlsbD0iIzg1ODc3YiIgZD0iTTIwIDI5aDc4djNIMjB6Ii8+PGVsbGlwc2UgY3g9IjEzMCIgY3k9IjM4IiBmaWxsPSIjNGM2MTRhIiByeD0iMTA2IiByeT0iMyIvPjxlbGxpcHNlIGN4PSIxMjciIGN5PSI3MSIgZmlsbD0iIzA0MGQyNyIgcng9IjI0MiIgcnk9IjYiLz48ZWxsaXBzZSBjeD0iMTQxIiBjeT0iMiIgZmlsbD0iIzA2MTAyYSIgcng9IjI1NSIgcnk9IjEwIi8+PHBhdGggZmlsbD0iIzIwNGU4MCIgZD0iTTcwIDI4aDI1djVINzB6Ii8+PGVsbGlwc2UgY3g9Ijk5IiBjeT0iMzQiIGZpbGw9IiMxOTFkMmMiIHJ4PSIxMzkiIHJ5PSIzIi8+PHBhdGggZmlsbD0iIzA1MGYyOCIgZD0iTTI0MyA3aDEzdjYwaC0xM3oiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=avif&fit=scale&q=75&w=300&h=90 300w, https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=avif&fit=scale&q=75&w=500&h=151 500w, https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=avif&fit=scale&q=75&w=700&h=212 700w, https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=avif&fit=scale&q=75&w=900&h=272 900w, https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=avif&fit=scale&q=75&w=1100&h=333 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=webp&fit=scale&q=75&w=300&h=90 300w, https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=webp&fit=scale&q=75&w=500&h=151 500w, https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=webp&fit=scale&q=75&w=700&h=212 700w, https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=webp&fit=scale&q=75&w=900&h=272 900w, https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=webp&fit=scale&q=75&w=1100&h=333 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="303"
                srcset="https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=jpg&fit=scale&q=75&w=300&h=90 300w, https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=jpg&fit=scale&q=75&w=500&h=151 500w, https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=jpg&fit=scale&q=75&w=700&h=212 700w, https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=jpg&fit=scale&q=75&w=900&h=272 900w, https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png?fm=jpg&fit=scale&q=75&w=1100&h=333 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/55YM5W83lNHtvmss10MRNx/f7736c8ba571cae3572f6d1187e8d578/Screenshot_2026-03-03_at_20.43.43.png"
                alt="document.body.setHTML(   `&lt;h1&gt;Hello my name is &lt;img src=&quot;x&quot;  onclick=&quot;alert(&apos;XSS&apos;)&quot;&gt;` );"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Firefox became the first browser shipping the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/setHTML" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FAPI%2FElement%2FsetHTML')">new <code>setHTML</code> method</a>. What's wrong with good old <code>innerHTML</code>? <code>innerHTML</code> and older ways to change the DOM were all open to XSS attacks.</p>
<p><code>setHTML</code> finally tries to fix this!</p>
<p><a class="btn btn__small" href="https://hacks.mozilla.org/2026/02/goodbye-innerhtml-hello-sethtml-stronger-xss-protection-in-firefox-148/">Don't allow XSS</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="yet-another-way-to-center-elements-in-css" href="#yet-another-way-to-center-elements-in-css">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="yet-another-way-to-center-elements-in-css">Yet another way to center elements in CSS</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(199,153,107); --color2: rgb(146,117,88); --color3: rgb(218.6,188.7,158.8); --color4: rgb(169,177,186); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTU0Ij48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxNTRIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzA1MDIwYSIgdHJhbnNmb3JtPSJtYXRyaXgoLTE3OS4zODg1NCAzLjM3NTggLTIuNTI5MTIgLTEzNC4zOTY2NiAxMjUgNTYuNykiLz48ZWxsaXBzZSBjeD0iMTEyIiBjeT0iNjEiIGZpbGw9IiMzYjNhNDAiIHJ4PSI2MSIgcnk9IjIzIi8+PHBhdGggZmlsbD0iIzZiNjI2MCIgZD0iTTgyIDUzaDk2djVIODJ6Ii8+PHBhdGggZmlsbD0iIzYyNjE2NyIgZD0iTTgzIDY2aDc4djVIODN6Ii8+PHBhdGggZmlsbD0iIzBmMTcyNyIgZD0iTTQ4IDQ2aDM1djMzSDQ4eiIvPjxwYXRoIGZpbGw9IiM2YzU1NDMiIGQ9Im02Mi4zIDQ0LjUgMjQuNS00LjIgMzMuOSAyLjItMTguNCA0LjF6Ii8+PHBhdGggZmlsbD0iIzYyNmM3YyIgZD0iTTg1IDc4aDI3djVIODV6Ii8+PHBhdGggZmlsbD0iIzE2MWQyYSIgZD0ibTEyOC43IDEwOC41IDQyLjktMTcuNi0zOC40LTM0LjItMTIuNi02OC4yeiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=avif&fit=scale&q=75&w=300&h=154 300w, https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=avif&fit=scale&q=75&w=500&h=258 500w, https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=avif&fit=scale&q=75&w=700&h=361 700w, https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=avif&fit=scale&q=75&w=900&h=464 900w, https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=avif&fit=scale&q=75&w=1100&h=568 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=webp&fit=scale&q=75&w=300&h=154 300w, https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=webp&fit=scale&q=75&w=500&h=258 500w, https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=webp&fit=scale&q=75&w=700&h=361 700w, https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=webp&fit=scale&q=75&w=900&h=464 900w, https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=webp&fit=scale&q=75&w=1100&h=568 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="516"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=jpg&fit=scale&q=75&w=300&h=154 300w, https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=jpg&fit=scale&q=75&w=500&h=258 500w, https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=jpg&fit=scale&q=75&w=700&h=361 700w, https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=jpg&fit=scale&q=75&w=900&h=464 900w, https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png?fm=jpg&fit=scale&q=75&w=1100&h=568 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3G6JY865s8WbukVFwLwtJY/9bc60f7fd5bea771737798e216fa4490/Screenshot_2026-03-03_at_20.48.00.png"
                alt=".element {   position: absolute;   place-self: center;    inset: 0; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Here's Juan sharing another way to center absolutely positioned elements in CSS.</p>
<p>I don't have anything else to say other than that centering things in CSS is a solved problem in 2026, don't you think?</p>
<p><a class="btn btn__small" href="https://css-tricks.com/yet-another-way-to-center-an-absolute-element/">Center everything</a></p>
<p><em>Side note: and if this post isn't enough, here's another post explaining <a href="https://www.stefanjudis.com/today-i-learned/auto-margin-works-with-absolute-positioned-elements/">how <code>margin: auto</code> can help with absolutely positioned elements</a>, too.</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-wonderful-weird-web-%E2%80%93-%60aem1k%60" href="#the-wonderful-weird-web-%E2%80%93-%60aem1k%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-wonderful-weird-web-%E2%80%93-%60aem1k%60">The wonderful weird web – <code>aem1k</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(252,10,228); --color2: rgb(125,134,160); --color3: rgb(252,98,236); --color4: rgb(156,171,211); --color5: rgb(63,63,63);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTgyIj48cGF0aCBmaWxsPSIjM2YzZjNmIiBkPSJNMCAwaDMwMHYxODJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9Ijc1IiBjeT0iNzgiIHI9IjIwMiIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjEzNSIgY3k9Ijg2IiByPSIxODAiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0icm90YXRlKC00LjIgMTI0NCAtMTY2OC44KSBzY2FsZSgxNjEuMTg1NTUgMTQ0LjczNzc3KSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzk5OSIgdHJhbnNmb3JtPSJtYXRyaXgoLTExLjk0OTkzIC0yNi4yMjE3MyAyOS42NDQ0NiAtMTMuNTA5NzYgMTI0LjggNDQuOCkiLz48Y2lyY2xlIGN4PSI2MiIgY3k9IjExNiIgcj0iNzMiIGZpbGw9IiNmZmY1ZmYiLz48cGF0aCBmaWxsPSIjOTY5Njk2IiBkPSJtMTM3IDc3IDMzIDIzLTM4IDI4eiIvPjxlbGxpcHNlIGN4PSIxNzMiIGN5PSIxNDYiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSIxNiIvPjxlbGxpcHNlIGN4PSIxMjkiIGN5PSIzIiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iMTUiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=avif&fit=scale&q=75&w=300&h=183 300w, https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=avif&fit=scale&q=75&w=500&h=305 500w, https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=avif&fit=scale&q=75&w=700&h=427 700w, https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=avif&fit=scale&q=75&w=900&h=549 900w, https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=avif&fit=scale&q=75&w=1100&h=671 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=webp&fit=scale&q=75&w=300&h=183 300w, https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=webp&fit=scale&q=75&w=500&h=305 500w, https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=webp&fit=scale&q=75&w=700&h=427 700w, https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=webp&fit=scale&q=75&w=900&h=549 900w, https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=webp&fit=scale&q=75&w=1100&h=671 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="610"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=jpg&fit=scale&q=75&w=300&h=183 300w, https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=jpg&fit=scale&q=75&w=500&h=305 500w, https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=jpg&fit=scale&q=75&w=700&h=427 700w, https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=jpg&fit=scale&q=75&w=900&h=549 900w, https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png?fm=jpg&fit=scale&q=75&w=1100&h=671 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6YYMFRzUI6xV4AWlkLxd8D/73a767db14013691df11e0e0e1b246f8/Screenshot_2026-03-02_at_20.12.02.png"
                alt="A minified JavaScript code snippet looking like a spinning globe."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Martin is a fairly famous code golfer and man... every time I see his work I'm blown away.</p>
<p>What's code golfing? When you're code golfing, you're trying to use the fewest possible characters. This is hard and complicated in itself already, but Martin pushed this even further.</p>
<p>Do you see this ASCII globe there? 👆 This globe is the script that renders itself. Unbelievable!</p>
<p>Here are my favorites:</p>
<ul>
<li><a href="https://aem1k.com/fire/quine/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Faem1k.com%2Ffire%2Fquine%2F')">an ASCII fire</a></li>
<li><a href="https://aem1k.com/world/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Faem1k.com%2Fworld%2F')">the mentioned ASCII world</a></li>
<li><a href="https://aem1k.com/qlock/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Faem1k.com%2Fqlock%2F')">an ASCII clock</a></li>
</ul>
<p><a class="btn btn__small" href="https://aem1k.com/">Be amazed</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til---tabs-and-newlines-are-removed-from-urls" href="#til---tabs-and-newlines-are-removed-from-urls">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til---tabs-and-newlines-are-removed-from-urls">TIL - tabs and newlines are removed from URLs</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(70,130,188); --color2: rgb(96,130,163); --color3: rgb(172,204,227); --color4: rgb(148,180,208); --color5: rgb(52,62,70);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTA1Ij48cGF0aCBmaWxsPSIjMzQzZTQ2IiBkPSJNMCAwaDMwMHYxMDVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoLTc0LjAzMTEyIC0zLjU3OTM1IDEwLjIyODEgLTIxMS41NDYwMyAxOTYuNyAyNi44KSIvPjxjaXJjbGUgY3g9IjIyNyIgY3k9IjQ2IiByPSIxMDYiIGZpbGw9IiNmZmYiLz48ZWxsaXBzZSBjeD0iMTA2IiBjeT0iODUiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSI5Ii8+PGVsbGlwc2UgY3g9IjEwMSIgY3k9IjIiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSIxMSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoNy4xOTg5MyAuMTk4OTIgLTIuNjg1NTYgOTcuMTkyMzQgNC40IDYxLjYpIi8+PGVsbGlwc2UgY3g9IjkxIiBjeT0iODYiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSIxMCIvPjxlbGxpcHNlIGN4PSIxMDEiIGN5PSIzIiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iOSIvPjxlbGxpcHNlIGN4PSI3NCIgY3k9IjQ3IiBmaWxsPSIjMDAwMDA5IiByeD0iNDkiIHJ5PSIzMCIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=avif&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=avif&fit=scale&q=75&w=500&h=176 500w, https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=avif&fit=scale&q=75&w=700&h=247 700w, https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=avif&fit=scale&q=75&w=900&h=317 900w, https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=avif&fit=scale&q=75&w=1100&h=388 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=webp&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=webp&fit=scale&q=75&w=500&h=176 500w, https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=webp&fit=scale&q=75&w=700&h=247 700w, https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=webp&fit=scale&q=75&w=900&h=317 900w, https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=webp&fit=scale&q=75&w=1100&h=388 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="353"
                srcset="https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=jpg&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=jpg&fit=scale&q=75&w=500&h=176 500w, https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=jpg&fit=scale&q=75&w=700&h=247 700w, https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=jpg&fit=scale&q=75&w=900&h=317 900w, https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png?fm=jpg&fit=scale&q=75&w=1100&h=388 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/42tY0tYkLMy2t2DYKWSxPM/386d975b15b873c0ce0c5deee2435b81/Screenshot_2026-03-03_at_19.25.13.png"
                alt="Example link including news lines and tabs and it still works because these characters are removed by the browser"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Well, did you know that browsers remove newlines and tabs from link URLs? I definitely didn't!</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/new-lines-are-removed-from-whatwg-urls/">Break things apart</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="%60sec-fetch%60-as-modern-csrf-protection" href="#%60sec-fetch%60-as-modern-csrf-protection">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="%60sec-fetch%60-as-modern-csrf-protection"><code>sec-fetch</code> as modern CSRF protection</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(111,145,225); --color2: rgb(92,116,178); --color3: rgb(124,156,251); --color4: rgb(184,187,191); --color5: rgb(50,59,79);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTExIj48cGF0aCBmaWxsPSIjMzIzYjRmIiBkPSJNMCAwaDMwMHYxMTFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxNjQiIGN5PSIyNiIgZmlsbD0iIzJiMmIxZiIgcng9IjI1NSIgcnk9IjkxIi8+PGVsbGlwc2UgY3g9Ijc5IiBjeT0iMzMiIGZpbGw9IiM4YThkOTEiIHJ4PSIxNzYiIHJ5PSIzIi8+PHBhdGggZmlsbD0iIzkxOTQ5OCIgZD0iTTE4IDUzaDIwOXY1SDE4eiIvPjxlbGxpcHNlIGN4PSIxMTAiIGN5PSI2NSIgZmlsbD0iIzhjOGU5MiIgcng9IjEzMiIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iMTIxIiBjeT0iNDQiIGZpbGw9IiM4MzhkYTAiIHJ4PSIxMTMiIHJ5PSIzIi8+PHBhdGggZmlsbD0iIzliOWVhMiIgZD0iTTEzIDE2aDk5djZIMTN6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMTUxODFjIiB0cmFuc2Zvcm09InJvdGF0ZSgyLjYgMTcgNDM1OS43KSBzY2FsZSgxMDguMzc4MjEgMjcuMjcyNDUpIi8+PGVsbGlwc2UgY3g9IjE2NCIgY3k9Ijk0IiBmaWxsPSIjMTQxNzFiIiByeD0iMTczIiByeT0iMjYiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=avif&fit=scale&q=75&w=300&h=111 300w, https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=avif&fit=scale&q=75&w=500&h=186 500w, https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=avif&fit=scale&q=75&w=700&h=261 700w, https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=avif&fit=scale&q=75&w=900&h=335 900w, https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=avif&fit=scale&q=75&w=1100&h=410 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=webp&fit=scale&q=75&w=300&h=111 300w, https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=webp&fit=scale&q=75&w=500&h=186 500w, https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=webp&fit=scale&q=75&w=700&h=261 700w, https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=webp&fit=scale&q=75&w=900&h=335 900w, https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=webp&fit=scale&q=75&w=1100&h=410 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="373"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=jpg&fit=scale&q=75&w=300&h=111 300w, https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=jpg&fit=scale&q=75&w=500&h=186 500w, https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=jpg&fit=scale&q=75&w=700&h=261 700w, https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=jpg&fit=scale&q=75&w=900&h=335 900w, https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png?fm=jpg&fit=scale&q=75&w=1100&h=410 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2DrTKbrNzVtwDkGFrdM6Hz/fd68b16e19b7a2561aba0db0d1541278/Screenshot_2026-03-03_at_20.08.48.png"
                alt="The so called &quot;modern&quot; method to protect against CSRF attacks is based on the Sec-Fetch-Site header, which all modern desktop and mobile browsers include in the requests they send to servers."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Cross-Site Request Forgery (CSRF) is an attack in which an attacker tricks a user's browser into making an unintended request to a site where they might be logged in. If someone is on <code>evil<wbr>.com</code> and the browser makes a POST request to <code>my-bank<wbr>.com</code>, it could go through because all cookies are sent with it. Not good.</p>
<p>To protect yourself, many sites implement CSRF tokens to ensure that the user is really on the site when the request is made. But there's a header that we can use since 2023: <code>sec-fetch</code>.</p>
<p><a href="https://blog.miguelgrinberg.com/post/csrf-protection-without-tokens-or-hidden-form-fields" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fblog.miguelgrinberg.com%2Fpost%2Fcsrf-protection-without-tokens-or-hidden-form-fields')">Miguel shared this discovery in December</a> and <a href="https://developer.mozilla.org/en-US/docs/Web/Security/Attacks/CSRF#defenses_against_csrf" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FSecurity%2FAttacks%2FCSRF%23defenses_against_csrf')">the MDN docs on CSRF are also quite good</a>. Enjoy and be safe!</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="does-this-demo-still-count-as-a-%60select%60%3F" href="#does-this-demo-still-count-as-a-%60select%60%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="does-this-demo-still-count-as-a-%60select%60%3F">Does this demo still count as a <code>select</code>?</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(186,71,62); --color2: rgb(106,158,85); --color3: rgb(212,96,88); --color4: rgb(175,199,195); --color5: rgb(60,116,108);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTI4Ij48cGF0aCBmaWxsPSIjM2M3NDZjIiBkPSJNMCAwaDMwMHYxMjhIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoLTI4LjUyMjUgMTIyLjg0NTE0IC0xNTYuNzk2OTggLTM2LjQwNTUzIDEyMi44IDQ3LjMpIi8+PGVsbGlwc2UgY3g9IjEzMCIgY3k9IjYzIiBmaWxsPSIjZmZmIiByeD0iMTc0IiByeT0iMTA5Ii8+PGVsbGlwc2UgY3g9IjEyNyIgY3k9IjU1IiBmaWxsPSIjMDAzMjIxIiByeD0iNjciIHJ5PSIxOCIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJyb3RhdGUoLTE3OC40IDExMi4zIDMyLjMpIHNjYWxlKDM0LjkyMzQ3IDE2Ny40NjY5KSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoLTMzLjQ0NjQxIC44NCAtNC4zODI2NiAtMTc0LjUwNDEgMzIuOSA2MS43KSIvPjxlbGxpcHNlIGN4PSIxNTEiIGN5PSIxMyIgZmlsbD0iI2ZmZiIgcng9IjI1NSIgcnk9IjI3Ii8+PGVsbGlwc2UgY3g9IjgwIiBjeT0iOTMiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSIyMiIvPjxwYXRoIGZpbGw9IiMwNzcxNjYiIGQ9Ik03MCA0MGgxMTl2MzFINzB6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=avif&fit=scale&q=75&w=300&h=129 300w, https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=avif&fit=scale&q=75&w=500&h=216 500w, https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=avif&fit=scale&q=75&w=700&h=303 700w, https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=avif&fit=scale&q=75&w=900&h=389 900w, https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=avif&fit=scale&q=75&w=1100&h=476 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=webp&fit=scale&q=75&w=300&h=129 300w, https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=webp&fit=scale&q=75&w=500&h=216 500w, https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=webp&fit=scale&q=75&w=700&h=303 700w, https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=webp&fit=scale&q=75&w=900&h=389 900w, https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=webp&fit=scale&q=75&w=1100&h=476 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="433"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=jpg&fit=scale&q=75&w=300&h=129 300w, https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=jpg&fit=scale&q=75&w=500&h=216 500w, https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=jpg&fit=scale&q=75&w=700&h=303 700w, https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=jpg&fit=scale&q=75&w=900&h=389 900w, https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png?fm=jpg&fit=scale&q=75&w=1100&h=476 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3qEqDVL7iC5tNkavBxA42k/1b3d6bb147ea56a4382d72f4bfae327e/Screenshot_2026-03-03_at_20.00.23.png"
                alt="A button labeled &quot;strawberry&quot;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I shared that <a href="https://webweekly.email/archive/web-weekly-183/#the-new-era-of-customizable-select-elements" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwebweekly.email%2Farchive%2Fweb-weekly-183%2F%23the-new-era-of-customizable-select-elements')">customizable selects are coming to the web in Web Weekly 183</a>. They're still Chromium only, though.</p>
<p>Now, Temani pushed the concept to the next level and I'll let you decide if you would call this experience a select box.</p>
<p><a class="btn btn__small" href="https://codepen.io/t_afif/pen/PwGPJOB">Pick a fruit!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="random-mdn-%E2%80%93-%60%3Aopen%60" href="#random-mdn-%E2%80%93-%60%3Aopen%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="random-mdn-%E2%80%93-%60%3Aopen%60">Random MDN – <code>:open</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(4,4,241); --color2: rgb(158,77,74); --color3: rgb(236,116,108); --color4: rgb(178,179,186); --color5: rgb(98,51,50);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY4Ij48cGF0aCBmaWxsPSIjNjIzMzMyIiBkPSJNMCAwaDMwMHYxNjhIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoNzkuMTgzNSAtMS4wMDA2MiAyLjYzNjc3IDIwOC42NTk5OSAyMjkuNiA3OC4yKSIvPjxlbGxpcHNlIGN4PSIxOSIgY3k9IjYzIiBmaWxsPSIjZmZmIiByeD0iMjgiIHJ5PSIxNDMiLz48ZWxsaXBzZSBjeD0iMjEyIiBjeT0iNzIiIGZpbGw9IiNmZmYiIHJ4PSI2MSIgcnk9IjE0MyIvPjxlbGxpcHNlIGN4PSI5NCIgY3k9IjIiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSIxNiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJyb3RhdGUoMTc3LjcgMS41IDQxLjIpIHNjYWxlKDQwLjkxNjgyIDE2OC4yMDA0NykiLz48ZWxsaXBzZSBjeD0iMTE0IiBjeT0iMTQyIiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iOCIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoNTguNTk0NTggLTIuOTY4MjcgNy4xNzM4NSAxNDEuNjEzOCAyMDkuOCA1OS43KSIvPjxjaXJjbGUgY3g9Ijk5IiBjeT0iNzYiIHI9IjU2IiBmaWxsPSIjMDAxNjE3Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=avif&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=avif&fit=scale&q=75&w=500&h=281 500w, https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=avif&fit=scale&q=75&w=700&h=394 700w, https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=avif&fit=scale&q=75&w=900&h=506 900w, https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=avif&fit=scale&q=75&w=1100&h=619 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=webp&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=webp&fit=scale&q=75&w=500&h=281 500w, https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=webp&fit=scale&q=75&w=700&h=394 700w, https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=webp&fit=scale&q=75&w=900&h=506 900w, https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=webp&fit=scale&q=75&w=1100&h=619 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="563"
                srcset="https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=jpg&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=jpg&fit=scale&q=75&w=500&h=281 500w, https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=jpg&fit=scale&q=75&w=700&h=394 700w, https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=jpg&fit=scale&q=75&w=900&h=506 900w, https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png?fm=jpg&fit=scale&q=75&w=1100&h=619 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/369i9OTPUhXVbRu1knPhcr/4f861355ce1207f640981cd254e68309/Screenshot_2026-03-03_at_19.41.03.png"
                alt="An open date input which is styled blue because the date picker is open."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Here's a little party trick: do you know that input elements with a picker like <code>select</code> or date inputs also support <code>:open</code>? You're welcome!</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:open">Style the open</a></p>
<p><em>Side note: while looking at <code>:open</code> I discovered that Safari still doesn't support it? Not even for <code>details</code> elements? I'm a bit disappointed...</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-recap-%E2%80%93-%60overflow%3A-hidden%60-is-still-scrollable" href="#til-recap-%E2%80%93-%60overflow%3A-hidden%60-is-still-scrollable">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-recap-%E2%80%93-%60overflow%3A-hidden%60-is-still-scrollable">TIL recap – <code>overflow: hidden</code> is still scrollable</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(207,153,99); --color2: rgb(164,124,92); --color3: rgb(223.8,188.7,153.6); --color4: rgb(170,177,186); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTIxIj48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxMjFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyNyIgY3k9IjU1IiByPSIxNDIiIGZpbGw9IiMwMzAwMDkiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMzOTNhNDAiIHRyYW5zZm9ybT0ibWF0cml4KDQwLjIzNjIzIDYuNDg0OTcgLTIuNDk5MDggMTUuNTA1NjIgNjcuNyA0Ny45KSIvPjxwYXRoIGZpbGw9IiM0MjQ5NTQiIGQ9Ik00MSA0M2gxODJ2NUg0MXoiLz48cGF0aCBmaWxsPSIjNmE2MzYyIiBkPSJNMzggNTRoNjR2NEgzOHoiLz48ZWxsaXBzZSBjeD0iMTEyIiBjeT0iOTUiIGZpbGw9IiMwNjEwMjciIHJ4PSIyNTUiIHJ5PSIxMCIvPjxwYXRoIGZpbGw9IiM4ODY3NDkiIGQ9Ik0zMiAzNGgyOHYzSDMyeiIvPjxlbGxpcHNlIGN4PSIxNTUiIGZpbGw9IiMwODEyMjkiIHJ4PSIyNTUiIHJ5PSIxNCIvPjxwYXRoIGZpbGw9IiMxNTFjMmIiIGQ9Ik02OS43IDU5LjEgMTAwIDc4LjcgNjAgMzAuNWwyMS44IDQ3LjN6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=avif&fit=scale&q=75&w=300&h=121 300w, https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=avif&fit=scale&q=75&w=500&h=203 500w, https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=avif&fit=scale&q=75&w=700&h=284 700w, https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=avif&fit=scale&q=75&w=900&h=365 900w, https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=avif&fit=scale&q=75&w=1100&h=447 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=webp&fit=scale&q=75&w=300&h=121 300w, https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=webp&fit=scale&q=75&w=500&h=203 500w, https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=webp&fit=scale&q=75&w=700&h=284 700w, https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=webp&fit=scale&q=75&w=900&h=365 900w, https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=webp&fit=scale&q=75&w=1100&h=447 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="406"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=jpg&fit=scale&q=75&w=300&h=121 300w, https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=jpg&fit=scale&q=75&w=500&h=203 500w, https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=jpg&fit=scale&q=75&w=700&h=284 700w, https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=jpg&fit=scale&q=75&w=900&h=365 900w, https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png?fm=jpg&fit=scale&q=75&w=1100&h=447 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6q91FDzkaXg4WbdXS9GvkA/c8412b32e82c2be880d84d4ea0fbbc73/Screenshot_2026-03-02_at_19.58.21.png"
                alt=".hidden {   overflow: hidden; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Do you know that elements with <code>overflow: hidden</code> set can still be scrolled? If you don't, check out the blog to learn which property prevents scrolling.</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/elements-with-overflow-hidden-are-scrollable/">Clip it!</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-on-the-baseline%3A-%60rcap%60%2C-%60rch%60%2C-%60rex%60-and-%60ric%60" href="#new-on-the-baseline%3A-%60rcap%60%2C-%60rch%60%2C-%60rex%60-and-%60ric%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-on-the-baseline%3A-%60rcap%60%2C-%60rch%60%2C-%60rex%60-and-%60ric%60">New on the baseline: <code>rcap</code>, <code>rch</code>, <code>rex</code> and <code>ric</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(82.0890410958904,172.9109589041096,96.06164383561644); --color2: rgb(114,149,123); --color3: rgb(165.086301369863,212.313698630137,172.35205479452057); --color4: rgb(180,196,180); --color5: rgb(51,66,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTg5Ij48cGF0aCBmaWxsPSIjMzM0MjUzIiBkPSJNMCAwaDMwMHYxODlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMjkiIGN5PSI4MCIgZmlsbD0iI2ZmZiIgcng9IjI1NSIgcnk9IjY2Ii8+PGVsbGlwc2UgY3g9IjEyNyIgY3k9IjgxIiBmaWxsPSIjZmZmIiByeD0iMTE0IiByeT0iNjYiLz48ZWxsaXBzZSBjeD0iNiIgY3k9Ijk0IiByeD0iMTEiIHJ5PSIxNjEiLz48ZWxsaXBzZSBjeD0iMjQ4IiBjeT0iODAiIHJ4PSI5IiByeT0iMTYxIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InJvdGF0ZSgxMjEuMyAuMyA2NS43KSBzY2FsZSg1MS4zMDk5MiAzNS4yNTUzKSIvPjxjaXJjbGUgY3g9IjE0NiIgY3k9IjgxIiByPSI2NSIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoLTMuNjY2MTQgMjMuMzIyMDQgLTQ5LjkyODMzIC03Ljg0ODU2IDY0LjggMzkuOCkiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KC01LjI2Nzk3IC00MS44MDM2OSAyOS4xMjk1OCAtMy42NzA4MiAyMTEuOCAxMDcpIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=avif&fit=scale&q=75&w=300&h=189 300w, https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=avif&fit=scale&q=75&w=500&h=316 500w, https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=avif&fit=scale&q=75&w=700&h=443 700w, https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=avif&fit=scale&q=75&w=900&h=569 900w, https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=avif&fit=scale&q=75&w=1100&h=696 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=webp&fit=scale&q=75&w=300&h=189 300w, https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=webp&fit=scale&q=75&w=500&h=316 500w, https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=webp&fit=scale&q=75&w=700&h=443 700w, https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=webp&fit=scale&q=75&w=900&h=569 900w, https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=webp&fit=scale&q=75&w=1100&h=696 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="633"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=jpg&fit=scale&q=75&w=300&h=189 300w, https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=jpg&fit=scale&q=75&w=500&h=316 500w, https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=jpg&fit=scale&q=75&w=700&h=443 700w, https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=jpg&fit=scale&q=75&w=900&h=569 900w, https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png?fm=jpg&fit=scale&q=75&w=1100&h=696 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2XjLZ4JsOWU73dXAC3CWTO/064b0872c5e6335e08170be5365b9143/Screenshot_2026-03-03_at_19.51.27.png"
                alt="Browser support table for rcap, rch, rem, rex, and ric"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Firefox started to support the relative <code>&lt;length&gt;</code> CSS values: <code>rcap</code>, <code>rch</code>, <code>rex</code> and <code>ric</code>.</p>
<p>Granted, these units are a bit niche, because how often do you need to style something based on the width of the glyph <code>0</code> (<code>rch</code>)? But it's still good to know they exist.</p>
<p>And <code>cap</code> isn't actually that exotic: here's <a href="https://ishadeed.com/article/css-cap-unit/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fishadeed.com%2Farticle%2Fcss-cap-unit%2F')">how the <code>cap</code> unit can help with vertical alignment</a>.</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length#browser_compatibility">Use the fancy relatives</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="classifieds-%26-friends" href="#classifieds-%26-friends">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="classifieds-%26-friends">Classifieds &amp; friends</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(208.88297872340425,105.79787234042554,46.11702127659574); --color2: rgb(156,128,108); --color3: rgb(231.0191489361702,177.41489361702128,146.3808510638298); --color4: rgb(191,181,175); --color5: rgb(77,54,39);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgODMiPjxwYXRoIGZpbGw9IiM0ZDM2MjciIGQ9Ik0wIDBoMzAwdjgzSDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48ZWxsaXBzZSBjeD0iMTgxIiBjeT0iNDQiIGZpbGw9IiNiZmI5YmMiIHJ4PSIyMjMiIHJ5PSI2Ii8+PGNpcmNsZSByPSIxIiB0cmFuc2Zvcm09Im1hdHJpeCguNzQyODYgMTMuMjg3MDQgLTEyNC4yMDAxMyA2Ljk0Mzg3IDc2LjIgNi42KSIvPjxwYXRoIGZpbGw9IiNlMWQ5ZDkiIGQ9Ik03OCAxN2gxMTN2MTFINzh6Ii8+PHBhdGggZmlsbD0iIzA4MDAwMCIgZD0ibTIzOC4zLjYgMzEtMS4xIDIuNCA3MC0zMSAxeiIvPjxjaXJjbGUgcj0iMSIgdHJhbnNmb3JtPSJtYXRyaXgoMTAuNTc5IDIzLjQzOTkgLTcxLjczOTA0IDMyLjM3NzYgMjUgMTMuNSkiLz48ZWxsaXBzZSBjeD0iMTU2IiBjeT0iNjciIGZpbGw9IiMyYTA3MDAiIHJ4PSIyMzYiIHJ5PSIxNyIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im03MSAyNy0zLTE0aDZ6Ii8+PHBhdGggZmlsbD0iI2FkYTZhMiIgZD0iTTE2LjMgMzYuOCAxNC42IDUybDMyLjgtMi41IDIuMy0xMC4yeiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=avif&fit=scale&q=75&w=300&h=84 300w, https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=avif&fit=scale&q=75&w=500&h=140 500w, https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=avif&fit=scale&q=75&w=700&h=196 700w, https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=avif&fit=scale&q=75&w=900&h=252 900w, https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=avif&fit=scale&q=75&w=1100&h=308 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=webp&fit=scale&q=75&w=300&h=84 300w, https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=webp&fit=scale&q=75&w=500&h=140 500w, https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=webp&fit=scale&q=75&w=700&h=196 700w, https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=webp&fit=scale&q=75&w=900&h=252 900w, https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=webp&fit=scale&q=75&w=1100&h=308 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="280"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=jpg&fit=scale&q=75&w=300&h=84 300w, https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=jpg&fit=scale&q=75&w=500&h=140 500w, https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=jpg&fit=scale&q=75&w=700&h=196 700w, https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=jpg&fit=scale&q=75&w=900&h=252 900w, https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png?fm=jpg&fit=scale&q=75&w=1100&h=308 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1al5EYYOQ4mXvr6g3wk27F/430f9887a70d8315a3131059f725907e/Screenshot_2026-03-03_at_20.34.32.png"
                alt="The latest in Fullstack engineering"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you're based in the Netherlands and would like to go to <a href="https://jsnation.com/?utm_source=partner&amp;utm_medium=webweekly" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fjsnation.com%2F%3Futm_source%3Dpartner%26utm_medium%3Dwebweekly')">the JS Nation conference</a> (June 11 &amp; June 15), I've got one ticket to give away for free! <a href="mailto:stefan@webweekly.email?subject=Re:raffle">Hit reply</a> and let me know! And even if you don't win, Web Weekly readers get 10% off with the code <code>WEBWEEKLY</code>. 🎉</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="three-valuable-projects-to-have-a-look-at" href="#three-valuable-projects-to-have-a-look-at">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="three-valuable-projects-to-have-a-look-at">Three valuable projects to have a look at</h2></div><ul>
<li><a href="https://github.com/thisiskps/fetch-network-simulator" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fthisiskps%2Ffetch-network-simulator')">thisiskps/fetch-network-simulator</a> – A request/response network behavior simulator for frontend applications.</li>
<li><a href="https://github.com/dlvhdr/diffnav" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fdlvhdr%2Fdiffnav')">dlvhdr/diffnav</a> – A git diff pager with a file tree, à la GitHub.</li>
<li><a href="https://github.com/edge-js/edge" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fedge-js%2Fedge')">edge-js/edge</a> – Node.js template engine with a breath of fresh air.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-tiny-helper" href="#a-new-tiny-helper">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-tiny-helper">A new Tiny Helper</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(13,203,108); --color2: rgb(121,126,124); --color3: rgb(143,232,187); --color4: rgb(186,189,188); --color5: rgb(27,43,34);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQwIj48cGF0aCBmaWxsPSIjMWIyYjIyIiBkPSJNMCAwaDMwMHYxNDBIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyNCIgY3k9IjQ1IiByPSIxNTIiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0icm90YXRlKDc4LjcgMzkuOSA4MSkgc2NhbGUoNjIuMDczODggMjU1KSIvPjxjaXJjbGUgcj0iMSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE3Ni40IDc5LjMgNDQuNykgc2NhbGUoNjYuODI0OTkgMjAuNTc5OTMpIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09Im1hdHJpeCgxLjU5MzQ1IDQ1LjE0Mjg4IC0yNTMuMjUgOC45MzkyIDE5Ny44IDI5KSIvPjxjaXJjbGUgY3g9IjMwIiBjeT0iOTUiIHI9IjY1IiBmaWxsPSIjZmZmIi8+PGVsbGlwc2UgY3g9IjI0OCIgY3k9IjkzIiBmaWxsPSIjZmZmIiByeD0iMjkiIHJ5PSIxMTkiLz48Y2lyY2xlIHI9IjEiIHRyYW5zZm9ybT0ibWF0cml4KC02Ni40OTA0NiAxMy40MDY4MyAtMy4yODY1OCAtMTYuMjk5NjMgMTU4IDk0LjIpIi8+PHBhdGggZD0iTTEwMCA3NmgxMTl2MzlIMTAweiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=avif&fit=scale&q=75&w=300&h=141 300w, https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=avif&fit=scale&q=75&w=500&h=235 500w, https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=avif&fit=scale&q=75&w=700&h=329 700w, https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=avif&fit=scale&q=75&w=900&h=423 900w, https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=avif&fit=scale&q=75&w=1100&h=517 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=webp&fit=scale&q=75&w=300&h=141 300w, https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=webp&fit=scale&q=75&w=500&h=235 500w, https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=webp&fit=scale&q=75&w=700&h=329 700w, https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=webp&fit=scale&q=75&w=900&h=423 900w, https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=webp&fit=scale&q=75&w=1100&h=517 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="470"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=jpg&fit=scale&q=75&w=300&h=141 300w, https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=jpg&fit=scale&q=75&w=500&h=235 500w, https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=jpg&fit=scale&q=75&w=700&h=329 700w, https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=jpg&fit=scale&q=75&w=900&h=423 900w, https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png?fm=jpg&fit=scale&q=75&w=1100&h=517 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6C5filE2yunF0MgkHSWepU/c56015bae7ae3d40f20bfa692983f156/Screenshot_2026-03-02_at_20.03.25.png"
                alt="Graph from CruxViz showing overall green Core Web Vitals"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>CruxVis isn't a new tool, but I'm sure some of you haven't seen it.</p>
<p>If you want to check a site's Core Web Vitals coming from real users via <a href="https://developer.chrome.com/docs/crux" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.chrome.com%2Fdocs%2Fcrux')">Crux</a>, the site offers quick-to-use graphs and visualizations.</p>
<p><a class="btn btn__small" href="https://cruxvis.withgoogle.com/">Check your Vitals</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more single-purpose online tools on <a href="https://tiny-helpers.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ftiny-helpers.dev%2F')">tiny-helpers.dev</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="thought-of-the-week" href="#thought-of-the-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="thought-of-the-week">Thought of the week</h2></div><p>One might think <a href="https://idiallo.com/blog/chatbots-only-exist-because-the-ui-sucks" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fidiallo.com%2Fblog%2Fchatbots-only-exist-because-the-ui-sucks')">Ibrahim has a point here</a>. 🫣</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <blockquote>
<p>When a customer reaches for your chatbot, it's not because they think chatbots are cool. It's because you've failed them.</p>
</blockquote>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="did-you-learn-something-from-this-issue%3F" href="#did-you-learn-something-from-this-issue%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="did-you-learn-something-from-this-issue%3F">Did you learn something from this issue?</h2></div><p>If so, <strong>join 37 other Web Weekly supporters</strong> and earn a huge bag of karma points by supporting Web Weekly via <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>. ❤️</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="this-is-all%2C-friends!" href="#this-is-all%2C-friends!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="this-is-all%2C-friends!">This is all, friends!</h2></div><p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr aria-hidden="true"><p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Web Weekly #185">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>New lines are removed from WHATWG URLs (#tilPost)</title>
      <link href="https://www.stefanjudis.com/today-i-learned/new-lines-are-removed-from-whatwg-urls/"/>
      <published>2026-03-02T23:00:00+00:00</published>
      <updated>2026-03-02T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/today-i-learned/new-lines-are-removed-from-whatwg-urls/</id>
      <category term="tilPost"></category>
        <category term="HTML"></category>
      
        <category term="JavaScript"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>Today I learned something groundbreaking about URLs!</p>
<p>You know that when you're templating HTML and you're dealing with attribute values, it might make sense to break things into pieces. I like to have one attribute per line and sometimes even break the attribute values into multiple lines.</p>
<p>Long URLs are always tricky, because you can't break these apart...</p>
<pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>a</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>something something_else 
          something_very_long something_even_longer<span class="token punctuation">"</span></span>
   <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://www.example-blog-about-everything-under-the-sun.com/2026/03/03/the-ultimate-comprehensive-and-absolutely-definitive-guide-to-understanding-why-your-css-layout-breaks-at-3am-when-you-least-expect-it-and-how-to-fix-it-once-and-for-all-without-losing-your-sanity-or-your-will-to-live-as-a-frontend-developer-in-the-modern-web-ecosystem-featuring-flexbox-grid-and-container-queries<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
  Long link
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>a</span><span class="token punctuation">></span></span>
</code></pre>
<p>Or can you?</p>
<p><a href="https://lemire.me/blog/2026/02/28/you-can-use-newline-characters-in-urls/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Flemire.me%2Fblog%2F2026%2F02%2F28%2Fyou-can-use-newline-characters-in-urls%2F')">Daniel shared that line breaks and tabs will actually be removed from URLs</a>. Excuse me?!</p>
<p>Here's <a href="https://url.spec.whatwg.org/#url-parsing" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Furl.spec.whatwg.org%2F%23url-parsing')">the URL parsing WHATWG spec</a>:</p>
<blockquote>
<ol start="2">
<li>If input contains any ASCII tab or newline, invalid-URL-unit validation error.</li>
<li>Remove all ASCII tab or newline from input.</li>
</ol>
</blockquote>
<p>So, browsers discover newlines or tabs in URLs, recognize them as &quot;invalid-URL-unit&quot; errors, and then remove the invalid characters to get the job done. Nice job, browsers — I love it!</p>
<p>Here's a rendred link including a URL with tabs and newlines for you to inspect.</p>
<p>[Interactive component: visit the article to see it...]</p>
<p>Tabs and newslines are removed and things just work and because we're looking at the WHATWG spec in action here, the characters will be remove in JavaScript, too!</p>
<pre class="language-javascript"><code class="language-javascript"><span class="token keyword">const</span> urlWithTabsAndNewlines <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">https://www.	
stefanjudis.
com</span><span class="token template-punctuation string">`</span></span><span class="token punctuation">;</span>

<span class="token keyword">const</span> normalizedUrl <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">URL</span><span class="token punctuation">(</span>urlWithTabsAndNewlines<span class="token punctuation">)</span><span class="token punctuation">;</span>
console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>
  normalizedUrl<span class="token punctuation">.</span>href <span class="token operator">===</span> urlWithTabsAndNewlines
<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// false</span>
</code></pre>
<p>That's pretty wild, isn't it?</p>
<p><a href="https://lemire.me/blog/2026/02/28/you-can-use-newline-characters-in-urls/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Flemire.me%2Fblog%2F2026%2F02%2F28%2Fyou-can-use-newline-characters-in-urls%2F')">Check Daniel's post if you want to learn more</a>!</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20New lines are removed from WHATWG URLs">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Nobody owes you anything (#blogPost)</title>
      <link href="https://www.stefanjudis.com/blog/nobody-owes-you-anything/"/>
      <published>2026-02-23T23:00:00+00:00</published>
      <updated>2026-02-23T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/blog/nobody-owes-you-anything/</id>
      <category term="blogPost"></category>
        <category term="Shower thoughts"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p><em>If you follow this blog for a while, you might know that I focus on tech topics and try to be very rational and neutral in my writing. I usually am too afraid of &quot;pissing off&quot;. Maybe, it's the current state of the world or that I'm just getting older, but certain things just get to me and I want to establish writing as a healthy coping mechanism.</em></p>
<p>So! I've just read a post about Anthropic's recent pricing changes. For context, you can't use the Claude flat rate for the Anthropic API anymore. If you want to use the simple (and reasonably cheap) Claude Code pricing you must use Anthropic's products and can't use other agents/products/tools with the one-fits-all offer.</p>
<p>Anthropic is now enforcing and limiting people to use their products as intended. Outrageous, right?</p>
<p>I won't link to the post, but the author is very upset about this change. However, there are things that stand out.</p>
<blockquote>
<p>And have you even seen Dario speak with reporters?
Like, he doesn't make eye contact, and he talks really fast.
I don't know. I just don't like him.
It's an absolute disgrace.</p>
</blockquote>
<p>The author mocks Anthropic's CEO for how he looks and speaks. Honestly, you can think of AI and the new world whatever you wish, and I'm also not aligned with all the content theft, ethical problems and the overall economic shift. Frankly, I'm beyond scared about the future. But blogging about not liking how someone speaks or looks is just a very low low. I get that the author is furious and frustrated, but sitting down to write a blog post explaining how and why you don't like how a person looks tells more about you than the person in question.</p>
<p>The following paragraph triggered me to write this post.</p>
<blockquote>
<p>I want Anthropic's product at other companies' prices, and I want to be able to use it how I want to use it.
Anthropic owes me that.</p>
</blockquote>
<p>That's a lot of demands and I really don't understand how people can feel like a company owes them something...</p>
<p>I've been watching this privileged tech community entitlement for a while and it has always been rubbing me the wrong way. Regardless if it's about <a href="https://github.com/tailwindlabs/tailwindcss.com/pull/2388" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Ftailwindlabs%2Ftailwindcss.com%2Fpull%2F2388')">Tailwind</a>, Anthropic or any other free or paid project. Things are simple: <strong>nobody owes you anything</strong>.</p>
<p>Let me give a few examples:</p>
<p><strong>If you use free software, nobody owes you a new feature or &quot;critical&quot; bugfix.</strong> You can't get a free sandwich and then make demands. Surely you can provide feedback, but no one is obliged to act on it. It's a free sandwich after all.</p>
<p><strong>If you take the time to open a PR in a GitHub repo, nobody owes you a review.</strong> Life's busy. Maintainers burn out. If your PR is stale you can easily fork the project, republish (if the licence permits it) or use something else. That's what open source is about.</p>
<p><strong>If you tag or reply to someone on social media, nobody owes you a reply.</strong> Especially, if you don't know each other, why would someone owe an internet stranger mental capacity?</p>
<p><strong>If a company offers a free tier, nobody owes you keeping it free.</strong> Building products is hard. Maintaining products is even harder. People need to make a living. Of course, this situation sucks if you relied on something being free, but again, nobody owes you anything. Especially, if it's free.</p>
<p><strong>If a company requires you to follow their terms of service, the company doesn't owe you anything.</strong> You pay for a service. If the service doesn't meet your expectations, use something else. Nobody forces you to use a paid product.</p>
<p>I totally understand that all these scenarios suck on very different scales. Sometimes things aren't black and white, either, and everybody has the right to be angry about anything.</p>
<p>But in a world where nothing is guaranteed anymore, why do people think they're owed something? I just don't get it.</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Nobody owes you anything">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Web Weekly #184 (#blogPost)</title>
      <link href="https://www.stefanjudis.com/blog/web-weekly-184/"/>
      <published>2026-02-23T23:00:00+00:00</published>
      <updated>2026-02-23T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/blog/web-weekly-184/</id>
      <category term="blogPost"></category>
        <category term="Newsletter"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="guten-tag!-guten-tag!-%F0%9F%91%8B" href="#guten-tag!-guten-tag!-%F0%9F%91%8B">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="guten-tag!-guten-tag!-%F0%9F%91%8B">Guten Tag! Guten Tag! 👋</h2></div><p>Have you ever struggled with lazy loading videos? Or have you used CSS <code>zoom</code> before? And do you know what <code>Map<wbr>.getOrInsertComputed</code> does?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <p><a href="https://x.com/andrecasaldev" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fx.com%2Fandrecasaldev')">André</a> listens to <a href="https://www.youtube.com/watch?v=u2ah9tWTkmk" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Du2ah9tWTkmk')">&quot;Ordinary&quot; by Alex Warren</a> and says:</p>
<blockquote>
<p>This is genuinely one of the most beautiful songs I've ever listened to. It landed instantly on my short-list playlist of personal 'masterpieces' — the kind of songs that feel timeless to me, alongside classics like 'The Sound of Silence'. It's emotionally honest, restrained, and quietly powerful in a way that really stays with you.</p>
</blockquote>
</div><p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>seven more songs</strong> left in the queue.</p>
<hr aria-hidden="true"><p>This Web Weekly turned out very beefy already, so I'll keep the intro short. I discovered <a href="https://modern-css.com/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fmodern-css.com%2F')">modern.css</a> and it's outstanding.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(235,148,84); --color2: rgb(108,100,164); --color3: rgb(234,138,114); --color4: rgb(182,182,187); --color5: rgb(84,55,42);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTI3Ij48cGF0aCBmaWxsPSIjNTQzNzJhIiBkPSJNMCAwaDMwMHYxMjdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0NyIgY3k9IjIzIiByPSIxNzkiIGZpbGw9IiMwMDBmMmEiLz48ZWxsaXBzZSBjeD0iMTMwIiBjeT0iNTciIGZpbGw9IiNlMmU4ZTciIHJ4PSIxMTQiIHJ5PSI4Ii8+PHBhdGggZmlsbD0iI2QwNjk5OSIgZD0iTTUyIDc2aDE0NnYxOEg1MnoiLz48cGF0aCBkPSJtMjcwIDQ2LTM3LTYyTDUgMzZ6Ii8+PHBhdGggZmlsbD0iI2M3Y2JjYyIgZD0ibTIxMy4xIDU5LjYtMzYuOS0xNC44LTUuOC4xIDY3LjQuOHoiLz48cGF0aCBmaWxsPSIjZGRlMGUxIiBkPSJNMjcgNDdoMjF2MThIMjd6Ii8+PGVsbGlwc2UgY3g9IjExIiBjeT0iNDAiIHJ4PSIxNSIgcnk9IjEwOCIvPjxjaXJjbGUgcj0iMSIgdHJhbnNmb3JtPSJtYXRyaXgoNTkuNDAwNyAtNjAuNDQ2NTggMjQuMjkxNiAyMy44NzEyOCAyNTQuNyA4My44KSIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=avif&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=avif&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=avif&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=avif&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=avif&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=webp&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=webp&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=webp&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=webp&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=webp&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="426"
                srcset="https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=jpg&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=jpg&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=jpg&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=jpg&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png?fm=jpg&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/9X2t4qpgE3X5eeU8Sc5CS/beeb1146d391df6247a6e9bff648e025/Screenshot_2026-02-24_at_19.05.28.png"
                alt="Stop writing CSS like it&apos;s 2015"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>The site lists old practices next to their modern counterparts. I'm sure you'll learn some new tricks by simply browsing around. Highly recommended!</p>
<hr aria-hidden="true"><p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mfmrwg7pxc2j">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116127000268445928" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffront-end.social%2F%40stefan%2F116127000268445928')">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_the-new-web-weekly-is-just-about-to-hit-all-activity-7432128332948946944-Tk3a" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.linkedin.com%2Fposts%2Fstefan-judis_the-new-web-weekly-is-just-about-to-hit-all-activity-7432128332948946944-Tk3a')">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="no-code" href="#no-code">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="no-code">No code</h2></div><ul>
<li><a href="https://www.seangoedecke.com/screwing-up/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.seangoedecke.com%2Fscrewing-up%2F')">On screwing up</a> → &quot;Managers will forgive mistakes, but they won't forgive being made to look like a fool&quot;.</li>
<li><a href="https://addyo.substack.com/p/14-more-lessons-from-14-years-at" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Faddyo.substack.com%2Fp%2F14-more-lessons-from-14-years-at')">14 More lessons from 14 years at Google</a> → &quot;Most meetings fail not because they're unnecessary, but because they're disguised journaling&quot;.</li>
<li><a href="https://candost.blog/the-unbearable-joy-of-sitting-alone-in-a-cafe/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcandost.blog%2Fthe-unbearable-joy-of-sitting-alone-in-a-cafe%2F')">The Unbearable Joy of Sitting Alone in a Café</a> → &quot;When you let your thoughts wander, they take you on a journey you'll never think possible&quot;.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-on-the-blog" href="#new-on-the-blog">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-on-the-blog">New on the blog</h2></div><ul>
<li><a href="https://www.stefanjudis.com/notes/notes-on-relying-on-the-aria-authoring-practices-guide/">Notes on relying on the ARIA Authoring Practices Guide</a></li>
<li><a href="https://www.stefanjudis.com/blog/nobody-owes-you-anything/">Nobody owes you anything</a></li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="web-weekly-housekeeping" href="#web-weekly-housekeeping">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="web-weekly-housekeeping">Web Weekly Housekeeping</h2></div><p>Since <a href="https://webweekly.email/archive/web-weekly-182/#web-weekly-housekeeping" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwebweekly.email%2Farchive%2Fweb-weekly-182%2F%23web-weekly-housekeeping')">I doxed my inbox two weeks ago</a> asking for more replies, I've been having many nice email conversations. And because I enjoy this, let's keep the housekeeping going for a bit longer.</p>
<p>Question this week: many people told me that Web Weekly is a bit too long at times. I can totally relate to this. And frankly, writing Web Weekly is a ton of work.</p>
<p>So, what would you cut? I'm torn because I actually like it as is. Reply and let me know!</p>
<p>Oh and a quick reminder: Web Weekly is open for sponsorships. If you want to reach 6.5k developers, <a href="https://webweekly.email/advertise/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwebweekly.email%2Fadvertise%2F')">you know what to do</a>!</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="an-in-depth-guide-to-customizing-list-styles" href="#an-in-depth-guide-to-customizing-list-styles">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="an-in-depth-guide-to-customizing-list-styles">An in-depth guide to customizing list styles</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(199,153,107); --color2: rgb(151,96,94); --color3: rgb(182,120,213); --color4: rgb(172,180,188); --color5: rgb(52,65,82);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY3Ij48cGF0aCBmaWxsPSIjMzQ0MTUyIiBkPSJNMCAwaDMwMHYxNjdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9Ijk1IiBjeT0iNjEiIHI9IjIwNSIgZmlsbD0iIzAwMDAwZCIvPjxwYXRoIGZpbGw9IiMzYzNhNDciIGQ9Ik02NSAzNWgxMDl2NjBINjV6Ii8+PGVsbGlwc2UgY3g9IjE2MyIgY3k9IjEzNSIgZmlsbD0iIzAxMGMyMyIgcng9IjI1NSIgcnk9IjEwIi8+PHBhdGggZmlsbD0iIzZjNDE3MSIgZD0ibTQ5LjcgNDIuNiAxNTUuOS00LjctMTQ3LjItMS4zLTUuNSA4eiIvPjxlbGxpcHNlIGN4PSIxMTAiIGN5PSI2NSIgZmlsbD0iIzVhNjM3MCIgcng9IjU1IiByeT0iMyIvPjxlbGxpcHNlIGN4PSI5NiIgY3k9IjkxIiBmaWxsPSIjNjU2NzZkIiByeD0iMzYiIHJ5PSIzIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMWEyMDJjIiB0cmFuc2Zvcm09Im1hdHJpeCgtNTkuMjUwNjQgLTEzLjI0NDA5IDUuMzk1NCAtMjQuMTM3NjcgMTYzIDY4KSIvPjxlbGxpcHNlIGN4PSIxNDYiIGN5PSI1IiBmaWxsPSIjMDMwZTI2IiByeD0iMjU0IiByeT0iMTIiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=avif&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=avif&fit=scale&q=75&w=500&h=280 500w, https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=avif&fit=scale&q=75&w=700&h=392 700w, https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=avif&fit=scale&q=75&w=900&h=504 900w, https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=avif&fit=scale&q=75&w=1100&h=616 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=webp&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=webp&fit=scale&q=75&w=500&h=280 500w, https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=webp&fit=scale&q=75&w=700&h=392 700w, https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=webp&fit=scale&q=75&w=900&h=504 900w, https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=webp&fit=scale&q=75&w=1100&h=616 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="560"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=jpg&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=jpg&fit=scale&q=75&w=500&h=280 500w, https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=jpg&fit=scale&q=75&w=700&h=392 700w, https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=jpg&fit=scale&q=75&w=900&h=504 900w, https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png?fm=jpg&fit=scale&q=75&w=1100&h=616 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2tVM2j3Bwkxf2aKzhOwsul/1b8cc620c2556a4daf831bfdb223799a/Screenshot_2026-02-21_at_10.45.44.png"
                alt="@counter-style --fleurons {   system: cyclic;   symbols: ❦ ✾ ✤ ❈ ✺ ❥;   suffix: &quot;&quot;;   speak-as: bullets; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you want to spice up your list styling going beyond some bullets or numbers, Richard dropped a massive article explaining <code>::marker</code>, <code>@counter-style</code> and <code>symbols()</code>. My highlight: I had forgotten that <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/list-style-position" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FProperties%2Flist-style-position')"><code>list-style-position</code></a> is a thing...</p>
<p><a class="btn btn__small" href="https://piccalil.li/blog/an-in-depth-guide-to-customising-lists-with-css/">List with style</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-%E2%80%94-css-%60zoom%60" href="#til-%E2%80%94-css-%60zoom%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-%E2%80%94-css-%60zoom%60">TIL — CSS <code>zoom</code></h2></div><p><img src="https://images.ctfassets.net/f20lfrunubsq/76OUpn1wPcJQdvN7A5ZA5B/d72600a220746c4d999502f5e61ad8a9/zoom.gif" alt="Example showing how `zoom` affects a component&apos;s layout." loading="lazy" /></p>
<p>I've seen the <code>zoom</code> property before but I didn't realize that it can actually be pretty dang useful. If you want to learn more about the difference between <code>zoom</code> and <code>scale</code>, check out this demo on the blog.</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/css-zoom-to-scale-elements/">Zoom!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-web-breaks-free-from-rectangles" href="#the-web-breaks-free-from-rectangles">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-web-breaks-free-from-rectangles">The web breaks free from rectangles</h2></div><p><img src="https://images.ctfassets.net/f20lfrunubsq/6wqueFjWzyg6wXdvEX6F8t/ba14534a1990d1a779e2110e297130bc/border-shape.gif" alt="Example showing elements that don&apos;t have a rectangular outline when being focused." loading="lazy" /></p>
<p>If you had told me that one day I'd be excited about a property called <code>border-shape</code>, I wouldn't have believed you. And yet, here we are. Una shared the new CSS property coming to Chrome that allows you to actually &quot;shape&quot; elements.</p>
<blockquote>
<p>Unlike <code>clip-path</code>, which simply masks an element, <code>border-shape</code> actually redefines the &quot;box&quot; itself. When you apply a shape to a border, the background, the border-image, focus outline, and the box-shadow all follow that new geometry.</p>
</blockquote>
<p><a class="btn btn__small" href="https://una.im/border-shape/">Shape the web</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="safer-js-error-checking" href="#safer-js-error-checking">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="safer-js-error-checking">Safer JS error checking</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(113,169,229); --color2: rgb(88,119,163); --color3: rgb(219,195,132); --color4: rgb(164,132,193); --color5: rgb(51,66,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTI3Ij48cGF0aCBmaWxsPSIjMzM0MjUzIiBkPSJNMCAwaDMwMHYxMjdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE2MiIgY3k9IjQxIiByPSIxODIiIGZpbGw9IiMwMzAwMGYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMzODNhNDEiIHRyYW5zZm9ybT0ibWF0cml4KC03Ny44OTI5MSAwIDAgLTI1LjgwMTQ2IDk1IDU0LjQpIi8+PHBhdGggZmlsbD0iIzYzNmM3NCIgZD0iTTI1IDMzaDE2NXY0SDI1eiIvPjxlbGxpcHNlIGN4PSIxMzIiIGN5PSI2NCIgZmlsbD0iIzYzNWY1YSIgcng9IjEwOSIgcnk9IjMiLz48cGF0aCBmaWxsPSIjNmM2YTZmIiBkPSJNMjEgNDNoMTM3djRIMjF6Ii8+PGVsbGlwc2UgY3g9IjgiIGN5PSI1NSIgZmlsbD0iIzBlMTYyNSIgcng9IjI0OSIgcnk9IjgiLz48ZWxsaXBzZSBjeD0iMTI0IiBjeT0iMTA0IiBmaWxsPSIjMDEwZDI0IiByeD0iMjU1IiByeT0iMTAiLz48ZWxsaXBzZSBjeD0iMTE1IiBjeT0iNSIgZmlsbD0iIzAzMGUyNSIgcng9IjI1NCIgcnk9IjkiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=avif&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=avif&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=avif&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=avif&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=avif&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=webp&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=webp&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=webp&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=webp&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=webp&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="426"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=jpg&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=jpg&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=jpg&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=jpg&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png?fm=jpg&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4L1HK3Fx9tLxySpRRAvnov/a1886b0dd44af865438519c1782f4d49/Screenshot_2026-02-24_at_05.50.30.png"
                alt="const iframe = document.createElement(&apos;iframe&apos;); document.body.appendChild(iframe);  const err = new iframe.contentWindow.Error(&apos;Oops!&apos;); err instanceof Error; // false"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Short and sweet: Matt explains why <code>Error<wbr>.isError</code> is the way to go for error checking.</p>
<p><a class="btn btn__small" href="https://allthingssmitty.com/2026/02/23/from-instanceof-to-error-iserror-safer-error-checking-in-javascript/">Check the error</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-wonderful-weird-web-%E2%80%93-kaomoji-cool-club" href="#the-wonderful-weird-web-%E2%80%93-kaomoji-cool-club">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-wonderful-weird-web-%E2%80%93-kaomoji-cool-club">The wonderful weird web – Kaomoji Cool Club</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(135.59523809523813,135.59523809523813,119.40476190476188); --color2: rgb(132,132,132); --color3: rgb(192.90952380952382,192.90952380952382,184.49047619047616); --color4: rgb(196,196,188); --color5: rgb(63,65,68);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTU3Ij48cGF0aCBmaWxsPSIjM2Y0MTQ0IiBkPSJNMCAwaDMwMHYxNTdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMzEiIGN5PSIxMTkiIHJ4PSIyNTUiIHJ5PSIzMiIvPjxlbGxpcHNlIGN4PSIxMTYiIHJ4PSIyNTUiIHJ5PSIzNCIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2FjYWJhOSIgdHJhbnNmb3JtPSJtYXRyaXgoLTI1Ljk3Nzc4IC00Ljg5NTQ0IDUuMTc1MzQgLTI3LjQ2MzA4IDc5IDU5LjYpIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjYjdiNmIzIiB0cmFuc2Zvcm09Im1hdHJpeCgtLjcyMTg5IC0yNy41Njc4NiAyNC40NDI3IC0uNjQwMDUgMTgzIDYwLjYpIi8+PHBhdGggZmlsbD0iI2NkY2NjNyIgZD0iTTExMyA0M2gzM3Y0NWgtMzN6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTIyMiA0NWg4djQzaC04eiIvPjxlbGxpcHNlIGN4PSIxODEiIGN5PSI1OSIgcng9IjE3IiByeT0iMjIiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJtMzcgNDAtMSA1NS05LTMxeiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=avif&fit=scale&q=75&w=300&h=157 300w, https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=avif&fit=scale&q=75&w=500&h=263 500w, https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=avif&fit=scale&q=75&w=700&h=368 700w, https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=avif&fit=scale&q=75&w=900&h=473 900w, https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=avif&fit=scale&q=75&w=1100&h=579 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=webp&fit=scale&q=75&w=300&h=157 300w, https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=webp&fit=scale&q=75&w=500&h=263 500w, https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=webp&fit=scale&q=75&w=700&h=368 700w, https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=webp&fit=scale&q=75&w=900&h=473 900w, https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=webp&fit=scale&q=75&w=1100&h=579 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="526"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=jpg&fit=scale&q=75&w=300&h=157 300w, https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=jpg&fit=scale&q=75&w=500&h=263 500w, https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=jpg&fit=scale&q=75&w=700&h=368 700w, https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=jpg&fit=scale&q=75&w=900&h=473 900w, https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png?fm=jpg&fit=scale&q=75&w=1100&h=579 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1E3cj0qzKvOFOdCwsW6DnF/76c6706e1ed72bbfe9e3b789551e3c41/Screenshot_2026-02-24_at_16.02.11.png"
                alt="An emoji consisting of parentheses and other Unicode characters"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Did you know that these &quot;emojis&quot; are called Kaomoji? &quot;Kaomoji&quot; is a mix of the Japanese words &quot;kao&quot; 顔 (face) and &quot;moji&quot; 文字(character). Today I learned. And if you want to snatch some of the funky faces to look cool, that's what the Kaomoji Cool Club is about!</p>
<p><a class="btn btn__small" href="https://kaomojicool.club/">Express yourself with Unicode</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="lazy-loaded-videos-are-coming-to-the-web" href="#lazy-loaded-videos-are-coming-to-the-web">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="lazy-loaded-videos-are-coming-to-the-web">Lazy loaded videos are coming to the web</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(201,154,107); --color2: rgb(164,131,96); --color3: rgb(211,116,116); --color4: rgb(163,195,131); --color5: rgb(51,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTM5Ij48cGF0aCBmaWxsPSIjMzMzYzU0IiBkPSJNMCAwaDMwMHYxMzlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyMyIgcj0iMTk1IiBmaWxsPSIjMDIwNjBhIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjM2QzZjNjIiB0cmFuc2Zvcm09InJvdGF0ZSgtMTczLjYgNjEuNCAyOS40KSBzY2FsZSg3Ni4zNjE2NCAyMS4yOTI5OCkiLz48cGF0aCBmaWxsPSIjODI2MTRhIiBkPSJNMTYzIDU2aDQ4djRoLTQ4eiIvPjxwYXRoIGZpbGw9IiM2ZDZhNTkiIGQ9Ik01NCA3OWgxNTd2NEg1NHoiLz48ZWxsaXBzZSBjeD0iMTI2IiBjeT0iMTE4IiBmaWxsPSIjMDMwYzI2IiByeD0iMjU1IiByeT0iMTUiLz48cGF0aCBmaWxsPSIjOTI1MDViIiBkPSJtNDYuNSAzMy43IDI3LS40djVsLTI3IC40eiIvPjxwYXRoIGZpbGw9IiM3NDU2NDYiIGQ9Ik01MyA1NmgxMTh2NUg1M3oiLz48ZWxsaXBzZSBjeD0iMTI3IiBjeT0iNSIgZmlsbD0iIzAzMGQyNyIgcng9IjI1NSIgcnk9IjciLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=avif&fit=scale&q=75&w=300&h=139 300w, https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=avif&fit=scale&q=75&w=500&h=233 500w, https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=avif&fit=scale&q=75&w=700&h=326 700w, https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=avif&fit=scale&q=75&w=900&h=419 900w, https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=avif&fit=scale&q=75&w=1100&h=513 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=webp&fit=scale&q=75&w=300&h=139 300w, https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=webp&fit=scale&q=75&w=500&h=233 500w, https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=webp&fit=scale&q=75&w=700&h=326 700w, https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=webp&fit=scale&q=75&w=900&h=419 900w, https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=webp&fit=scale&q=75&w=1100&h=513 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="466"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=jpg&fit=scale&q=75&w=300&h=139 300w, https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=jpg&fit=scale&q=75&w=500&h=233 500w, https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=jpg&fit=scale&q=75&w=700&h=326 700w, https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=jpg&fit=scale&q=75&w=900&h=419 900w, https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png?fm=jpg&fit=scale&q=75&w=1100&h=513 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3QLvQJv7Y1AMkcmyM8RGKK/553628a281d22d397dd4811ca6f34df0/Screenshot_2026-02-24_at_06.04.41.png"
                alt="&amp;lt;video    loading=&amp;quot;lazy&amp;quot;    autoplay playsinline muted controls   src=&amp;quot;path/to/sloth.webm&amp;quot;    poster=&amp;quot;path/to/sloth.jpg&amp;quot;&amp;gt;&amp;lt;/video&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Scott and his team at Squarespace are working on bringing <code>loading=&quot;lazy&quot;</code> to video and audio elements, and it's wild that we didn't have this in 2026, isn't it?</p>
<p><a class="btn btn__small" href="https://scottjehl.com/posts/lazy-media/">Defer the heavy load</a></p>
<p><em>Side note: <a href="https://scottjehl.com/posts/responsive-video/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fscottjehl.com%2Fposts%2Fresponsive-video%2F')">Scott was also behind pushing browser vendors to add responsive video support</a>, and I honestly think that his &quot;little side projects&quot; are very inspiring.</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="are-image-sprites-still-a-thing%3F" href="#are-image-sprites-still-a-thing%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="are-image-sprites-still-a-thing%3F">Are image sprites still a thing?</h2></div><p><img src="https://images.ctfassets.net/f20lfrunubsq/19ZkdoZwtc2sFRH0AWkx8c/151bd7589e3e2a34f2e4bb044d365541/sprites.gif" alt="Visualization of a CSS sprite showing all the different frames." loading="lazy" /></p>
<p>Josh got into the topic of image sprites which, I must admit, I haven't used in at least a decade. But because Josh's posts are always so much fun to read and he explains <code>object-fit</code>, <code>object-position</code> and the animation <code>step()</code> function, it's definitely worth a read!</p>
<p><a class="btn btn__small" href="https://www.joshwcomeau.com/animation/sprites/">Remember sprites</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="yet-another-list-of-web-dev-stuff" href="#yet-another-list-of-web-dev-stuff">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="yet-another-list-of-web-dev-stuff">Yet another list of web dev stuff</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(236,84,44); --color2: rgb(132,132,132); --color3: rgb(244.04608695652175,156.41478260869565,133.35391304347826); --color4: rgb(188,188,188); --color5: rgb(68,68,68);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgOTAiPjxwYXRoIGZpbGw9IiM0NDQiIGQ9Ik0wIDBoMzAwdjkwSDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwOTA5MDgiIHRyYW5zZm9ybT0ibWF0cml4KDI0NS4xMDgwNyAtNzAuMzM1MTYgMTguOTIxNDUgNjUuOTM4NTggMTM5LjMgNzYpIi8+PHBhdGggZmlsbD0iI2QyZDJkMiIgZD0iTTE4IDE1aDczdjEySDE4eiIvPjxlbGxpcHNlIGN4PSIxNjkiIGN5PSI1MSIgZmlsbD0iI2I4YjdiNyIgcng9IjE3MSIgcnk9IjIiLz48ZWxsaXBzZSBjeD0iNTEiIGN5PSIxIiBmaWxsPSIjMDIwMjAyIiByeD0iMTE4IiByeT0iMTEiLz48cGF0aCBmaWxsPSIjMDgwMzAxIiBkPSJtLTcuNC03IDM3LjYgNDguMUw3LjQgNTlsLTM3LjYtNDguMXoiLz48cGF0aCBkPSJNNTIuMiAzMC40IDUxLjYtMTZsMTEgNDYuNCA0LjYgMS40eiIvPjxwYXRoIGZpbGw9IiMxYzFjMWMiIGQ9Ik0yNzEgNzAuNiAyMzcuMy0xNiAxMi43IDQ4LjFsMjE4LjctMS42eiIvPjxwYXRoIGQ9Ik0yMSAxN2g4djZoLTh6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=avif&fit=scale&q=75&w=300&h=90 300w, https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=avif&fit=scale&q=75&w=500&h=151 500w, https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=avif&fit=scale&q=75&w=700&h=212 700w, https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=avif&fit=scale&q=75&w=900&h=272 900w, https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=avif&fit=scale&q=75&w=1100&h=333 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=webp&fit=scale&q=75&w=300&h=90 300w, https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=webp&fit=scale&q=75&w=500&h=151 500w, https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=webp&fit=scale&q=75&w=700&h=212 700w, https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=webp&fit=scale&q=75&w=900&h=272 900w, https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=webp&fit=scale&q=75&w=1100&h=333 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="303"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=jpg&fit=scale&q=75&w=300&h=90 300w, https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=jpg&fit=scale&q=75&w=500&h=151 500w, https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=jpg&fit=scale&q=75&w=700&h=212 700w, https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=jpg&fit=scale&q=75&w=900&h=272 900w, https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png?fm=jpg&fit=scale&q=75&w=1100&h=333 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6iZtB2OhpTDrtPyiM7OeBC/a3d93b380259eeef71462d7c8986d77a/Screenshot_2026-02-24_at_16.27.45.png"
                alt="Can we — A collection of websites focused on browser usage and features."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>You probably know about <code>caniuse<wbr>.com</code>. But do you know about <code>caniemail<wbr>.com</code>? Or <code>canidev<wbr>.tools</code>, <code>whocanuse<wbr>.com</code> and <code>cssdb<wbr>.org</code>?</p>
<p>I love a good list, and <code>canwe<wbr>.dev</code> lists all these utility webdev sites.</p>
<p><a class="btn btn__small" href="https://canwe.dev/">Get some resources</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-in-chrome-devtools-%E2%80%94-%60render-blocking%60" href="#new-in-chrome-devtools-%E2%80%94-%60render-blocking%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-in-chrome-devtools-%E2%80%94-%60render-blocking%60">New in Chrome DevTools — <code>Render blocking</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(28,124,188); --color2: rgb(157,100,76); --color3: rgb(247,138,91); --color4: rgb(188,187,188); --color5: rgb(100,68,52);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgOTIiPjxwYXRoIGZpbGw9IiM2NDQ0MzQiIGQ9Ik0wIDBoMzAwdjkySDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwMDIyMzQiIHRyYW5zZm9ybT0icm90YXRlKDguOCAtOTYuNCA5MjYuNSkgc2NhbGUoMTczLjczNDM1IDgwLjEwNTg0KSIvPjxwYXRoIGZpbGw9IiM1YTVlNjAiIGQ9Ik0xIDY5aDIxN3Y5SDF6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMTUxOTFkIiB0cmFuc2Zvcm09InJvdGF0ZSgxNjguMyAxMjQuMiAzMS41KSBzY2FsZSgzNS4wOTQ5MSAyMy4wOTg3NSkiLz48cGF0aCBmaWxsPSIjNDU1MzVkIiBkPSJNMTkxIDFoNDR2MjNoLTQ0eiIvPjxlbGxpcHNlIGN4PSIyMzMiIGN5PSIzOCIgZmlsbD0iIzE1OGRkYyIgcng9IjEiIHJ5PSI0OSIvPjxlbGxpcHNlIGN4PSI5OSIgY3k9IjUwIiBmaWxsPSIjMjQyMjIxIiByeD0iMTI2IiByeT0iOSIvPjxwYXRoIGZpbGw9IiM3MTQ1MzEiIGQ9Ik0yIDEwaDd2NjlIMnoiLz48ZWxsaXBzZSBjeD0iMTkxIiBjeT0iMTkiIGZpbGw9IiMxOTk4ZWQiIHJ4PSIxIiByeT0iNTkiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=avif&fit=scale&q=75&w=300&h=93 300w, https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=avif&fit=scale&q=75&w=500&h=155 500w, https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=avif&fit=scale&q=75&w=700&h=217 700w, https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=avif&fit=scale&q=75&w=900&h=279 900w, https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=avif&fit=scale&q=75&w=1100&h=341 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=webp&fit=scale&q=75&w=300&h=93 300w, https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=webp&fit=scale&q=75&w=500&h=155 500w, https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=webp&fit=scale&q=75&w=700&h=217 700w, https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=webp&fit=scale&q=75&w=900&h=279 900w, https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=webp&fit=scale&q=75&w=1100&h=341 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="310"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=jpg&fit=scale&q=75&w=300&h=93 300w, https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=jpg&fit=scale&q=75&w=500&h=155 500w, https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=jpg&fit=scale&q=75&w=700&h=217 700w, https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=jpg&fit=scale&q=75&w=900&h=279 900w, https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png?fm=jpg&fit=scale&q=75&w=1100&h=341 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3YPRgn9UP6LbHkldLf5fGM/38107efb729cb4caf9217cac27637d9f/render-blocking.png"
                alt="Chrome DevTools with a highlighted &quot;Render Blocking&quot; column"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you care about web performance, you probably check for render-blocking resources. <a href="https://www.stefanjudis.com/blog/how-to-find-all-render-blocking-resources-with-javascript/">Chrome supports a handy JS API to discover all these offenders</a>.</p>
<p>And there's now a new column in the network panel giving you this information.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="random-mdn-%E2%80%93-%60text-box-trim%60" href="#random-mdn-%E2%80%93-%60text-box-trim%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="random-mdn-%E2%80%93-%60text-box-trim%60">Random MDN – <code>text-box-trim</code></h2></div><p><img src="https://images.ctfassets.net/f20lfrunubsq/12UO5N4gQZsM2bvbpHzmpf/bf188b203b7228d153f592ff88e6a9c8/text-box-trim.gif" alt="Demo of text-box-trim showing how the bounding box of text can be controlled." loading="lazy" /></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Unfortunately, <code>text-box-trim</code> doesn't work in Firefox yet, but man, I can't wait for this to work everywhere because it will make vertical alignment so much easier!</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/text-box-trim">Align</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-recap-%E2%80%93-%60text-transform%60-can-affect-screen-readers" href="#til-recap-%E2%80%93-%60text-transform%60-can-affect-screen-readers">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-recap-%E2%80%93-%60text-transform%60-can-affect-screen-readers">TIL recap – <code>text-transform</code> can affect screen readers</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(235,33,85); --color2: rgb(102,129,119); --color3: rgb(244,175,199); --color4: rgb(196,196,195); --color5: rgb(61,32,38);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTc1Ij48cGF0aCBmaWxsPSIjM2QyMDI2IiBkPSJNMCAwaDMwMHYxNzVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxNDYiIGN5PSIxNDgiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSIxMSIvPjxlbGxpcHNlIGN4PSIxMTUiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSI2Ii8+PGVsbGlwc2UgY3g9IjI1NSIgY3k9IjcxIiBmaWxsPSIjZmZmIiByeD0iNiIgcnk9IjE0NyIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik01LjUtMjR2MTc4aC05Vi0yNHoiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiM0ZjYzNjAiIHRyYW5zZm9ybT0ibWF0cml4KC0xMTQuNjcyODcgLTIuMDAxNjIgLjY4MDM5IC0zOC45NzkyOCAxMjkuNSAxMDYuNykiLz48ZWxsaXBzZSBjeD0iMTI4IiBjeT0iMTQ5IiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iNyIvPjxlbGxpcHNlIGN4PSIxNTQiIGN5PSIxIiBmaWxsPSIjZmZmIiByeD0iMjI0IiByeT0iMyIvPjxwYXRoIGZpbGw9IiMwMDAxMDAiIGQ9Ik03MCAxMjZoMTE4djE3SDcweiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=avif&fit=scale&q=75&w=300&h=175 300w, https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=avif&fit=scale&q=75&w=500&h=293 500w, https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=avif&fit=scale&q=75&w=700&h=410 700w, https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=avif&fit=scale&q=75&w=900&h=527 900w, https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=avif&fit=scale&q=75&w=1100&h=645 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=webp&fit=scale&q=75&w=300&h=175 300w, https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=webp&fit=scale&q=75&w=500&h=293 500w, https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=webp&fit=scale&q=75&w=700&h=410 700w, https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=webp&fit=scale&q=75&w=900&h=527 900w, https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=webp&fit=scale&q=75&w=1100&h=645 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="586"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=jpg&fit=scale&q=75&w=300&h=175 300w, https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=jpg&fit=scale&q=75&w=500&h=293 500w, https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=jpg&fit=scale&q=75&w=700&h=410 700w, https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=jpg&fit=scale&q=75&w=900&h=527 900w, https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png?fm=jpg&fit=scale&q=75&w=1100&h=645 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4UOI9Uv5cARzXE0bQiyVDn/bf3583f204841a43bd32797b148983ef/Screenshot_2026-02-24_at_17.43.38.png"
                alt="VoiceOver pronouncing an &quot;add&quot; button with text-transform uppercase as ADD (each letter spelled out)."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Did you know that <code>text-transform: uppercase</code> can affect how screen readers read out the content? Well, now you do!</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/text-transforms-affects-screen-readers-too/">Be aware</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-on-the-baseline-%E2%80%94-new-%60map%60-methods" href="#new-on-the-baseline-%E2%80%94-new-%60map%60-methods">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-on-the-baseline-%E2%80%94-new-%60map%60-methods">New on the baseline — new <code>map</code> methods</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(114,169,231); --color2: rgb(85,121,164); --color3: rgb(217,193,130); --color4: rgb(180,148,200); --color5: rgb(51,67,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQ2Ij48cGF0aCBmaWxsPSIjMzM0MzUzIiBkPSJNMCAwaDMwMHYxNDZIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE1NiIgY3k9IjY3IiByPSIxNzYiIGZpbGw9IiMwMjAwMGYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMyYjMzM2YiIHRyYW5zZm9ybT0ibWF0cml4KDg0LjQ4Njc1IC0uMTk0MDcgLjA4ODA0IDM4LjMyNzQ4IDk2LjcgNjIuNSkiLz48ZWxsaXBzZSBjeD0iOTYiIGN5PSI4NCIgZmlsbD0iIzVlNWU2YSIgcng9IjE0NCIgcnk9IjIiLz48ZWxsaXBzZSBjeD0iNzMiIGN5PSI0MSIgZmlsbD0iIzUwNTk4MSIgcng9IjU1IiByeT0iMiIvPjxlbGxpcHNlIGN4PSI5IiBjeT0iODAiIGZpbGw9IiMwOTExMjYiIHJ4PSIxNiIgcnk9IjEyNCIvPjxwYXRoIGZpbGw9IiM1ODYzNzYiIGQ9Im0yMDYuNSA2MS4zLTE0Ny0yLjZ2LTJsMTQ3IDIuNnoiLz48ZWxsaXBzZSBjeD0iMTYwIiBjeT0iMTI0IiBmaWxsPSIjMDMwZDI0IiByeD0iMjU0IiByeT0iMTMiLz48cGF0aCBmaWxsPSIjMTYxODI1IiBkPSJtMTcyIDgzIDEzLTI5TDc3IDczeiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=avif&fit=scale&q=75&w=300&h=147 300w, https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=avif&fit=scale&q=75&w=500&h=245 500w, https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=avif&fit=scale&q=75&w=700&h=343 700w, https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=avif&fit=scale&q=75&w=900&h=441 900w, https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=avif&fit=scale&q=75&w=1100&h=539 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=webp&fit=scale&q=75&w=300&h=147 300w, https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=webp&fit=scale&q=75&w=500&h=245 500w, https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=webp&fit=scale&q=75&w=700&h=343 700w, https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=webp&fit=scale&q=75&w=900&h=441 900w, https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=webp&fit=scale&q=75&w=1100&h=539 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="490"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=jpg&fit=scale&q=75&w=300&h=147 300w, https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=jpg&fit=scale&q=75&w=500&h=245 500w, https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=jpg&fit=scale&q=75&w=700&h=343 700w, https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=jpg&fit=scale&q=75&w=900&h=441 900w, https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png?fm=jpg&fit=scale&q=75&w=1100&h=539 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6woqKzWOkjoMyKyqXR2TPg/408f57c4bbce5b51d34b820f40de5582/Screenshot_2026-02-24_at_16.07.42.png"
                alt="const map = new Map(\[\[&quot;bar&quot;, &quot;foo&quot;\]\]); const defaultCreator = (key) =&gt; `default for ${key}`; console.log(map.getOrInsertComputed(&quot;baz&quot;, defaultCreator)); // Expected output: &quot;default for baz&quot;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>JavaScript maps got two new methods to access entries while providing fallback values: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/getOrInsert" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FJavaScript%2FReference%2FGlobal_Objects%2FMap%2FgetOrInsert')"><code>getOrInsert</code></a> and <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/getOrInsertComputed" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FJavaScript%2FReference%2FGlobal_Objects%2FMap%2FgetOrInsertComputed')"><code>getOrInsertComputed</code></a>. The method names are a bit too wordy for my taste, but I dig that <code>getOrInsertComputed</code> allows you to evaluate the fallback lazily.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="three-valuable-projects-to-have-a-look-at" href="#three-valuable-projects-to-have-a-look-at">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="three-valuable-projects-to-have-a-look-at">Three valuable projects to have a look at</h2></div><ul>
<li><a href="https://github.com/auroris/logo-soup" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fauroris%2Flogo-soup')">auroris/logo-soup</a> – A JS library to normalize and harmonize logo visuals.</li>
<li><a href="https://github.com/seflless/slowmo" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fseflless%2Fslowmo')">seflless/slowmo</a> – Slow down, pause, or speed up time of any web content.</li>
<li><a href="https://github.com/Veirt/weathr" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2FVeirt%2Fweathr')">Veirt/weathr</a> – A terminal weather app with ASCII animation.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-tiny-helper" href="#a-new-tiny-helper">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-tiny-helper">A new Tiny Helper</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(235,92,44); --color2: rgb(132,132,132); --color3: rgb(83,179,251); --color4: rgb(188,188,188); --color5: rgb(29,52,35);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTU5Ij48cGF0aCBmaWxsPSIjMWQzNDIzIiBkPSJNMCAwaDMwMHYxNTlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyMyIgY3k9IjYyIiByPSIxNzAiLz48ZWxsaXBzZSBjeD0iMTE3IiBjeT0iNjgiIGZpbGw9IiM2ZDYzNmQiIHJ4PSIxMDIiIHJ5PSI2Ii8+PHBhdGggZmlsbD0iI2E2YmRhNyIgZD0ibTQ4IDc1LjcgMy43LTEyLjNMMzMgNjBsMS42IDE3LjF6Ii8+PHBhdGggZmlsbD0iIzA4MDAwNSIgZD0iTTUwIDBoNjB2MTM2SDUweiIvPjxwYXRoIGZpbGw9IiMwNzAwMDQiIGQ9Im0xMjktOCAxMzMtNyA5IDE2NHoiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwNzAwMDUiIHRyYW5zZm9ybT0ibWF0cml4KDE2MC4yNjUwNCAzLjM1NzA3IC0uNzI5NjcgMzQuODMzOSAxMzYuMiAxMDguMikiLz48cGF0aCBmaWxsPSIjNWM1ZDViIiBkPSJtODEuNCA1OC41IDc3LjkgMTQuNC04Ny4zLjQgNS4yLTE4LjF6Ii8+PHBhdGggZmlsbD0iI2Y3MzUwMCIgZD0iTTM2LjIgNTMuMiAzMCA3MS4xbDExLjItMi42LS42LTMuOXoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=avif&fit=scale&q=75&w=300&h=159 300w, https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=avif&fit=scale&q=75&w=500&h=266 500w, https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=avif&fit=scale&q=75&w=700&h=373 700w, https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=avif&fit=scale&q=75&w=900&h=479 900w, https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=avif&fit=scale&q=75&w=1100&h=586 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=webp&fit=scale&q=75&w=300&h=159 300w, https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=webp&fit=scale&q=75&w=500&h=266 500w, https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=webp&fit=scale&q=75&w=700&h=373 700w, https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=webp&fit=scale&q=75&w=900&h=479 900w, https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=webp&fit=scale&q=75&w=1100&h=586 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="533"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=jpg&fit=scale&q=75&w=300&h=159 300w, https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=jpg&fit=scale&q=75&w=500&h=266 500w, https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=jpg&fit=scale&q=75&w=700&h=373 700w, https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=jpg&fit=scale&q=75&w=900&h=479 900w, https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png?fm=jpg&fit=scale&q=75&w=1100&h=586 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2V67ddbZaPc5xuJGV5uV1L/fd66e65b3e0520865d25012791fa58cf/svg-studio.png"
                alt="SVG Studio Logo.svg"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you're looking for a quick way to update and tweak SVG files in code, <code>svg<wbr>.studio</code> will help you out!</p>
<p><a class="btn btn__small" href="https://www.svg.studio/">Tweak all the SVGs</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more single-purpose online tools on <a href="https://tiny-helpers.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ftiny-helpers.dev%2F')">tiny-helpers.dev</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="thought-of-the-week" href="#thought-of-the-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="thought-of-the-week">Thought of the week</h2></div><p><a href="https://eieio.games/blog/will-ai-pet-my-dog-for-me/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Feieio.games%2Fblog%2Fwill-ai-pet-my-dog-for-me%2F')">Nolan shared his thoughts on how AI might be changing programming</a>, and of course, I can relate. I love coding. I love the puzzling part and am excited about learning things. But will all these things still matter? We'll find out soon enough.</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <blockquote>
<p>My immediate fear isn't that I'll be out of a job. My fear is that I'll lose the part of my job that I love the most.</p>
</blockquote>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="did-you-learn-something-from-this-issue%3F" href="#did-you-learn-something-from-this-issue%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="did-you-learn-something-from-this-issue%3F">Did you learn something from this issue?</h2></div><p>❤️ If so, <strong>join 37 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="this-is-all%2C-friends!" href="#this-is-all%2C-friends!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="this-is-all%2C-friends!">This is all, friends!</h2></div><p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr aria-hidden="true"><p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Web Weekly #184">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>How to scale elements and their layout with CSS &quot;zoom&quot; (#tilPost)</title>
      <link href="https://www.stefanjudis.com/today-i-learned/css-zoom-to-scale-elements/"/>
      <published>2026-02-23T23:00:00+00:00</published>
      <updated>2026-02-23T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/today-i-learned/css-zoom-to-scale-elements/</id>
      <category term="tilPost"></category>
        <category term="CSS"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>You probably know that you can use <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/scale" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FValues%2Ftransform-function%2Fscale')">the scale function <code>scale()</code></a> or even just <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/scale" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FProperties%2Fscale')"><code>scale</code> property</a> to transform and change an element's size.</p>
<p>The thing with <code>scale</code> is that it only changes visual appearance and the layout size of the target element remains the same.</p>
<p>Today I learned there's also <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/zoom" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FProperties%2Fzoom')">the <code>zoom</code> property</a>. <code>zoom</code> &quot;really&quot; scales the element and its layout. Check this out!</p>
<p>[Interactive component: visit the article to see it...]</p>
<p>What's the browser support?</p>
<div class="highlightBox mdn margin-top-xl margin-bottom-xl">
        <div class="cornerBubble">
          <svg aria-hidden="true"><use xlink:href="/sprite.svg#icon-mdn"></use></svg>
        </div>
        <div class="highlightBox__header">MDN Compat Data (<a href="https://raw.githubusercontent.com/mdn/browser-compat-data/refs/heads/main/css/properties/zoom.json">source</a>)</div>
        <div class="highlightBox__body">
          <div class="highlightBox__overflow">
            <table class="highlightBox__compat">
              <caption>Browser support info for <a href="https://developer.mozilla.org/docs/Web/CSS/Reference/Properties/zoom">zoom</a> </caption>
              <thead>
                <tr>
                  <td>
                        <img src="/assets/browsers/chrome.webp"
                              srcset="/assets/browsers/chrome.webp, /assets/browsers/chrome@2.webp 2x"
                              width="48" height="51" alt="chrome">
                      </td><td>
                        <img src="/assets/browsers/chrome_android.webp"
                              srcset="/assets/browsers/chrome_android.webp, /assets/browsers/chrome_android@2.webp 2x"
                              width="48" height="51" alt="chrome_android">
                      </td><td>
                        <img src="/assets/browsers/edge.webp"
                              srcset="/assets/browsers/edge.webp, /assets/browsers/edge@2.webp 2x"
                              width="48" height="51" alt="edge">
                      </td><td>
                        <img src="/assets/browsers/firefox.webp"
                              srcset="/assets/browsers/firefox.webp, /assets/browsers/firefox@2.webp 2x"
                              width="48" height="51" alt="firefox">
                      </td><td>
                        <img src="/assets/browsers/firefox_android.webp"
                              srcset="/assets/browsers/firefox_android.webp, /assets/browsers/firefox_android@2.webp 2x"
                              width="48" height="51" alt="firefox_android">
                      </td><td>
                        <img src="/assets/browsers/safari.webp"
                              srcset="/assets/browsers/safari.webp, /assets/browsers/safari@2.webp 2x"
                              width="48" height="51" alt="safari">
                      </td><td>
                        <img src="/assets/browsers/safari_ios.webp"
                              srcset="/assets/browsers/safari_ios.webp, /assets/browsers/safari_ios@2.webp 2x"
                              width="48" height="51" alt="safari_ios">
                      </td><td>
                        <img src="/assets/browsers/samsunginternet_android.webp"
                              srcset="/assets/browsers/samsunginternet_android.webp, /assets/browsers/samsunginternet_android@2.webp 2x"
                              width="48" height="51" alt="samsunginternet_android">
                      </td><td>
                        <img src="/assets/browsers/webview_android.webp"
                              srcset="/assets/browsers/webview_android.webp, /assets/browsers/webview_android@2.webp 2x"
                              width="48" height="51" alt="webview_android">
                      </td>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td>
                        <span class="highlightBox__pill success margin-top-s">
                        1
                        </span>
                      </td><td>
                        <span class="highlightBox__pill success margin-top-s">
                        1
                        </span>
                      </td><td>
                        <span class="highlightBox__pill success margin-top-s">
                        12
                        </span>
                      </td><td>
                        <span class="highlightBox__pill success margin-top-s">
                        126
                        </span>
                      </td><td>
                        <span class="highlightBox__pill success margin-top-s">
                        126
                        </span>
                      </td><td>
                        <span class="highlightBox__pill success margin-top-s">
                        3.1
                        </span>
                      </td><td>
                        <span class="highlightBox__pill success margin-top-s">
                        3
                        </span>
                      </td><td>
                        <span class="highlightBox__pill success margin-top-s">
                        1.5
                        </span>
                      </td><td>
                        <span class="highlightBox__pill success margin-top-s">
                        1
                        </span>
                      </td>
                </tr>
              </tbody>
            </table>
          </div>
<p></div>
</div></p>
<p>It's pretty green!</p>
<p>I can totally see constrained situations where this can come in handy, but you should avoid animating it because browsers probably don't appreciate the layout shift.</p>
<div class="highlightBox attention margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-attention"/>
            </svg>
          </div>
        

      
      <p>Someone pointed out that there are still browser inconsistencies for zoomed elements. Boooh!</p>
<p>Apparently, Safari doesn't return the updated element layout size if you use <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FAPI%2FElement%2FgetBoundingClientRect')"><code>getBoundingClientRect()</code></a>. <code>width</code> and <code>height</code> remain the initial size of 120px time 120px (tested in Safari 26.3).</p>
<p>Chrome and Firefox work as expected.</p>
</div></div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20How to scale elements and their layout with CSS &quot;zoom&quot;">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Notes on relying on the ARIA Authoring Practices Guide  (#note)</title>
      <link href="https://www.stefanjudis.com/notes/notes-on-relying-on-the-aria-authoring-practices-guide/"/>
      <published>2026-02-18T23:00:00+00:00</published>
      <updated>2026-02-18T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/notes/notes-on-relying-on-the-aria-authoring-practices-guide/</id>
      <category term="note"></category>
        <category term="Accessibility"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>Eric wrote about <a href="https://ericwbailey.website/published/heres-how-to-instruct-a-llm-to-reference-the-aria-authoring-practices-guide/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fericwbailey.website%2Fpublished%2Fheres-how-to-instruct-a-llm-to-reference-the-aria-authoring-practices-guide%2F')">how to instruct an LLM to fetch the &quot;valuable stuff&quot; from the ARIA Authoring Practices Guide (APG)</a>. The article includes some points about APG itself that are worth highlighting. And what's the valuable stuff?</p>
<p>If you don't know <a href="https://www.w3.org/WAI/ARIA/apg/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.w3.org%2FWAI%2FARIA%2Fapg%2F')">the Authoring Practice Guide</a>, here's what you'll see after finding it online looking for ARIA patterns.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(227,210,98); --color2: rgb(109,126,153); --color3: rgb(132,163,202); --color4: rgb(176,188,206); --color5: rgb(63,74,101);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQxIj48cGF0aCBmaWxsPSIjM2Y0YTY1IiBkPSJNMCAwaDMwMHYxNDFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSI5NyIgY3k9IjUiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSIxMCIvPjxlbGxpcHNlIGN4PSIxMTIiIGN5PSIxMTgiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSIxMCIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoLTcuMjgxOTcgNjcuOTczMjIgLTE3LjU0NjgyIC0xLjg3OTc5IDI1NSA1OC42KSIvPjxlbGxpcHNlIGN4PSIyIiBjeT0iNjIiIGZpbGw9IiNmZmYiIHJ4PSI4IiByeT0iMTIwIi8+PGVsbGlwc2UgY3g9IjEwOCIgY3k9IjQiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSIxMCIvPjxlbGxpcHNlIGN4PSI3NSIgY3k9IjExNSIgZmlsbD0iI2ZmZiIgcng9IjI1NSIgcnk9IjciLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMjQgODRoMzV2MTJIMjR6Ii8+PHBhdGggZmlsbD0iIzAwMmM2YyIgZD0ibTQuMyAxMDcuNyAxNzcgMS44IDY1LjUtMi40LTE5LjMtNjJ6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="//images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png">
            <picture>
              <source type="image/avif"
                srcset="//images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=avif&fit=scale&q=75&w=300&h=141 300w, //images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=avif&fit=scale&q=75&w=500&h=236 500w, //images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=avif&fit=scale&q=75&w=700&h=331 700w, //images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=avif&fit=scale&q=75&w=900&h=425 900w, //images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=avif&fit=scale&q=75&w=1100&h=520 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="//images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=webp&fit=scale&q=75&w=300&h=141 300w, //images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=webp&fit=scale&q=75&w=500&h=236 500w, //images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=webp&fit=scale&q=75&w=700&h=331 700w, //images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=webp&fit=scale&q=75&w=900&h=425 900w, //images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=webp&fit=scale&q=75&w=1100&h=520 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="473"
                srcset="//images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=jpg&fit=scale&q=75&w=300&h=141 300w, //images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=jpg&fit=scale&q=75&w=500&h=236 500w, //images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=jpg&fit=scale&q=75&w=700&h=331 700w, //images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=jpg&fit=scale&q=75&w=900&h=425 900w, //images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png?fm=jpg&fit=scale&q=75&w=1100&h=520 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="//images.ctfassets.net/f20lfrunubsq/xGGpWkiudi4RXenbtEFo8/a5a8f6deca99777a8a57192cb5054318/Screenshot_2026-02-19_at_06.47.03.png"
                alt="ARIA Authoring Practices Guide (APG) Home  Learn to use the accessibility semantics defined by the Accessible Rich Internet Application (ARIA) specification to create accessible web experiences. "
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>As you see above, the guide is supposed to teach how to use <em>accessibility semantics defined by the Accessible Rich Internet Application (ARIA)</em>. And it looks <strong>very</strong> authoritative. When I first discovered it after some googling, I treated this guide as the source of truth because it lives under <code>w3<wbr>.org</code> and looks very official. I learned early on that using ARIA correctly is hard; and thought that APG must be the place showing me how to do ARIA correctly.</p>
<p>It sort of is but not really.</p>
<p>Lately, I've seen many accessibility folks raise concerns about APG, and Eric's article echoes some of them.</p>
<blockquote>
<p>The APG was created to demonstrate ARIA's capabilities. Because of this, it disproportionately favors ARIA in its code examples.</p>
</blockquote>
<p>The guide is there to <strong>showcase</strong> ARIA usage patterns and if people want to showcase something they might overuse it at times. This is true for ARIA usage in the APG, too.</p>
<blockquote>
<p>The APG was also not created to serve as a pattern library, design system, or single source of truth for the &quot;right way&quot; to make something. Unfortunately, a lot of people treat it this way.</p>
</blockquote>
<p>I understand Eric's point, but I also can't blame people for treating the guide as &quot;the right way&quot;. The home page literally says that &quot;APG provides design patterns and functional examples&quot;. It's hosted on <code>w3<wbr>.org</code>. It looks very official. If there's a line between &quot;a collection of design patterns&quot; and a &quot;pattern library&quot; at all, it's a very thin one.</p>
<p>Of course people treat the Authoring Practice Guide as the right way to do things — when I discovered it, I did, too.</p>
<blockquote>
<p>Recall here that the original reason for APG code is to be a showpiece for how ARIA could hypothetically be used. Because of this, it is not the APG's concern that ARIA does not have perfect support.</p>
</blockquote>
<p>This is by far the biggest reason why I don't pretend to know when something is truly accessible. <strong>Nothing is ever fully accessible to everyone, and the world of assistive technology is huge.</strong> A single ARIA attribute might make things more accessible in theory, but who knows if it works across all browser-screen reader combinations.</p>
<p>The effort alone to verify that an ARIA pattern works well across assistive technologies is massive.</p>
<hr aria-hidden="true"><p>But what are the guide's valuable parts? Eric highlights the pattern names, &quot;about this pattern&quot; section and the keyboard interaction specification.</p>
<blockquote>
<p>The pattern names. Having a standardized way to refer to a discrete piece of UI that is larger than any one company is highly beneficial.</p>
</blockquote>
<blockquote>
<p>The content contained in the &quot;About This Pattern&quot; section. This is what the discrete piece of UI does, and how it goes about doing it.</p>
</blockquote>
<blockquote>
<p>The content contained in the &quot;Keyboard Interaction&quot; section. This is how people who use assistive technology will expect things to work.</p>
</blockquote>
<p>That's good to know!</p>
<hr aria-hidden="true"><p><strong>So if you've been treating APG as the definitive source of truth, think again.</strong> Its examples demonstrate <em>what ARIA can do</em>, not necessarily <em>what you should do</em>.</p>
<p>It doesn't matter if you've discovered the ARIA Authoring Practices Guide or not, before reaching for a complex ARIA pattern found on the internet, the usual rules apply:</p>
<ul>
<li>Always start with native HTML: the <a href="https://www.w3.org/TR/using-aria/#firstrule" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.w3.org%2FTR%2Fusing-aria%2F%23firstrule')">first rule of ARIA</a> is to use a native HTML element before adding ARIA. A <code>&lt;button&gt;</code> beats a <code>&lt;div role=&quot;button&quot;&gt;</code> every time regardless of what's written in a fancy ARIA guide or what your LLM claims to be accessible.</li>
<li>Test with assistive technology yourself: nothing beats firing up a screen reader and actually navigating your own UI. It's hard and time-consuming but you can't claim that something is accessible if you haven't tested it.</li>
<li>Follow practitioners who do the testing: as you might know, I'm a huge fan of <a href="https://adrianroselli.com/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fadrianroselli.com%2F')">Adrian Roselli</a> who constantly puts in the work of testing ARIA patterns with different assistive technology combination. He publishes findings on what actually works versus what the spec promises. Huge!</li>
</ul>
<p>Edit: Eric (partly responsible for the Authoring Practices Guide) shared on Mastodon <a href="https://yatil.social/@yatil/116096277826640376" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fyatil.social%2F%40yatil%2F116096277826640376')">how the project evolved into what it is today</a>.</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Notes on relying on the ARIA Authoring Practices Guide ">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Web Weekly #183 (#blogPost)</title>
      <link href="https://www.stefanjudis.com/blog/web-weekly-183/"/>
      <published>2026-02-16T23:00:00+00:00</published>
      <updated>2026-02-16T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/blog/web-weekly-183/</id>
      <category term="blogPost"></category>
        <category term="Newsletter"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="guten-tag!-guten-tag!-%F0%9F%91%8B" href="#guten-tag!-guten-tag!-%F0%9F%91%8B">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="guten-tag!-guten-tag!-%F0%9F%91%8B">Guten Tag! Guten Tag! 👋</h2></div><p>Have you checked what's included in Interop 2026? Do you know about the <code>using</code> declaration in JavaScript? And are you excited about the new ways to style <code>select</code> elements?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <p><a href="https://pawelgrzybek.com/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fpawelgrzybek.com%2F')">Paweł</a> listens to <a href="https://www.youtube.com/watch?v=XhYpqI4HVYw" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DXhYpqI4HVYw')">&quot;Tarika Blue - Topic&quot;</a> and says:</p>
<blockquote>
<p>This one is another sample that I was shocked to discover. My beloved Erykah Badu used a sample of this song in her &quot;Didn't Cha Know&quot;. I love everything by Erykah, and I love jazz music, so this song is a perfect combo for me.</p>
</blockquote>
</div><p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>eight more songs</strong> left in the queue.</p>
<hr aria-hidden="true"><p>The biggest news this week was that the Interop 2026 initiatives were released. If you don't know, Interop is a cross-browser initiative to align on which web features should ship in the upcoming year. Generally it's good stuff and many appreciate browsers going into the same direction (even though not everybody agrees with the focus topics).</p>
<p><a href="https://webkit.org/blog/17808/interop-2025-review/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwebkit.org%2Fblog%2F17808%2Finterop-2025-review%2F')">Last year's Interop included bangers like Anchor Positioning, View Transitions, and <code>@scope</code></a>, and the results were pretty good at the end of the year.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(161,122,4); --color2: rgb(124,140,108); --color3: rgb(251.78545454545454,220.44363636363636,125.61454545454545); --color4: rgb(153,173,146); --color5: rgb(95,71,66);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMjAxIj48cGF0aCBmaWxsPSIjNWY0NzQyIiBkPSJNMCAwaDMwMHYyMDFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMzYiIGN5PSI3NyIgcng9IjI1NSIgcnk9IjExNCIvPjxjaXJjbGUgY3g9IjExNSIgY3k9IjkyIiByPSIxOTMiLz48Y2lyY2xlIGN4PSIxNjciIGN5PSI4NiIgcj0iMTg5Ii8+PHBhdGggZmlsbD0iIzRmNjE0OSIgZD0ibTIxMyAyNC01OS41IDUzLjIgNTkuMy00MS41IDQyLjctMTF6Ii8+PGNpcmNsZSByPSIxIiB0cmFuc2Zvcm09Im1hdHJpeCgtMTg3LjQ1MzgxIDI4LjY1MzkzIC03LjkxNTg2IC01MS43ODU0OSAxNzkuNSAxMjUuOCkiLz48cGF0aCBmaWxsPSIjNzI3NTE2IiBkPSJNNjkgMzFoMTU5djNINjl6Ii8+PGVsbGlwc2UgY3g9IjE3MiIgY3k9IjEyIiBmaWxsPSIjNDU1MzU1IiByeD0iNTkiIHJ5PSIyIi8+PHBhdGggZmlsbD0iI2E2YzQ5YyIgZD0iTTY1IDg2aDI1djJINjV6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=avif&fit=scale&q=75&w=300&h=201 300w, https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=avif&fit=scale&q=75&w=500&h=336 500w, https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=avif&fit=scale&q=75&w=700&h=471 700w, https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=avif&fit=scale&q=75&w=900&h=605 900w, https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=avif&fit=scale&q=75&w=1100&h=740 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=webp&fit=scale&q=75&w=300&h=201 300w, https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=webp&fit=scale&q=75&w=500&h=336 500w, https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=webp&fit=scale&q=75&w=700&h=471 700w, https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=webp&fit=scale&q=75&w=900&h=605 900w, https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=webp&fit=scale&q=75&w=1100&h=740 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="673"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=jpg&fit=scale&q=75&w=300&h=201 300w, https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=jpg&fit=scale&q=75&w=500&h=336 500w, https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=jpg&fit=scale&q=75&w=700&h=471 700w, https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=jpg&fit=scale&q=75&w=900&h=605 900w, https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png?fm=jpg&fit=scale&q=75&w=1100&h=740 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/7z2E1z7cmZ4w4OPXAQMxLu/40cc87ea26db5d21b7252a221e16140f/Screenshot_2026-02-17_at_20.33.30.png"
                alt="Interop support graph showing a 90% completion at the end of the year."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>But what's included this year? Here's <a href="https://webkit.org/blog/17818/announcing-interop-2026/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwebkit.org%2Fblog%2F17818%2Fannouncing-interop-2026%2F')">the full list from the WebKit blog</a>.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(100,187,251); --color2: rgb(77,131,174); --color3: rgb(100,172,235); --color4: rgb(210,210,217); --color5: rgb(53,83,106);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTEyIj48cGF0aCBmaWxsPSIjMzU1MzZhIiBkPSJNMCAwaDMwMHYxMTJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzMSIgY3k9IjQ3IiByPSIxNDgiIGZpbGw9IiMwNDAwMDAiLz48ZWxsaXBzZSBjeD0iMTI5IiBjeT0iOTMiIGZpbGw9IiMxMzBiMDEiIHJ4PSIyNTUiIHJ5PSIyMCIvPjxjaXJjbGUgY3g9IjE3NSIgcj0iMTA4IiBmaWxsPSIjMWQxZTFjIi8+PHBhdGggZmlsbD0iIzJjNDM1MyIgZD0iTTEwOSAxMGg0MHY3M2gtNDB6Ii8+PGVsbGlwc2UgY3g9IjE1MiIgY3k9IjgxIiBmaWxsPSIjNGM4Y2MwIiByeD0iMjciIHJ5PSIyIi8+PGVsbGlwc2UgY3g9IjYxIiBjeT0iNjIiIGZpbGw9IiM0NDcwOTEiIHJ4PSIyMDUiIHJ5PSIyIi8+PGVsbGlwc2UgY3k9IjQxIiBmaWxsPSIjMTcwZDAyIiByeD0iMTgiIHJ5PSI5NSIvPjxwYXRoIGZpbGw9IiMzMDQ3NTciIGQ9Im0yMzAuMyAxMS41IDEuNCA0Mi0zMCAxLTEuNC00MnoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=avif&fit=scale&q=75&w=300&h=112 300w, https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=avif&fit=scale&q=75&w=500&h=188 500w, https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=avif&fit=scale&q=75&w=700&h=263 700w, https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=avif&fit=scale&q=75&w=900&h=338 900w, https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=avif&fit=scale&q=75&w=1100&h=414 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=webp&fit=scale&q=75&w=300&h=112 300w, https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=webp&fit=scale&q=75&w=500&h=188 500w, https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=webp&fit=scale&q=75&w=700&h=263 700w, https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=webp&fit=scale&q=75&w=900&h=338 900w, https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=webp&fit=scale&q=75&w=1100&h=414 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="376"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=jpg&fit=scale&q=75&w=300&h=112 300w, https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=jpg&fit=scale&q=75&w=500&h=188 500w, https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=jpg&fit=scale&q=75&w=700&h=263 700w, https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=jpg&fit=scale&q=75&w=900&h=338 900w, https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png?fm=jpg&fit=scale&q=75&w=1100&h=414 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6lRcN92vvoF7YQnpFVApfq/1ba8951e8892689b5c40c82a2655e12f/Screenshot_2026-02-17_at_20.34.57.png"
                alt="Anchor Positioning, Advanced attr(), Container Style Queries, contrast-color(), Custom Highlights, Dialog and popover additions, Media pseudo-classes, Navigation API, Scroll-driven Animations, Scroll Snap, View Transitions, Web Compat"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I haven't had the time to dive in yet, but this looks like a decent list, and I might go deeper next week. I do miss <code>sizes=auto</code> for images, though.</p>
<p>But I'm not complaining, so let's get to the web dev goodies of this week!</p>
<hr aria-hidden="true"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="web-weekly-housekeeping" href="#web-weekly-housekeeping">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="web-weekly-housekeeping">Web Weekly housekeeping</h2></div><p><a href="https://webweekly.email/archive/web-weekly-182/#web-weekly-housekeeping" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwebweekly.email%2Farchive%2Fweb-weekly-182%2F%23web-weekly-housekeeping')">Last week I asked you to reply to this email</a> to check if it would improve this newsletter's open rate. And well... it was quite a week. I doxxed myself with around 60 emails hitting my inbox on the first day. Writing this newsletter sometimes feels a bit lonely, but it really reminded me of why I sit down every week. Having all these replies and conversations gave me a nice and fuzzy feeling!</p>
<p>Also, Mark, Michelle, Derek, Zoran, Evan, and Francis provided testimonials for the Web Weekly site, and Michal, Jason, and Jules started to support Web Weekly with a monthly coffee donation! <strong>A special thanks goes to all of you!</strong></p>
<p>So, thank you all for reading along and if you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mf3fnaxk5k25">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116087855699317740" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffront-end.social%2F%40stefan%2F116087855699317740')">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_the-new-web-weekly-is-just-about-to-hit-all-activity-7429622965622689792-0-7w" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.linkedin.com%2Fposts%2Fstefan-judis_the-new-web-weekly-is-just-about-to-hit-all-activity-7429622965622689792-0-7w')">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter reach more people. Thank you! ❤️</p>
<hr aria-hidden="true"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="something-that-made-me-smile-this-week" href="#something-that-made-me-smile-this-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="something-that-made-me-smile-this-week">Something that made me smile this week</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(221.44736842105263,33.55263157894736,114.07894736842115); --color2: rgb(124,124,124); --color3: rgb(237.55263157894737,139.84736842105264,181.721052631579); --color4: rgb(210,210,210); --color5: rgb(60,60,60);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgNzUiPjxwYXRoIGZpbGw9IiMzYzNjM2MiIGQ9Ik0wIDBoMzAwdjc1SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxNDAiIGN5PSIzNSIgcj0iMTQ1IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InJvdGF0ZSgtOTcuNyA3My4xIC00Nikgc2NhbGUoMTI1LjYwMTIyIDE2OC4zNDUwOCkiLz48Y2lyY2xlIGN4PSIxNDUiIGN5PSIxNyIgcj0iMTY0IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09Im1hdHJpeCgtMzAuMzM0ODcgMjcuMTIyNSAtOTAuMzczMDUgLTEwMS4wNzY3NiAyMDMgMCkiLz48cGF0aCBmaWxsPSIjNjc2NzY3IiBkPSJNMTkgMzhoMTc2djZIMTl6Ii8+PHBhdGggZmlsbD0iIzYwNjA2MCIgZD0iTTE4IDIyaDE0OXY2SDE4eiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoLTE1MS4zOTQ5NCAxLjE2NDcyIC0uMTAyOTIgLTEzLjM3NzY2IDEyMCA1Ni42KSIvPjxlbGxpcHNlIGN4PSIxNDUiIGN5PSI1IiBmaWxsPSIjZmZmIiByeD0iMjUwIiByeT0iMTYiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=avif&fit=scale&q=75&w=300&h=75 300w, https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=avif&fit=scale&q=75&w=500&h=126 500w, https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=avif&fit=scale&q=75&w=700&h=177 700w, https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=avif&fit=scale&q=75&w=900&h=227 900w, https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=avif&fit=scale&q=75&w=1100&h=278 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=webp&fit=scale&q=75&w=300&h=75 300w, https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=webp&fit=scale&q=75&w=500&h=126 500w, https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=webp&fit=scale&q=75&w=700&h=177 700w, https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=webp&fit=scale&q=75&w=900&h=227 900w, https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=webp&fit=scale&q=75&w=1100&h=278 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="253"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=jpg&fit=scale&q=75&w=300&h=75 300w, https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=jpg&fit=scale&q=75&w=500&h=126 500w, https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=jpg&fit=scale&q=75&w=700&h=177 700w, https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=jpg&fit=scale&q=75&w=900&h=227 900w, https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png?fm=jpg&fit=scale&q=75&w=1100&h=278 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6nxLvtJ1v90c3U6kWNoWNz/c3006514294442b45c5424f9f3a930f2/Screenshot_2026-02-17_at_17.27.09.png"
                alt="Git Shitstorm: How to Make Any Developer Lose Their Mind"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Look, I'm not saying that you should ever, ever use <code>git-shitstorm</code>, but the level of evilness really made me smile.</p>
<p><a class="btn btn__small" href="https://www.einenlum.com/articles/git-shitstorm/">Don't be evil</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="no-code" href="#no-code">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="no-code">No code</h2></div><ul>
<li><a href="https://cate.blog/2026/01/27/performance-reviews-are-the-scorecard-of-capitalism-and-why-that-should-free-you/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcate.blog%2F2026%2F01%2F27%2Fperformance-reviews-are-the-scorecard-of-capitalism-and-why-that-should-free-you%2F')">Performance Reviews Are the Scorecard of Capitalism</a> → &quot;If review season is the only time you hear feedback about your work, that's a problem.&quot;</li>
<li><a href="https://www.workingtheorys.com/p/notes-on-not-posting" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.workingtheorys.com%2Fp%2Fnotes-on-not-posting')">Notes on Not Posting</a> → &quot;The internet doesn't need you. It's good to be reminded of that once in a while.&quot;</li>
<li><a href="https://www.seangoedecke.com/how-i-estimate-work/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.seangoedecke.com%2Fhow-i-estimate-work%2F')">How I estimate work as a staff software engineer</a> → &quot;It is not possible to accurately estimate software work.&quot; 😱</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="use-%60%40layer%60-for-your-reset-styles" href="#use-%60%40layer%60-for-your-reset-styles">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="use-%60%40layer%60-for-your-reset-styles">Use <code>@layer</code> for your reset styles</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(203,140,110); --color2: rgb(162,116,96); --color3: rgb(219.99898477157356,177.59390862944164,157.40101522842644); --color4: rgb(175,160,194); --color5: rgb(52,66,82);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTcxIj48cGF0aCBmaWxsPSIjMzQ0MjUyIiBkPSJNMCAwaDMwMHYxNzFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0OSIgY3k9IjcwIiByPSIxOTAiIGZpbGw9IiMwMDAwMGIiLz48ZWxsaXBzZSBjeD0iMTIzIiBjeT0iNjkiIGZpbGw9IiMyOTJiMzkiIHJ4PSI0OCIgcnk9IjUzIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMDYxMDJhIiB0cmFuc2Zvcm09InJvdGF0ZSgxNzguNiAxMjcgNDcuOCkgc2NhbGUoMzQuMjY0NjEgMTY2Ljg1MjI5KSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzA2MTAyYSIgdHJhbnNmb3JtPSJtYXRyaXgoLjA0MDM4IDIyNS45MzM1IC0zNC4yNTkyNiAuMDA2MTIgMCA3Ny44KSIvPjxwYXRoIGZpbGw9IiM2ZTY2NjIiIGQ9Ik0xMDYgOTJoNDZ2NGgtNDZ6Ii8+PHBhdGggZmlsbD0iIzdhNGU5MiIgZD0iTTg0IDM5aDI3djVIODR6Ii8+PGVsbGlwc2UgY3g9IjE0MSIgY3k9IjEzOCIgZmlsbD0iIzA2MGYyOCIgcng9IjIyNSIgcnk9IjgiLz48ZWxsaXBzZSBjeD0iMTI0IiBjeT0iNiIgZmlsbD0iIzA3MTAyOCIgcng9IjE1NyIgcnk9IjgiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=avif&fit=scale&q=75&w=300&h=171 300w, https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=avif&fit=scale&q=75&w=500&h=286 500w, https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=avif&fit=scale&q=75&w=700&h=401 700w, https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=avif&fit=scale&q=75&w=900&h=515 900w, https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=avif&fit=scale&q=75&w=1100&h=630 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=webp&fit=scale&q=75&w=300&h=171 300w, https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=webp&fit=scale&q=75&w=500&h=286 500w, https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=webp&fit=scale&q=75&w=700&h=401 700w, https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=webp&fit=scale&q=75&w=900&h=515 900w, https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=webp&fit=scale&q=75&w=1100&h=630 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="573"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=jpg&fit=scale&q=75&w=300&h=171 300w, https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=jpg&fit=scale&q=75&w=500&h=286 500w, https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=jpg&fit=scale&q=75&w=700&h=401 700w, https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=jpg&fit=scale&q=75&w=900&h=515 900w, https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png?fm=jpg&fit=scale&q=75&w=1100&h=630 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2hguDSzVXpFiKUcihdh2eV/f9b6dc458d3bc6c9dae66f40317cf253/Screenshot_2026-02-17_at_19.23.28.png"
                alt="/* uaplus.css */ @layer {   h1 { color: red; } }  /* your.css */ h1 { color: blue; }  /* Result: blue */"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Confession time: I'm still not using <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@layer" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FAt-rules%2F%40layer')"><code>@layer</code></a> even though it's been baseline supported since 2022. Manuel describes how to use CSS layers to deal with CSS reset specificity. Great trick!</p>
<p><a class="btn btn__small" href="https://matuzo.at/blog/2026/lowering-specificity-of-multiple-rules">Reset layer by layer</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="%60%40scope%60-in-inline-%60%3Cstyle%3E%60-blocks" href="#%60%40scope%60-in-inline-%60%3Cstyle%3E%60-blocks">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="%60%40scope%60-in-inline-%60%3Cstyle%3E%60-blocks"><code>@scope</code> in inline <code>&lt;style&gt;</code> blocks</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(36,76,140); --color2: rgb(82,116,161); --color3: rgb(149.52272727272722,179.65909090909088,227.87727272727275); --color4: rgb(190,196,210); --color5: rgb(47,63,87);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQ3Ij48cGF0aCBmaWxsPSIjMmYzZjU3IiBkPSJNMCAwaDMwMHYxNDdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzNmN2VjZiIgdHJhbnNmb3JtPSJtYXRyaXgoLS43NDc5MiAtMzAuOTc3NCAxMTUuMjcyMDIgLTIuNzgzMTIgMTMyLjggNjEuMSkiLz48ZWxsaXBzZSBjeD0iMTM1IiBjeT0iMTE1IiBmaWxsPSIjMDgwMDAwIiByeD0iMjU1IiByeT0iMjMiLz48ZWxsaXBzZSBjeD0iMTQ2IiBjeT0iMTAiIGZpbGw9IiMwYTAyMDAiIHJ4PSIyNTUiIHJ5PSIyMCIvPjxwYXRoIGZpbGw9IiMyZjYzYTYiIGQ9Ik0xMzEgMjkgMTIgMzBsMSA2NHoiLz48cGF0aCBmaWxsPSIjMzU2NGExIiBkPSJNMTU1IDMwaDkwdjYyaC05MHoiLz48cGF0aCBmaWxsPSIjMDAwMDBmIiBkPSJtLTEuOCA5NS40IDEuNi05NyAxMiAuMi0xLjYgOTd6Ii8+PGVsbGlwc2UgY3g9IjI1MSIgY3k9IjY1IiBmaWxsPSIjMDAwMDEzIiByeD0iNiIgcnk9IjY2Ii8+PHBhdGggZmlsbD0iIzM5NjI5NiIgZD0iTTIxIDMyaDk4djYwSDIxeiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=avif&fit=scale&q=75&w=300&h=147 300w, https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=avif&fit=scale&q=75&w=500&h=246 500w, https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=avif&fit=scale&q=75&w=700&h=345 700w, https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=avif&fit=scale&q=75&w=900&h=443 900w, https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=avif&fit=scale&q=75&w=1100&h=542 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=webp&fit=scale&q=75&w=300&h=147 300w, https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=webp&fit=scale&q=75&w=500&h=246 500w, https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=webp&fit=scale&q=75&w=700&h=345 700w, https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=webp&fit=scale&q=75&w=900&h=443 900w, https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=webp&fit=scale&q=75&w=1100&h=542 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="493"
                srcset="https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=jpg&fit=scale&q=75&w=300&h=147 300w, https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=jpg&fit=scale&q=75&w=500&h=246 500w, https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=jpg&fit=scale&q=75&w=700&h=345 700w, https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=jpg&fit=scale&q=75&w=900&h=443 900w, https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png?fm=jpg&fit=scale&q=75&w=1100&h=542 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/601qwpsNG7Q1kkgQgD4ffe/a0331e071f6ca5a78a31cdee9b97df5d/Screenshot_2026-02-17_at_19.57.32.png"
                alt="DevTools showing inline styles including a `@scope` declaration"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>And speaking of styles not overwriting each other... with <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@scope" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FAt-rules%2F%40scope')"><code>@scope</code></a> entering the baseline, I could finally drop some odd class conventions so that my site's new custom components aren't clashing with the overall styles.</p>
<p>I love this! We can now drop <code>&lt;style&gt;</code> elements right into the page, use <code>@scope</code>, and the styles will be applied only to the surrounding container. Good stuff.</p>
<p>If you haven't used <code>@scope</code>, here's why you might want to prefer it over naming conventions.</p>
<p><a class="btn btn__small" href="https://www.smashingmagazine.com/2026/02/css-scope-alternative-naming-conventions/">Scope!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="%60using%60-works-in-node.js" href="#%60using%60-works-in-node.js">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="%60using%60-works-in-node.js"><code>using</code> works in Node.js</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(110,162,219); --color2: rgb(133,92,157); --color3: rgb(186,123,211); --color4: rgb(178,191,138); --color5: rgb(51,67,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTA0Ij48cGF0aCBmaWxsPSIjMzM0MzUzIiBkPSJNMCAwaDMwMHYxMDRIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjIwMCIgY3k9IjM5IiByPSIyMDYiIGZpbGw9IiMwMDAwMGIiLz48cGF0aCBmaWxsPSIjNDg0ZTVkIiBkPSJNMzkgMjloMTI1djZIMzl6Ii8+PHBhdGggZmlsbD0iIzQ5NGM1OSIgZD0iTTM2IDU1aDE5MXY0SDM2eiIvPjxlbGxpcHNlIGN4PSI5OCIgY3k9IjgyIiBmaWxsPSIjMDQwYzI2IiByeD0iMjU1IiByeT0iOCIvPjxlbGxpcHNlIGN4PSIxMTMiIGN5PSI2IiBmaWxsPSIjMDUwZTI4IiByeD0iMjU1IiByeT0iOCIvPjxwYXRoIGZpbGw9IiM0ZTUxNWQiIGQ9Im00MC41IDQ2LjMgNzcgMS40djRsLTc3LTEuNHoiLz48ZWxsaXBzZSBjeD0iOTkiIGN5PSIzNCIgZmlsbD0iIzA0MDgxNyIgcng9IjYzIiByeT0iMSIvPjxwYXRoIGZpbGw9IiM2MTNhNzQiIGQ9Im0zMyAyOS43IDIwIC43djRsLTIwLS44eiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=avif&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=avif&fit=scale&q=75&w=500&h=175 500w, https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=avif&fit=scale&q=75&w=700&h=245 700w, https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=avif&fit=scale&q=75&w=900&h=315 900w, https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=avif&fit=scale&q=75&w=1100&h=385 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=webp&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=webp&fit=scale&q=75&w=500&h=175 500w, https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=webp&fit=scale&q=75&w=700&h=245 700w, https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=webp&fit=scale&q=75&w=900&h=315 900w, https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=webp&fit=scale&q=75&w=1100&h=385 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="350"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=jpg&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=jpg&fit=scale&q=75&w=500&h=175 500w, https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=jpg&fit=scale&q=75&w=700&h=245 700w, https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=jpg&fit=scale&q=75&w=900&h=315 900w, https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png?fm=jpg&fit=scale&q=75&w=1100&h=385 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4k4YljF0VQzkw6OQkfyHuZ/6c34ab7833c1a7a8e2113ade13a9b329/Screenshot_2026-02-17_at_17.47.41.png"
                alt="using file = await openFile(&quot;data.txt&quot;);  // do something with file // file is automatically closed at the end of this scope"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I read about <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/using" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FJavaScript%2FReference%2FStatements%2Fusing')">the <code>using</code> declaration syntax</a> in early JS proposals, but thanks to Matt, I learned that it actually works in Node.js 24 today. What's <code>using</code>, though?</p>
<p>With a little bit of JS trickery and well-known symbols, objects can be cleaned up when their variables go out of scope. There's no need for <code>try/catch/finally</code> or other dances.</p>
<p>Does it work in browsers, too? We're close. Safari has yet to join the party.</p>
<p><a class="btn btn__small" href="https://allthingssmitty.com/2026/02/02/explicit-resource-management-in-javascript/">Use &quot;using&quot;</a></p>
<p><em>And if you want to go really deep into <code>using</code>, generators, and <code>WeakSets</code>/<code>WeakMaps</code>, <a href="https://piccalil.li/blog/its-about-to-get-a-lot-easier-for-your-javascript-to-clean-up-after-itself/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fpiccalil.li%2Fblog%2Fits-about-to-get-a-lot-easier-for-your-javascript-to-clean-up-after-itself%2F')">Mat has you covered over on the Piccalilli blog</a>.</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-new-era-of-customizable-%60select%60-elements" href="#the-new-era-of-customizable-%60select%60-elements">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-new-era-of-customizable-%60select%60-elements">The new era of customizable <code>select</code> elements</h2></div><p><img src="https://images.ctfassets.net/f20lfrunubsq/35bE4QrH8Edq85sjVYTFMD/d6e9bf6e674df3bd8cbe19718d9ae3ed/select.gif" alt="Demo of some very fancy and very styled select elements." loading="lazy" /></p>
<p>Adam published a post pushing all the new web and CSS features to the limit. Granted, all this <code>select</code> sugar is mainly a Chrome-only thing right now, but this post feels like a reference piece of cutting-edge CSS in 2026.</p>
<p>Put some time on your calendar and explore <code>::picker-icon</code>, <code>::checkmark</code>, <code>&lt;selectedcontent&gt;</code>, <code>@starting-style</code>, and many more new features!</p>
<p>But what about Safari and Firefox? Well, they'll render good old <code>select</code> elements like the ones we've been dealing with for the last 10 years. So no big deal.</p>
<p><a class="btn btn__small" href="https://nerdy.dev/nice-select">Select with style</a></p>
<p>And if this isn't enough <code>select</code> magic for you today, here's Brecht with <a href="https://utilitybend.com/blog/an-update-on-customizable-selects-the-multiple-select/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Futilitybend.com%2Fblog%2Fan-update-on-customizable-selects-the-multiple-select%2F')">selects that don't even look like selects anymore</a>.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-wonderful-weird-web-%E2%80%93-%60gradient.horse%60" href="#the-wonderful-weird-web-%E2%80%93-%60gradient.horse%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-wonderful-weird-web-%E2%80%93-%60gradient.horse%60">The wonderful weird web – <code>gradient<wbr>.horse</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(136,122,60); --color2: rgb(108,92,163); --color3: rgb(214.4081632653061,204.93673469387753,162.99183673469392); --color4: rgb(106.16326530612241,95.23469387755097,46.83673469387759); --color5: rgb(54,77,76);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTU1Ij48cGF0aCBmaWxsPSIjMzY0ZDRjIiBkPSJNMCAwaDMwMHYxNTVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMjMiIGN5PSI4NCIgZmlsbD0iIzg2ODVkOCIgcng9IjI1NSIgcnk9IjMwIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjYzQ5YjFlIiB0cmFuc2Zvcm09Im1hdHJpeCgtMjQzLjY4MjYgLTEuMTU3MyAuMDg5ODYgLTE4LjkyMDg3IDEyNi4xIDcuNykiLz48ZWxsaXBzZSBjeD0iMTMwIiBjeT0iMTIzIiBmaWxsPSIjN2Q2ODVlIiByeD0iMjU1IiByeT0iMTUiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiM0NTg3NzEiIHRyYW5zZm9ybT0ibWF0cml4KC0yNTUgMCAwIC0xMS4xMTQ0NCAxMTMuNiA2NC4yKSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzcyNTJiOSIgdHJhbnNmb3JtPSJtYXRyaXgoMjMxLjgzNTQ0IC43MTg2IC0uMDM3NTIgMTIuMTA0OTIgMTI3LjMgOTUuMSkiLz48cGF0aCBmaWxsPSIjNWE2MzNjIiBkPSJNMCAxOGgyNTZ2MTdIMHoiLz48ZWxsaXBzZSBjeD0iMTMwIiBjeT0iMiIgZmlsbD0iIzlkODQyZCIgcng9IjI1NSIgcnk9IjEwIi8+PHBhdGggZmlsbD0iIzEyMjQxYyIgZD0iTTExNSA1N2gxM3Y4aC0xM3oiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=avif&fit=scale&q=75&w=300&h=156 300w, https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=avif&fit=scale&q=75&w=500&h=261 500w, https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=avif&fit=scale&q=75&w=700&h=366 700w, https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=avif&fit=scale&q=75&w=900&h=470 900w, https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=avif&fit=scale&q=75&w=1100&h=575 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=webp&fit=scale&q=75&w=300&h=156 300w, https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=webp&fit=scale&q=75&w=500&h=261 500w, https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=webp&fit=scale&q=75&w=700&h=366 700w, https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=webp&fit=scale&q=75&w=900&h=470 900w, https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=webp&fit=scale&q=75&w=1100&h=575 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="523"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=jpg&fit=scale&q=75&w=300&h=156 300w, https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=jpg&fit=scale&q=75&w=500&h=261 500w, https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=jpg&fit=scale&q=75&w=700&h=366 700w, https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=jpg&fit=scale&q=75&w=900&h=470 900w, https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png?fm=jpg&fit=scale&q=75&w=1100&h=575 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4groYxzTkRYnxRWivmnX55/a6c077c3c615213b9e9ed4467d0b942d/Screenshot_2026-02-17_at_17.54.30.png"
                alt="Drawn horses on a gradient background."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>You might remember <a href="https://drawafish.com" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdrawafish.com')"><code>drawafish<wbr>.com</code></a> — an absolute internet classic. Today's wonderful weird web plug is the same thing, but with horses, music, and some CSS gradients.</p>
<p><a class="btn btn__small" href="https://gradient.horse/">Draw a horse</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-state-of-css-in-2026" href="#the-state-of-css-in-2026">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-state-of-css-in-2026">The State of CSS in 2026</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(42.50000000000002,127.49999999999993,212.49999999999997); --color2: rgb(124,132,140); --color3: rgb(144.5,188.69999999999993,232.9); --color4: rgb(193,195,197); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTEyIj48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxMTJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzBiMGIwOSIgdHJhbnNmb3JtPSJtYXRyaXgoLTIwNS4wMjY2IDQxLjY4MzQ2IC0xOS4wODk5MSAtOTMuODk2NyAxNjMuNyAzMykiLz48cGF0aCBmaWxsPSIjZjJmMmViIiBkPSJNMzAgMzBoMTYydjEySDMweiIvPjxlbGxpcHNlIGN4PSIxODIiIGN5PSIxNCIgZmlsbD0iIzA0MGQxYSIgcng9IjE1MCIgcnk9IjE5Ii8+PHBhdGggZmlsbD0iIzA1MGUxYSIgZD0iTS0xNiAzOS44IDM1LjItNy44bDM3LjQgNjguOS0xMi40LTM5Ljl6Ii8+PHBhdGggZmlsbD0iI2JjYmRiZSIgZD0iTTEwOCAzM2g3MXYxMGgtNzF6Ii8+PHBhdGggZD0iTTEwMiAyNGg2djM0aC02eiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzBhMTMxZiIgdHJhbnNmb3JtPSJtYXRyaXgoLTE1Mi4yODc1NyAxMi44Mzk0NSAtMi43ODA1NyAtMzIuOTgwMTQgMTU5LjIgNzcuOSkiLz48ZWxsaXBzZSBjeD0iMTIyIiBjeT0iNTkiIGZpbGw9IiM1NTVmNWUiIHJ4PSI5OSIgcnk9IjQiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=avif&fit=scale&q=75&w=300&h=112 300w, https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=avif&fit=scale&q=75&w=500&h=188 500w, https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=avif&fit=scale&q=75&w=700&h=263 700w, https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=avif&fit=scale&q=75&w=900&h=338 900w, https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=avif&fit=scale&q=75&w=1100&h=414 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=webp&fit=scale&q=75&w=300&h=112 300w, https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=webp&fit=scale&q=75&w=500&h=188 500w, https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=webp&fit=scale&q=75&w=700&h=263 700w, https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=webp&fit=scale&q=75&w=900&h=338 900w, https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=webp&fit=scale&q=75&w=1100&h=414 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="376"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=jpg&fit=scale&q=75&w=300&h=112 300w, https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=jpg&fit=scale&q=75&w=500&h=188 500w, https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=jpg&fit=scale&q=75&w=700&h=263 700w, https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=jpg&fit=scale&q=75&w=900&h=338 900w, https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png?fm=jpg&fit=scale&q=75&w=1100&h=414 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3mWJ9rgPSHnfAibPItS6w0/e4ebcfb77a51f3b375dd61e7b9aa9e9b/Screenshot_2026-02-17_at_19.04.57.png"
                alt="The CSS Selection — The state of real-world CSS usage, 2026 edition."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>You might have noticed that <a href="https://almanac.httparchive.org/en/2025/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Falmanac.httparchive.org%2Fen%2F2025%2F')">the yearly Web Almanac</a> didn't include a CSS chapter for a couple of years, because analyzing all that data is a ton of work and things are &quot;a little complicated&quot;.</p>
<p>Bart, who maintains <a href="https://www.projectwallace.com/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.projectwallace.com%2F')">some popular CSS analyzers</a>, took the matter into his own hands and &quot;just&quot; wrote the tooling to analyze the CSS of 100k popular domains. What an initiative! ❤️</p>
<p>If you're into fun stats like the biggest discovered stylesheet being 52MB, sites with 4,858 <code>@support</code> rules, or the highest found selector specificity being <code>146,1546,159</code>, this post is for you.</p>
<p>Side note: of course, the report also includes useful stats like the one that <code>@container</code> queries were used on 10% of the crawled pages!</p>
<p><a class="btn btn__small" href="https://www.projectwallace.com/the-css-selection/2026">Analyze the web</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-logo-soup-problem" href="#the-logo-soup-problem">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-logo-soup-problem">The logo soup problem</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(79.6875,79.6875,175.3125); --color2: rgb(124,124,124); --color3: rgb(163.83749999999998,163.83749999999998,213.5625); --color4: rgb(188,188,188); --color5: rgb(52,68,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTAxIj48cGF0aCBmaWxsPSIjMzQ0NDU0IiBkPSJNMCAwaDMwMHYxMDFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgdHJhbnNmb3JtPSJtYXRyaXgoLTUuOTcwMiAxMTIuMDQwNSAtMTc0LjU0NTEgLTkuMzAwODMgMTI4IDQzKSIvPjxwYXRoIGZpbGw9IiM2MDU4NTAiIGQ9Ik0yNSAyOWgxNjF2MjZIMjV6Ii8+PGNpcmNsZSByPSIxIiB0cmFuc2Zvcm09Im1hdHJpeCg2LjAyNDMxIC0xNi45NDk2MiAzNC4xOTg1OCAxMi4xNTUwMiAyMTYuMyAyOS43KSIvPjxlbGxpcHNlIGN4PSI2NSIgY3k9IjM2IiByeD0iMTczIiByeT0iMyIvPjxlbGxpcHNlIGN4PSIxMTciIGN5PSI2MiIgcng9IjI1NSIgcnk9IjgiLz48ZWxsaXBzZSBjeD0iMTEzIiBjeT0iNDciIHJ4PSIxMzYiIHJ5PSIzIi8+PHBhdGggZD0iTTEyIDE0aDIyOHYxNEgxMnoiLz48ZWxsaXBzZSBjeD0iMTI5IiBjeT0iNTIiIGZpbGw9IiM3YTc5NzciIHJ4PSIxMDciIHJ5PSIzIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=avif&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=avif&fit=scale&q=75&w=500&h=170 500w, https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=avif&fit=scale&q=75&w=700&h=238 700w, https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=avif&fit=scale&q=75&w=900&h=306 900w, https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=avif&fit=scale&q=75&w=1100&h=374 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=webp&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=webp&fit=scale&q=75&w=500&h=170 500w, https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=webp&fit=scale&q=75&w=700&h=238 700w, https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=webp&fit=scale&q=75&w=900&h=306 900w, https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=webp&fit=scale&q=75&w=1100&h=374 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="340"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=jpg&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=jpg&fit=scale&q=75&w=500&h=170 500w, https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=jpg&fit=scale&q=75&w=700&h=238 700w, https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=jpg&fit=scale&q=75&w=900&h=306 900w, https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png?fm=jpg&fit=scale&q=75&w=1100&h=374 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6CmV3or9TSXiEIHZfSe92B/f33b5e06e6485b3e5d98b7ecf0ffbed0/Screenshot_2026-02-17_at_19.44.59.png"
                alt="A deep dive into the math behind making mismatched brand logos actually look good together. And a tiny React library that does it for you."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you're working in startup land like I do, you usually have a logo collection showing off how many big brands use your product somewhere on the marketing site. And most of the time, these logo clouds (lanes? soups?) look terrible because all the logos have different ratios, heights, and perceived weights.</p>
<p>Sanity released a React library to tame this problem using &quot;the Proportional Image Normalization Formula&quot;. Use these words if you want to sound smart at parties.</p>
<p>Regardless, I added the component to the WW site and it works great!</p>
<p><a class="btn btn__small" href="https://www.sanity.io/blog/the-logo-soup-problem">Align all these icons</a></p>
<p><em>And if you prefer vanilla JS, <a href="https://github.com/auroris/logo-soup" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fauroris%2Flogo-soup')">here's a port of the algorithm</a>.</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="throttle%2Fblock-individual-requests-in-chrome-devtools" href="#throttle%2Fblock-individual-requests-in-chrome-devtools">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="throttle%2Fblock-individual-requests-in-chrome-devtools">Throttle/block individual requests in Chrome DevTools</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(45,170,235); --color2: rgb(115,123,123); --color3: rgb(231,210,72); --color4: rgb(166,177,198); --color5: rgb(36,57,80);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTMxIj48cGF0aCBmaWxsPSIjMjQzOTUwIiBkPSJNMCAwaDMwMHYxMzFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxNzIiIGN5PSI3OCIgZmlsbD0iIzMwMWMxMCIgcng9IjI1NSIgcnk9IjQyIi8+PHBhdGggZmlsbD0iI2ZmNTk1YSIgZD0iTTkxIDcxaDY0djZIOTF6Ii8+PGVsbGlwc2UgY3g9IjE0NSIgY3k9IjUiIGZpbGw9IiMwNzAwMDYiIHJ4PSIyNTUiIHJ5PSI4Ii8+PHBhdGggZmlsbD0iIzAwN2M5MiIgZD0iTTE2MyAyMWg4NHYxNmgtODR6Ii8+PHBhdGggZmlsbD0iIzBkNzM5YSIgZD0iTTE0IDIxaDcydjE2SDE0eiIvPjxlbGxpcHNlIGN4PSIxMDUiIGN5PSIxMDgiIGZpbGw9IiMwMDA0MjUiIHJ4PSIyNTUiIHJ5PSI4Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMDAwODFmIiB0cmFuc2Zvcm09Im1hdHJpeCgxMC40MDQwMyAuNDM2NjUgLTMuMTk3NzcgNzYuMTkyNjggMCA3NS41KSIvPjxlbGxpcHNlIGN4PSIyNTQiIGN5PSI2MiIgZmlsbD0iIzAwMDUyMSIgcng9IjgiIHJ5PSIxMDMiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=avif&fit=scale&q=75&w=300&h=132 300w, https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=avif&fit=scale&q=75&w=500&h=220 500w, https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=avif&fit=scale&q=75&w=700&h=308 700w, https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=avif&fit=scale&q=75&w=900&h=396 900w, https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=avif&fit=scale&q=75&w=1100&h=484 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=webp&fit=scale&q=75&w=300&h=132 300w, https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=webp&fit=scale&q=75&w=500&h=220 500w, https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=webp&fit=scale&q=75&w=700&h=308 700w, https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=webp&fit=scale&q=75&w=900&h=396 900w, https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=webp&fit=scale&q=75&w=1100&h=484 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="440"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=jpg&fit=scale&q=75&w=300&h=132 300w, https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=jpg&fit=scale&q=75&w=500&h=220 500w, https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=jpg&fit=scale&q=75&w=700&h=308 700w, https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=jpg&fit=scale&q=75&w=900&h=396 900w, https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png?fm=jpg&fit=scale&q=75&w=1100&h=484 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1fqb8rNFiMoTEmVlrcFy25/3ff747134c97068af511aba366f14b9f/Screenshot_2026-02-17_at_20.23.36.png"
                alt="Chrome DevTools showing the menu to throttle a request."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Quick reminder: if you want to debug if and how certain resources affect rendering, Chrome DevTools allows you to throttle/block individual resources.</p>
<p><a class="btn btn__small" href="https://developer.chrome.com/blog/throttle-individual-network-requests">Block rendering</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="on-reusable-os-font-sizes-in-browsers..." href="#on-reusable-os-font-sizes-in-browsers...">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="on-reusable-os-font-sizes-in-browsers...">On reusable OS font sizes in browsers...</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(199,139,111); --color2: rgb(155,113,93); --color3: rgb(183,121,208); --color4: rgb(170,178,186); --color5: rgb(52,66,82);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTEzIj48cGF0aCBmaWxsPSIjMzQ0MjUyIiBkPSJNMCAwaDMwMHYxMTNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyNCIgY3k9IjU3IiByPSIxNDUiIGZpbGw9IiMwMDAwMGMiLz48cGF0aCBmaWxsPSIjMmYzMjNmIiBkPSJtMTQwIDMzLjItNjEuMSAzMC01My45LS45LTkuNy00NXoiLz48ZWxsaXBzZSBjeD0iMTI1IiBjeT0iNDciIGZpbGw9IiM0ZjVlNmQiIHJ4PSIxMjAiIHJ5PSIyIi8+PGVsbGlwc2UgY3g9IjEyNyIgY3k9IjkwIiBmaWxsPSIjMDQwZDI2IiByeD0iMjU1IiByeT0iOCIvPjxlbGxpcHNlIGN4PSIxMjAiIGN5PSIxIiBmaWxsPSIjMDUwZTI3IiByeD0iMjU1IiByeT0iMTAiLz48ZWxsaXBzZSBjeD0iNDMiIGN5PSIyNyIgZmlsbD0iIzQ2NGQ1ZCIgcng9IjU1IiByeT0iMiIvPjxwYXRoIGZpbGw9IiMwYzE0MjkiIGQ9Im04IDExMy40LTMzLjUtNi41IDE3LjYtOTAuMyAzMy40IDYuNXoiLz48cGF0aCBmaWxsPSIjMDYwZjI4IiBkPSJtMjY3LjcgMTAuMi0xLjQgODAtMjQtLjQgMS40LTgweiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=avif&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=avif&fit=scale&q=75&w=500&h=190 500w, https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=avif&fit=scale&q=75&w=700&h=266 700w, https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=avif&fit=scale&q=75&w=900&h=342 900w, https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=avif&fit=scale&q=75&w=1100&h=418 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=webp&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=webp&fit=scale&q=75&w=500&h=190 500w, https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=webp&fit=scale&q=75&w=700&h=266 700w, https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=webp&fit=scale&q=75&w=900&h=342 900w, https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=webp&fit=scale&q=75&w=1100&h=418 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="380"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=jpg&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=jpg&fit=scale&q=75&w=500&h=190 500w, https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=jpg&fit=scale&q=75&w=700&h=266 700w, https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=jpg&fit=scale&q=75&w=900&h=342 900w, https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png?fm=jpg&fit=scale&q=75&w=1100&h=418 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/7emy26qv799NPZj49tSrPg/a14532d1da448fdf96aaf71f1675de38/Screenshot_2026-02-17_at_18.52.39.png"
                alt="body {   font: -apple-system-body;   /* other styles, including font-family */ } @supports (font: -apple-system-body) and (not (-webkit-touch-callout: default)) {   :root {     font-size: 100%;   } }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Last week I plugged the <a href="https://webweekly.email/archive/web-weekly-182/#a-new-meta-element-is-coming-to-town" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwebweekly.email%2Farchive%2Fweb-weekly-182%2F%23a-new-meta-element-is-coming-to-town')">new <code>text-scale</code> element</a>, which enables Chrome to also bump up the font size if folks have increased font size settings in their OS.</p>
<p>So far so good. Adrian had a deeper look at how this behavior could work across all browser engines. And things are complicated. Or as he puts it, a bit Frankenstyle.</p>
<p><a class="btn btn__small" href="https://adrianroselli.com/2026/02/honoring-mobile-os-text-size.html">Honor the OS settings</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="random-mdn-%E2%80%93-%60%3Csearch%3E%60" href="#random-mdn-%E2%80%93-%60%3Csearch%3E%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="random-mdn-%E2%80%93-%60%3Csearch%3E%60">Random MDN – <code>&lt;search&gt;</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(201,154,107); --color2: rgb(135,120,121); --color3: rgb(204,113,114); --color4: rgb(160,191,129); --color5: rgb(52,66,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTcxIj48cGF0aCBmaWxsPSIjMzQ0MjU0IiBkPSJNMCAwaDMwMHYxNzFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0OSIgY3k9Ijc3IiByPSIxNzQiIGZpbGw9IiMwMDAwMDkiLz48ZWxsaXBzZSBjeD0iODgiIGN5PSI3MSIgZmlsbD0iIzNkMzIzZSIgcng9IjI3IiByeT0iNDUiLz48cGF0aCBmaWxsPSIjNjk2Njc0IiBkPSJNODEgNDFoOTR2NUg4MXoiLz48cGF0aCBmaWxsPSIjNjg2MTUwIiBkPSJNMTgwLjUgNjIuNXY1aC05OXYtNXoiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwNjEwMmEiIHRyYW5zZm9ybT0icm90YXRlKDQuOCAtMTI5LjQgMzA2NC4yKSBzY2FsZSgzMS45MzI4NCAxNjguNTE2NCkiLz48ZWxsaXBzZSBjeD0iMTIiIGN5PSI3OCIgZmlsbD0iIzA1MGYyOSIgcng9IjIyIiByeT0iMTQ1Ii8+PHBhdGggZmlsbD0iIzBkMTkyOCIgZD0iTTY4IDEwNCA1NCA0M2wzNyAyNHoiLz48ZWxsaXBzZSBjeD0iMTI5IiBjeT0iMTQ1IiBmaWxsPSIjMDYwZjI4IiByeD0iMjU1IiByeT0iMTciLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=avif&fit=scale&q=75&w=300&h=171 300w, https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=avif&fit=scale&q=75&w=500&h=286 500w, https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=avif&fit=scale&q=75&w=700&h=401 700w, https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=avif&fit=scale&q=75&w=900&h=515 900w, https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=avif&fit=scale&q=75&w=1100&h=630 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=webp&fit=scale&q=75&w=300&h=171 300w, https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=webp&fit=scale&q=75&w=500&h=286 500w, https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=webp&fit=scale&q=75&w=700&h=401 700w, https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=webp&fit=scale&q=75&w=900&h=515 900w, https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=webp&fit=scale&q=75&w=1100&h=630 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="573"
                srcset="https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=jpg&fit=scale&q=75&w=300&h=171 300w, https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=jpg&fit=scale&q=75&w=500&h=286 500w, https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=jpg&fit=scale&q=75&w=700&h=401 700w, https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=jpg&fit=scale&q=75&w=900&h=515 900w, https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png?fm=jpg&fit=scale&q=75&w=1100&h=630 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/fgaBV2AChyGUPtwqE2RfE/4c42f1a51cbcb403d96e587a9a30e6dc/Screenshot_2026-02-17_at_19.32.15.png"
                alt="HTML form including the `search` element."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>From the unlimited MDN knowledge archive...</p>
<p>I caught myself thinking &quot;Right! There is a <code>search</code> element in HTML&quot; this week. I had kind of forgotten about it (don't judge). So here's a reminder about the power of semantic HTML.</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/search">Search with semantics</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-recap-%E2%80%93-header%2Ffooter-elements-can-change-their-assigned-aria-role" href="#til-recap-%E2%80%93-header%2Ffooter-elements-can-change-their-assigned-aria-role">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-recap-%E2%80%93-header%2Ffooter-elements-can-change-their-assigned-aria-role">TIL recap – header/footer elements can change their assigned ARIA role</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(251,182,22); --color2: rgb(177,149,86); --color3: rgb(251,219,62); --color4: rgb(205,218,226); --color5: rgb(40,60,70);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTUyIj48cGF0aCBmaWxsPSIjMjgzYzQ2IiBkPSJNMCAwaDMwMHYxNTJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE1OCIgY3k9IjEwMSIgcj0iMTk2IiBmaWxsPSIjZmZmIi8+PGVsbGlwc2UgY3g9IjUxIiBjeT0iNjUiIHJ4PSIzNyIgcnk9IjU2Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09Im1hdHJpeCgtOC4yMDQxNiAtMTY1LjI1NDk0IDExNS4yNTc5MyAtNS43MjIwNCAyMDEuNiA3NS40KSIvPjxjaXJjbGUgY3g9IjIwNCIgY3k9IjcxIiByPSIxMTgiIGZpbGw9IiNmZmYiLz48ZWxsaXBzZSBjeD0iMSIgY3k9IjU2IiBmaWxsPSIjZmZmIiByeD0iMTUiIHJ5PSIxMjkiLz48cGF0aCBkPSJNMTUgMTNoNzJ2MTA2SDE1eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDExN2gyNTZ2MTNIMHoiLz48ZWxsaXBzZSBjeD0iODciIGN5PSI0IiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iOCIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=avif&fit=scale&q=75&w=300&h=153 300w, https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=avif&fit=scale&q=75&w=500&h=255 500w, https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=avif&fit=scale&q=75&w=700&h=357 700w, https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=avif&fit=scale&q=75&w=900&h=459 900w, https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=avif&fit=scale&q=75&w=1100&h=561 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=webp&fit=scale&q=75&w=300&h=153 300w, https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=webp&fit=scale&q=75&w=500&h=255 500w, https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=webp&fit=scale&q=75&w=700&h=357 700w, https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=webp&fit=scale&q=75&w=900&h=459 900w, https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=webp&fit=scale&q=75&w=1100&h=561 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="510"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=jpg&fit=scale&q=75&w=300&h=153 300w, https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=jpg&fit=scale&q=75&w=500&h=255 500w, https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=jpg&fit=scale&q=75&w=700&h=357 700w, https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=jpg&fit=scale&q=75&w=900&h=459 900w, https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg?fm=jpg&fit=scale&q=75&w=1100&h=561 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1H8CPfkGJnjgmB6JmL299m/248fa332ced66a9eeb2c164618875a14/sectionheader.jpg"
                alt="The `header` element gets the role &quot;banner&quot; on the root level but `sectionheader` or `generic` when being nested in a `main` element."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Speaking of semantic markup, if you use elements like <code>header</code> or <code>footer</code>, they get some specific ARIA roles applied. It's <code>banner</code> for <code>header</code> elements and <code>contentinfo</code> for <code>footer</code> elements.</p>
<p>But do you know that these elements can change their role depending on where they're placed in the DOM? There's been a rather recent change to the ARIA spec, and browsers have started to ship it!</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/header-and-footer-elements-lose-their-roles-in-sectioning-content/">Check the roles</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-scroll-%22stuff%22-in-the-baseline" href="#new-scroll-%22stuff%22-in-the-baseline">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-scroll-%22stuff%22-in-the-baseline">New scroll &quot;stuff&quot; in the baseline</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(99,172,235); --color2: rgb(78,133,173); --color3: rgb(226,107,116); --color4: rgb(172,176,188); --color5: rgb(51,67,90);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgOTciPjxwYXRoIGZpbGw9IiMzMzQzNWEiIGQ9Ik0wIDBoMzAwdjk3SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxNDAiIGN5PSIzMiIgcj0iMTY0IiBmaWxsPSIjMDAwMDA2Ii8+PHBhdGggZmlsbD0iIzU5NzE3ZSIgZD0iTTM4IDI4aDE0MHY0SDM4eiIvPjxwYXRoIGZpbGw9IiM0YjUwNmIiIGQ9Ik0zNyA0OGgxMTZ2NUgzN3oiLz48ZWxsaXBzZSBjeD0iMTMxIiBjeT0iNzYiIGZpbGw9IiMwMzBjMjUiIHJ4PSIyNTUiIHJ5PSI4Ii8+PGVsbGlwc2UgY3g9IjEyNSIgY3k9IjUiIGZpbGw9IiMwNjBmMjgiIHJ4PSIyNDAiIHJ5PSI2Ii8+PGVsbGlwc2UgY3g9IjE2NiIgY3k9IjMwIiBmaWxsPSIjNDQzYjNjIiByeD0iNjkiIHJ5PSIzIi8+PHBhdGggZmlsbD0iIzI5NTA3OSIgZD0iTTQwIDI3aDU3djZINDB6Ii8+PHBhdGggZmlsbD0iIzFhMWYyYyIgZD0ibTEyOCA2MCAyOS00NCA4IDQ1eiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=avif&fit=scale&q=75&w=300&h=97 300w, https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=avif&fit=scale&q=75&w=500&h=163 500w, https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=avif&fit=scale&q=75&w=700&h=228 700w, https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=avif&fit=scale&q=75&w=900&h=293 900w, https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=avif&fit=scale&q=75&w=1100&h=359 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=webp&fit=scale&q=75&w=300&h=97 300w, https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=webp&fit=scale&q=75&w=500&h=163 500w, https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=webp&fit=scale&q=75&w=700&h=228 700w, https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=webp&fit=scale&q=75&w=900&h=293 900w, https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=webp&fit=scale&q=75&w=1100&h=359 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="326"
                srcset="https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=jpg&fit=scale&q=75&w=300&h=97 300w, https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=jpg&fit=scale&q=75&w=500&h=163 500w, https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=jpg&fit=scale&q=75&w=700&h=228 700w, https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=jpg&fit=scale&q=75&w=900&h=293 900w, https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png?fm=jpg&fit=scale&q=75&w=1100&h=359 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/51ou9X9tKy3C60y3bNHa8i/0db5fe5e53da7b57f2915b122d23c56b/Screenshot_2026-02-17_at_20.25.50.png"
                alt="addEventListener(&quot;scrollend&quot;, (event) =&gt; { })  onscrollend = (event) =&gt; { }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you ever wanted to listen to a scroll end event, now you can. With Safari 26.2, <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollend_event" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FAPI%2FElement%2Fscrollend_event')"><code>scrollend</code> entered the baseline</a>!</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(210,154,100); --color2: rgb(164,124,91); --color3: rgb(225.165,188.03699999999998,152.23499999999999); --color4: rgb(169,177,186); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQyIj48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxNDJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE3MCIgY3k9IjE2IiByPSIyMjUiIGZpbGw9IiMwNDAxMGEiLz48ZWxsaXBzZSBjeD0iMTQ5IiBjeT0iNjgiIGZpbGw9IiM2ZDYxNTciIHJ4PSI5NyIgcnk9IjQiLz48cGF0aCBmaWxsPSIjNmM2ODY3IiBkPSJNNTIgNTRoOTN2NUg1MnoiLz48cGF0aCBmaWxsPSIjNjY1NDQ1IiBkPSJNMzkgNDFoNTV2NkgzOXoiLz48ZWxsaXBzZSBjeD0iMjM4IiBjeT0iODciIGZpbGw9IiMwZDE2MmEiIHJ4PSIyNSIgcnk9IjEyMSIvPjxlbGxpcHNlIGN4PSIxMDUiIGN5PSIxMTciIGZpbGw9IiMwNTBmMjYiIHJ4PSIyNTUiIHJ5PSIxMyIvPjxlbGxpcHNlIGN4PSIxMDYiIGZpbGw9IiMwNzEyMjkiIHJ4PSIyNTUiIHJ5PSIyMCIvPjxlbGxpcHNlIGN4PSI2OCIgY3k9IjY5IiBmaWxsPSIjNTQ2MTczIiByeD0iMjIiIHJ5PSIzIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=avif&fit=scale&q=75&w=300&h=144 300w, https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=avif&fit=scale&q=75&w=500&h=240 500w, https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=avif&fit=scale&q=75&w=700&h=336 700w, https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=avif&fit=scale&q=75&w=900&h=432 900w, https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=avif&fit=scale&q=75&w=1100&h=528 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=webp&fit=scale&q=75&w=300&h=144 300w, https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=webp&fit=scale&q=75&w=500&h=240 500w, https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=webp&fit=scale&q=75&w=700&h=336 700w, https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=webp&fit=scale&q=75&w=900&h=432 900w, https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=webp&fit=scale&q=75&w=1100&h=528 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="480"
                srcset="https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=jpg&fit=scale&q=75&w=300&h=144 300w, https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=jpg&fit=scale&q=75&w=500&h=240 500w, https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=jpg&fit=scale&q=75&w=700&h=336 700w, https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=jpg&fit=scale&q=75&w=900&h=432 900w, https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png?fm=jpg&fit=scale&q=75&w=1100&h=528 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/12JYwHj7vZFGdwOBKONq9v/e7f4988885677986c1dd7fbca65e5e45/Screenshot_2026-02-17_at_20.28.28.png"
                alt=".scroller {   width: 300px;   height: 100px;   overflow-y: scroll;   scrollbar-color: #000077 #bada55; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>And if colored scrollbars are your thing, <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/scrollbar-color" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FProperties%2Fscrollbar-color')"><code>scrollbar-color</code></a> works across browsers now, too!</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="three-valuable-projects-to-have-a-look-at" href="#three-valuable-projects-to-have-a-look-at">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="three-valuable-projects-to-have-a-look-at">Three valuable projects to have a look at</h2></div><ul>
<li><a href="https://github.com/williamtroup/Heat.js" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fwilliamtroup%2FHeat.js')">williamtroup/Heat.js</a> – A JavaScript library for generating interactive heatmaps.</li>
<li><a href="https://github.com/macaly/almostnode" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fmacaly%2Falmostnode')">macaly/almostnode</a> – Node.js in your browser. 👈 This is very cool!</li>
<li><a href="https://github.com/griddy-icons/griddy-icons" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fgriddy-icons%2Fgriddy-icons')">griddy-icons/griddy-icons</a> – A lightweight icon library.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-tiny-helper" href="#a-new-tiny-helper">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-tiny-helper">A new Tiny Helper</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(127.5,127.5,127.5); --color2: rgb(124,124,132); --color3: rgb(188.7,188.7,188.7); --color4: rgb(188,188,188); --color5: rgb(60,60,68);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY5Ij48cGF0aCBmaWxsPSIjM2MzYzQ0IiBkPSJNMCAwaDMwMHYxNjlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMzciIGN5PSI2OSIgcng9IjIxOSIgcnk9IjEwNCIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xODUgOTBoMzh2MTNoLTM4eiIvPjxwYXRoIGZpbGw9IiNkY2RjZGEiIGQ9Ik0xMDQgMzBoNjd2MTZoLTY3eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xODUgOTBoMzN2MTJoLTMzeiIvPjxjaXJjbGUgcj0iMSIgdHJhbnNmb3JtPSJyb3RhdGUoLTM3LjYgMTcyIC0zMTMuNSkgc2NhbGUoNDEuOTY5MyA5Ny4yMTU4MykiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwNTA1MDUiIHRyYW5zZm9ybT0ibWF0cml4KDUyLjQ4MjAxIDQuMTQ1MzUgLTE1Ljc5OTY2IDIwMC4wMzA4NCAyOCA3NC43KSIvPjxlbGxpcHNlIGN4PSIxNDUiIGN5PSIxMzIiIGZpbGw9IiMwMjAyMDMiIHJ4PSIyNTUiIHJ5PSIyNSIvPjxwYXRoIGZpbGw9IiNhNGE0YTQiIGQ9Ik0zMSA4NWgxODd2M0gzMXoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=avif&fit=scale&q=75&w=300&h=169 300w, https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=avif&fit=scale&q=75&w=500&h=283 500w, https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=avif&fit=scale&q=75&w=700&h=396 700w, https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=avif&fit=scale&q=75&w=900&h=509 900w, https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=avif&fit=scale&q=75&w=1100&h=623 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=webp&fit=scale&q=75&w=300&h=169 300w, https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=webp&fit=scale&q=75&w=500&h=283 500w, https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=webp&fit=scale&q=75&w=700&h=396 700w, https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=webp&fit=scale&q=75&w=900&h=509 900w, https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=webp&fit=scale&q=75&w=1100&h=623 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="566"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=jpg&fit=scale&q=75&w=300&h=169 300w, https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=jpg&fit=scale&q=75&w=500&h=283 500w, https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=jpg&fit=scale&q=75&w=700&h=396 700w, https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=jpg&fit=scale&q=75&w=900&h=509 900w, https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png?fm=jpg&fit=scale&q=75&w=1100&h=623 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6ejUYHfB5eNld1auFQSh7f/1a011960bdc788c59751365f029b4489/Screenshot_2026-02-17_at_17.19.36.png"
                alt="./npmx canary — a fast, modern browser for the npm registry"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you're slightly worried about <code>npm</code> and <code>npmjs<wbr>.com</code>, you're not alone. Especially since the website doesn't seem to have received updates in ages. <code>npmx</code> is a modern alternative built by the community. The site looks very slick, and especially the file explorer is such an improvement!</p>
<p>It stands out that the project isn't much older than a month and has already gathered 178 contributors. Is this one of the rare examples showing that open source and community-led efforts work? I hope so!</p>
<p><a class="btn btn__small" href="https://npmx.dev">Browse packages</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more single-purpose online tools on <a href="https://tiny-helpers.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ftiny-helpers.dev%2F')">tiny-helpers.dev</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="thought-of-the-week" href="#thought-of-the-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="thought-of-the-week">Thought of the week</h2></div><p>I keep thinking about <a href="https://www.anildash.com/2026/01/05/a-tech-career-in-2026/#:~:text=don%E2%80%99t%20let%20your%20job%20get%20in%20the%20way%20of%20your%20career" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.anildash.com%2F2026%2F01%2F05%2Fa-tech-career-in-2026%2F%23%3A~%3Atext%3Ddon%25E2%2580%2599t%2520let%2520your%2520job%2520get%2520in%2520the%2520way%2520of%2520your%2520career')">Anil's quote</a>, it's such a smart and wise take.</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <blockquote>
<p>Don't let your job get in the way of your career.</p>
</blockquote>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="did-you-learn-something-from-this-issue%3F" href="#did-you-learn-something-from-this-issue%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="did-you-learn-something-from-this-issue%3F">Did you learn something from this issue?</h2></div><p>❤️ If so, <strong>join 37 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="this-is-all%2C-friends!" href="#this-is-all%2C-friends!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="this-is-all%2C-friends!">This is all, friends!</h2></div><p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr aria-hidden="true"><p>And with that, take care of yourself — mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Web Weekly #183">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Web Weekly #182 (#blogPost)</title>
      <link href="https://www.stefanjudis.com/blog/web-weekly-182/"/>
      <published>2026-02-01T23:00:00+00:00</published>
      <updated>2026-02-01T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/blog/web-weekly-182/</id>
      <category term="blogPost"></category>
        <category term="Newsletter"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="guten-tag!-guten-tag!-%F0%9F%91%8B" href="#guten-tag!-guten-tag!-%F0%9F%91%8B">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="guten-tag!-guten-tag!-%F0%9F%91%8B">Guten Tag! Guten Tag! 👋</h2></div><p>Have you had a look at the new Navigation API (baseline newly available) already? Do you know about the <code>formmethod</code> and <code>formaction</code> HTML attributes? And are you as excited about custom invoker commands as I am?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <p><a href="https://mikeriley.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fmikeriley.dev%2F')">Mike</a> listens to <a href="https://www.youtube.com/watch?v=0k8iE0Q8qBI" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D0k8iE0Q8qBI')">&quot;Is It Making You Feel Something?&quot; by Superchunk</a> and says:</p>
<blockquote>
<p>One of my all-time favorite bands put out a new record this year, and the title track is a simple instant classic with a fun little chorus.</p>
</blockquote>
</div><p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>five more songs</strong> left in the queue.</p>
<hr aria-hidden="true"><p><a href="https://css-tricks.com/how-to-style-the-new-search-text-and-other-highlight-pseudo-elements/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcss-tricks.com%2Fhow-to-style-the-new-search-text-and-other-highlight-pseudo-elements%2F')">Daniel blogged about highlight pseudo-elements</a>. And if you don't know what they're about, don't worry, I learned a ton, too!</p>
<p>The commonly known one is probably <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::selection" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FSelectors%2F%3A%3Aselection')"><code>::selection</code></a> to style the text someone marks on a page.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(227,107,116); --color2: rgb(158,83,94); --color3: rgb(208,153,99); --color4: rgb(169,177,186); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQwIj48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxNDBIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjY5IiBjeT0iNTAiIHI9IjIxNSIgZmlsbD0iIzA0MDIwYSIvPjxlbGxpcHNlIGN4PSIxMzEiIGN5PSI2NCIgZmlsbD0iIzY2NjM2NiIgcng9IjcyIiByeT0iNCIvPjxwYXRoIGZpbGw9IiMzYTQ2NGYiIGQ9Im01MSAzNi42IDE5LjEgMTcuOCA1MC4yLjYgMTEuNi0yMS43eiIvPjxlbGxpcHNlIGN4PSIxMTEiIGN5PSIxMTIiIGZpbGw9IiMwNTBlMjYiIHJ4PSIyNTUiIHJ5PSIxMiIvPjxlbGxpcHNlIGN4PSIxMjAiIGN5PSI2IiBmaWxsPSIjMDYxMDI4IiByeD0iMjU1IiByeT0iOCIvPjxwYXRoIGZpbGw9IiMwZDBmMWQiIGQ9Ik01OCA0Mmg3MXY2SDU4eiIvPjxwYXRoIGZpbGw9IiMyZTZhNzgiIGQ9Ik03NSAzNmg0NnY1SDc1eiIvPjxwYXRoIGZpbGw9IiM3YjVlNDkiIGQ9Ik0xMDUgNDloMTh2NmgtMTh6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=avif&fit=scale&q=75&w=300&h=141 300w, https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=avif&fit=scale&q=75&w=500&h=235 500w, https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=avif&fit=scale&q=75&w=700&h=329 700w, https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=avif&fit=scale&q=75&w=900&h=423 900w, https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=avif&fit=scale&q=75&w=1100&h=517 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=webp&fit=scale&q=75&w=300&h=141 300w, https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=webp&fit=scale&q=75&w=500&h=235 500w, https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=webp&fit=scale&q=75&w=700&h=329 700w, https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=webp&fit=scale&q=75&w=900&h=423 900w, https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=webp&fit=scale&q=75&w=1100&h=517 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="470"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=jpg&fit=scale&q=75&w=300&h=141 300w, https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=jpg&fit=scale&q=75&w=500&h=235 500w, https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=jpg&fit=scale&q=75&w=700&h=329 700w, https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=jpg&fit=scale&q=75&w=900&h=423 900w, https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png?fm=jpg&fit=scale&q=75&w=1100&h=517 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2HXHL8OWs9mjog99eYECxL/e27180f0b0cc33fe46948e8598b2fb10/Screenshot_2026-02-02_at_15.41.38.png"
                alt="p::selection {   color: red;   background-color: yellow; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>But wait for it, there are also a lot of funkier ones.</p>
<p>There's <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::target-text" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FSelectors%2F%3A%3Atarget-text')"><code>::target-text</code></a> (baseline newly available) which you can use to <a href="https://developer.mozilla.org/en-US/docs/Web/URI/Reference/Fragment/Text_fragments" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FURI%2FReference%2FFragment%2FText_fragments')">style highlights defined in the URL</a> (<code>#:~:text=hello</code>):</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(226,107,116); --color2: rgb(132,84,156); --color3: rgb(196,123,220); --color4: rgb(169,177,186); --color5: rgb(47,60,80);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTMyIj48cGF0aCBmaWxsPSIjMmYzYzUwIiBkPSJNMCAwaDMwMHYxMzJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE1NiIgY3k9IjU2IiByPSIxNjgiIGZpbGw9IiMwMjAyMGUiLz48ZWxsaXBzZSBjeD0iMTIyIiBjeT0iNDkiIGZpbGw9IiM2YjcxN2MiIHJ4PSI4OSIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iODAiIGN5PSI0OCIgZmlsbD0iIzQxM2E0MyIgcng9IjQxIiByeT0iMTciLz48ZWxsaXBzZSBjeD0iMTEyIiBjeT0iMTA2IiBmaWxsPSIjMDUwZTI2IiByeD0iMjU1IiByeT0iMTEiLz48ZWxsaXBzZSBjeD0iNzEiIGN5PSIzNiIgZmlsbD0iIzdjNDA0ZiIgcng9IjMzIiByeT0iMyIvPjxwYXRoIGZpbGw9IiM2MDVhNTgiIGQ9Ik00OSA1OWg2OHY0SDQ5eiIvPjxlbGxpcHNlIGN4PSIxMjIiIGN5PSI0OCIgZmlsbD0iIzRlNTc2NiIgcng9IjgxIiByeT0iMyIvPjxlbGxpcHNlIGN4PSIyMCIgY3k9IjMzIiBmaWxsPSIjMTIxYTJjIiByeD0iMzEiIHJ5PSIxMDUiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=avif&fit=scale&q=75&w=300&h=132 300w, https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=avif&fit=scale&q=75&w=500&h=221 500w, https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=avif&fit=scale&q=75&w=700&h=310 700w, https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=avif&fit=scale&q=75&w=900&h=398 900w, https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=avif&fit=scale&q=75&w=1100&h=487 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=webp&fit=scale&q=75&w=300&h=132 300w, https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=webp&fit=scale&q=75&w=500&h=221 500w, https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=webp&fit=scale&q=75&w=700&h=310 700w, https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=webp&fit=scale&q=75&w=900&h=398 900w, https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=webp&fit=scale&q=75&w=1100&h=487 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="443"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=jpg&fit=scale&q=75&w=300&h=132 300w, https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=jpg&fit=scale&q=75&w=500&h=221 500w, https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=jpg&fit=scale&q=75&w=700&h=310 700w, https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=jpg&fit=scale&q=75&w=900&h=398 900w, https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png?fm=jpg&fit=scale&q=75&w=1100&h=487 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1UwworZC6HJxVVxVZGDun0/821562cd88befbaaf163e1dedcd24b0e/Screenshot_2026-02-02_at_15.46.28.png"
                alt="::target-text {   background-color: rebeccapurple;   color: white; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Then there's <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::highlight" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FSelectors%2F%3A%3Ahighlight')"><code>::highlight()</code></a> (almost baseline ready — Firefox has some minor issues) to add custom text highlights to your page. You might now wonder when to use this feature; <a href="https://github.com/andreruffert/syntax-highlight-element" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fandreruffert%2Fsyntax-highlight-element')">the <code>&lt;syntax-highlight /&gt;</code> element</a> provides code highlights without the usual <code>span</code> soup.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(227,107,116); --color2: rgb(132,84,155); --color3: rgb(196,123,220); --color4: rgb(171,179,188); --color5: rgb(45,60,80);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTI2Ij48cGF0aCBmaWxsPSIjMmQzYzUwIiBkPSJNMCAwaDMwMHYxMjZIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjExNCIgY3k9IjEwMyIgcj0iMTgxIiBmaWxsPSIjMDcwMzEwIi8+PHBhdGggZmlsbD0iIzQ2M2Y0YyIgZD0iTTY3IDMyaDExOHYzMEg2N3oiLz48ZWxsaXBzZSBjeD0iMTI0IiBjeT0iMzUiIGZpbGw9IiM3MjQwNjEiIHJ4PSI3MSIgcnk9IjMiLz48cGF0aCBmaWxsPSIjMDcxMzFmIiBkPSJNMTMyIDM4aDU2djE5aC01NnoiLz48cGF0aCBmaWxsPSIjNjc2NTYyIiBkPSJNNzEgNTdoMTIwdjVINzF6Ii8+PGVsbGlwc2UgY3g9IjEyNiIgY3k9IjEwNCIgZmlsbD0iIzAzMGUyNSIgcng9IjIyNSIgcnk9IjExIi8+PGVsbGlwc2UgY3g9IjExMyIgZmlsbD0iIzA0MTAyNyIgcng9IjI1NSIgcnk9IjExIi8+PHBhdGggZmlsbD0iIzA1MTIxZiIgZD0iTTY4IDUxaDY2djZINjh6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=avif&fit=scale&q=75&w=300&h=126 300w, https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=avif&fit=scale&q=75&w=500&h=211 500w, https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=avif&fit=scale&q=75&w=700&h=296 700w, https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=avif&fit=scale&q=75&w=900&h=380 900w, https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=avif&fit=scale&q=75&w=1100&h=465 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=webp&fit=scale&q=75&w=300&h=126 300w, https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=webp&fit=scale&q=75&w=500&h=211 500w, https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=webp&fit=scale&q=75&w=700&h=296 700w, https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=webp&fit=scale&q=75&w=900&h=380 900w, https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=webp&fit=scale&q=75&w=1100&h=465 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="423"
                srcset="https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=jpg&fit=scale&q=75&w=300&h=126 300w, https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=jpg&fit=scale&q=75&w=500&h=211 500w, https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=jpg&fit=scale&q=75&w=700&h=296 700w, https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=jpg&fit=scale&q=75&w=900&h=380 900w, https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png?fm=jpg&fit=scale&q=75&w=1100&h=465 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/71f0mE2Mu1dXWmRCuSRWAy/32246d43bc1c1800aa70b6616458c7a1/Screenshot_2026-02-02_at_15.50.21.png"
                alt="::highlight(rainbow-color-1) {   color: violet;   text-decoration: underline; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>There are also <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::spelling-error" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FSelectors%2F%3A%3Aspelling-error')"><code>::spelling-error</code></a> and <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/::grammar-error" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FSelectors%2F%3A%3Agrammar-error')"><code>::grammar-error</code></a>. Unfortunately, these two aren't in the baseline yet.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(83,177,193); --color2: rgb(68,129,143); --color3: rgb(157.53333333333333,210.79999999999998,219.86666666666667); --color4: rgb(137,144,153); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTU5Ij48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxNTlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzAwMDAwOCIgdHJhbnNmb3JtPSJtYXRyaXgoLTMwLjU1NjAxIDE0Ny41NDk0IC0xODMuOTkwNzYgLTM4LjEwMjY1IDExOS41IDI5LjMpIi8+PGVsbGlwc2UgY3g9IjEyNCIgY3k9Ijc3IiBmaWxsPSIjM2Y3NTdmIiByeD0iMzkiIHJ5PSIzIi8+PHBhdGggZmlsbD0iIzNhNjU3MCIgZD0iTTg2IDMxaDg2djVIODZ6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMGExMzJhIiB0cmFuc2Zvcm09Im1hdHJpeCgtMjUuMjQ3MDQgLTEuOTg2OTkgMTIuNDkzMDMgLTE1OC43Mzg5OCAyMzQuNCA4Mi4yKSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzBhMTMyYSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE3OS45IDguMiA1MCkgc2NhbGUoMjkuNDUyNSAxNTguNTYwMjkpIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMWYyMjJlIiB0cmFuc2Zvcm09Im1hdHJpeCgtLjExNDU0IC01Ni45Njk3IDI2LjgwNjI2IC0uMDUzOSAxNzggNjUpIi8+PGVsbGlwc2UgY3g9Ijc0IiBjeT0iNzAiIGZpbGw9IiMyMDI1MzAiIHJ4PSIzMiIgcnk9IjUyIi8+PGVsbGlwc2UgY3g9IjEyNyIgY3k9IjEzMiIgZmlsbD0iIzA5MTEyNyIgcng9IjIxNSIgcnk9IjEzIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=avif&fit=scale&q=75&w=300&h=159 300w, https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=avif&fit=scale&q=75&w=500&h=266 500w, https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=avif&fit=scale&q=75&w=700&h=373 700w, https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=avif&fit=scale&q=75&w=900&h=479 900w, https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=avif&fit=scale&q=75&w=1100&h=586 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=webp&fit=scale&q=75&w=300&h=159 300w, https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=webp&fit=scale&q=75&w=500&h=266 500w, https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=webp&fit=scale&q=75&w=700&h=373 700w, https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=webp&fit=scale&q=75&w=900&h=479 900w, https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=webp&fit=scale&q=75&w=1100&h=586 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="533"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=jpg&fit=scale&q=75&w=300&h=159 300w, https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=jpg&fit=scale&q=75&w=500&h=266 500w, https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=jpg&fit=scale&q=75&w=700&h=373 700w, https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=jpg&fit=scale&q=75&w=900&h=479 900w, https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png?fm=jpg&fit=scale&q=75&w=1100&h=586 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3QNv3TwkKfJd1w91HnP5Zb/46663504efdee0105705a584f4ac9af8/Screenshot_2026-02-02_at_16.03.52.png"
                alt="::grammar-error {   /* ... */ } ::spelling-error {   /* ... */ }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>And very new, hot off the press: there's now <code>::search-text</code> to style &quot;find in page&quot; results, which just shipped in Chrome 144. There are no real docs for <code>::search-text</code> yet. <a href="https://www.stefanjudis.com/today-i-learned/how-to-style-find-in-page-substrings/">Check out my quick blog post to learn more</a>.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(224,107,115); --color2: rgb(97,155,170); --color3: rgb(196,123,220); --color4: rgb(170,178,186); --color5: rgb(45,60,81);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTUwIj48cGF0aCBmaWxsPSIjMmQzYzUxIiBkPSJNMCAwaDMwMHYxNTBIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjExNiIgY3k9Ijg4IiByPSIxNzEiIGZpbGw9IiMwNzA0MGUiLz48ZWxsaXBzZSBjeD0iOTYiIGN5PSI4MSIgZmlsbD0iIzM5MzY0NCIgcng9IjU5IiByeT0iMTciLz48cGF0aCBmaWxsPSIjNDg0MTRiIiBkPSJNNTUgMjRoNDR2MjJINTV6Ii8+PHBhdGggZmlsbD0iIzZjNjg2OCIgZD0iTTU1IDkyaDE1MXYzSDU1eiIvPjxlbGxpcHNlIGN4PSIxMjgiIGN5PSIxMjUiIGZpbGw9IiMwMjBjMjUiIHJ4PSIyNTUiIHJ5PSI4Ii8+PHBhdGggZmlsbD0iIzY4NTg2NSIgZD0iTTUzIDc1aDEwNXYzSDUzeiIvPjxlbGxpcHNlIGN4PSI3NSIgY3k9IjMiIGZpbGw9IiMwNDBlMjgiIHJ4PSIyNTUiIHJ5PSI3Ii8+PHBhdGggZmlsbD0iIzU0NTY2MyIgZD0iTTUxIDMzaDg0djRINTF6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=avif&fit=scale&q=75&w=300&h=150 300w, https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=avif&fit=scale&q=75&w=500&h=250 500w, https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=avif&fit=scale&q=75&w=700&h=350 700w, https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=avif&fit=scale&q=75&w=900&h=450 900w, https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=avif&fit=scale&q=75&w=1100&h=550 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=webp&fit=scale&q=75&w=300&h=150 300w, https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=webp&fit=scale&q=75&w=500&h=250 500w, https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=webp&fit=scale&q=75&w=700&h=350 700w, https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=webp&fit=scale&q=75&w=900&h=450 900w, https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=webp&fit=scale&q=75&w=1100&h=550 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="500"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=jpg&fit=scale&q=75&w=300&h=150 300w, https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=jpg&fit=scale&q=75&w=500&h=250 500w, https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=jpg&fit=scale&q=75&w=700&h=350 700w, https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=jpg&fit=scale&q=75&w=900&h=450 900w, https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png?fm=jpg&fit=scale&q=75&w=1100&h=550 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2e8slwfcr7dD8fcG1oIqb4/3202e7a1c7f00663a222a6075998a091/Screenshot_2026-02-02_at_16.04.52.png"
                alt="Screenshot 2026-02-02 at 16.04.52::search-text {   background: var(--blue);   color: white; }  ::search-text:current {   background: var(--blue-darker);   color: white;   text-decoration: currentColor solid underline; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I keep being amazed by how far CSS has come!</p>
<hr aria-hidden="true"><p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mdvfqdryes23">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116002294625248785" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffront-end.social%2F%40stefan%2F116002294625248785')">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_this-weeks-web-weekly-is-about-to-hit-all-activity-7424147181483352065-Kkb3" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.linkedin.com%2Fposts%2Fstefan-judis_this-weeks-web-weekly-is-about-to-hit-all-activity-7424147181483352065-Kkb3')">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr aria-hidden="true"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="web-weekly-housekeeping" href="#web-weekly-housekeeping">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="web-weekly-housekeeping">Web Weekly housekeeping</h2></div><p>Web Weekly's open rate is at 48% these days. Marketers would be jealous, but not too long ago it was in the mid-fifties. I'm not really concerned about it (yet), but <a href="https://cassidoo.co/post/do-not-scale-2/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcassidoo.co%2Fpost%2Fdo-not-scale-2%2F')">Cassidy shared that her newsletter stats improved</a> simply by asking people to reply to her emails. Even though I risk destroying my inbox with this ask, <strong>if you enjoy my tiny newsletter, could you reply to it</strong>? I'd really like to see if more replies will help Web Weekly get into the primary inbox.</p>
<p>Secondly, David reported that Web Weekly doesn't work well in the Spark email client. I'm considering going full-blown custom HTML for a while. Are there more issues? Do you have any troubles reading the email in your client? If so, you guessed it, hit reply and let me know!</p>
<p>And lastly, writing Web Weekly takes a lot of time. And with the AI-volution being in full swing, I sometimes wonder if there's a future for blogging, curating, and indie publishing. If you enjoy Web Weekly, <strong>earn yourself a huge bag of karma points</strong> and join 33 supporters on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>. It really makes a difference!</p>
<p>And that's it! Now, let's really get into some web stuff. This edition is jam-packed and full of good stuff!</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="something-that-made-me-smile-this-week" href="#something-that-made-me-smile-this-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="something-that-made-me-smile-this-week">Something that made me smile this week</h2></div><p>I've just discovered <code>detail<wbr>.design</code>, and it's nothing but amazing to look at well-crafted UI examples. That's the stuff I want to see on the web!</p>
<p><a class="btn btn__small" href="https://detail.design/">Look at eye candy</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="no-code" href="#no-code">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="no-code">No code</h2></div><ul>
<li><a href="https://www.susandavid.com/newsletter/when-to-grit-and-when-to-quit/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.susandavid.com%2Fnewsletter%2Fwhen-to-grit-and-when-to-quit%2F')">&quot;The Hidden Benefits of Quitting&quot;</a> → &quot;If a longstanding commitment no longer feels rewarding to you, take those feelings seriously.&quot;</li>
<li><a href="https://thegoodbusy.substack.com/p/i-waste-so-much-time-chasing-people" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fthegoodbusy.substack.com%2Fp%2Fi-waste-so-much-time-chasing-people')">&quot;I waste so much time chasing people.&quot;</a> → I love the company-internal <strong>anti-ghosting rule</strong>!</li>
<li><a href="https://hvpandya.com/invisible-work" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fhvpandya.com%2Finvisible-work')">&quot;Invisible work&quot;</a> → &quot;Watch who people actually rely on when something important needs to happen.&quot;</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="codepen-2025-highlights" href="#codepen-2025-highlights">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="codepen-2025-highlights">CodePen 2025 highlights</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(54.642857142857146,91.07142857142854,200.35714285714286); --color2: rgb(131,132,148); --color3: rgb(150.81428571428572,169.75714285714287,226.5857142857143); --color4: rgb(175,178,185); --color5: rgb(51,67,83);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQ0Ij48cGF0aCBmaWxsPSIjMzM0MzUzIiBkPSJNMCAwaDMwMHYxNDRIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0MiIgY3k9Ijc1IiByPSIxNjQiIGZpbGw9IiMwMDAwMTIiLz48ZWxsaXBzZSBjeD0iMTI3IiBjeT0iODMiIGZpbGw9IiNjNWM3Y2QiIHJ4PSI5MyIgcnk9IjYiLz48Y2lyY2xlIGN4PSIxMjgiIGN5PSI1MSIgcj0iMTMiIGZpbGw9IiNmMGYxZjQiLz48ZWxsaXBzZSBjeD0iMTA2IiBjeT0iMTA2IiBmaWxsPSIjMDUxMDI2IiByeD0iMjQ5IiByeT0iMTkiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwNTEwMjUiIHRyYW5zZm9ybT0ibWF0cml4KDEwNS41MTI3NSAtMjAuMDY2NTggOS40MzU1IDQ5LjYxMzA3IDM2LjUgMjQuNCkiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwNjEwMjUiIHRyYW5zZm9ybT0ibWF0cml4KC04LjA2NTYzIDU1Ljg0OTM2IC04MS40MzMzNiAtMTEuNzYwNDEgMjA3LjYgMjAuNykiLz48ZWxsaXBzZSBjeD0iMTgwIiBjeT0iODQiIGZpbGw9IiM4Mjg2OTAiIHJ4PSIzOCIgcnk9IjciLz48cGF0aCBmaWxsPSIjOTc5YWEzIiBkPSJNNDAgNzloNDB2OUg0MHoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=avif&fit=scale&q=75&w=300&h=144 300w, https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=avif&fit=scale&q=75&w=500&h=241 500w, https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=avif&fit=scale&q=75&w=700&h=338 700w, https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=avif&fit=scale&q=75&w=900&h=434 900w, https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=avif&fit=scale&q=75&w=1100&h=531 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=webp&fit=scale&q=75&w=300&h=144 300w, https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=webp&fit=scale&q=75&w=500&h=241 500w, https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=webp&fit=scale&q=75&w=700&h=338 700w, https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=webp&fit=scale&q=75&w=900&h=434 900w, https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=webp&fit=scale&q=75&w=1100&h=531 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="483"
                srcset="https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=jpg&fit=scale&q=75&w=300&h=144 300w, https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=jpg&fit=scale&q=75&w=500&h=241 500w, https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=jpg&fit=scale&q=75&w=700&h=338 700w, https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=jpg&fit=scale&q=75&w=900&h=434 900w, https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png?fm=jpg&fit=scale&q=75&w=1100&h=531 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/21c2ItCmpSzAZLF1sTAx8m/6ce44d0e519469b71b62e5d98ca09b00/codepen_highlights.png"
                alt="CodePen 2025 highlights"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Our friends over at CodePen released 2025's most popular pens, and, of course, the collection is full of eye candy. I'm always amazed by the quality people put into &quot;fiddling on CodePen&quot; but without surprise, my favorites were the ones coming without three.js or GSAP.</p>
<ul>
<li><a href="https://codepen.io/jkantner/pen/LEPrqBd" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcodepen.io%2Fjkantner%2Fpen%2FLEPrqBd')">Check this CSS/SVG-only checkmark effect</a></li>
<li><a href="https://codepen.io/t_afif/pen/zxOeWqV" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcodepen.io%2Ft_afif%2Fpen%2FzxOeWqV')">Learn how to implement inset border radius effects</a></li>
<li><a href="https://codepen.io/HejChristian/pen/YPzLbYX" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcodepen.io%2FHejChristian%2Fpen%2FYPzLbYX')">Use SVG to create holographic effects</a></li>
</ul>
<p>And my absolute favorite is <a href="https://codepen.io/BalintFerenczy/pen/KwdoyEN" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcodepen.io%2FBalintFerenczy%2Fpen%2FKwdoyEN')">this electrified border</a>; no JS required!</p>
<p><a class="btn btn__small" href="https://codepen.io/2025/popular/pens/">Be amazed</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="two-handy-%60promise.all%60-utils" href="#two-handy-%60promise.all%60-utils">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="two-handy-%60promise.all%60-utils">Two handy <code>promise<wbr>.all</code> utils</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(97,167,227); --color2: rgb(161,126,99); --color3: rgb(196,123,220); --color4: rgb(170,178,187); --color5: rgb(51,67,90);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTI3Ij48cGF0aCBmaWxsPSIjMzM0MzVhIiBkPSJNMCAwaDMwMHYxMjdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMjgiIGN5PSI1MiIgZmlsbD0iIzAyMDAwOCIgcng9IjE1OSIgcnk9IjEwOCIvPjxwYXRoIGZpbGw9IiMzYjM5NTMiIGQ9Ik0yOCAzOGg5M3YyOUgyOHoiLz48ZWxsaXBzZSBjeD0iNjciIGN5PSIyNCIgZmlsbD0iIzYyNTU2NCIgcng9IjU2IiByeT0iMiIvPjxlbGxpcHNlIGN4PSIxMDYiIGN5PSIxMDYiIGZpbGw9IiMwMjBjMjQiIHJ4PSIyNTUiIHJ5PSI5Ii8+PGVsbGlwc2UgY3g9IjE0NCIgY3k9IjY1IiBmaWxsPSIjNTY0ZjYyIiByeD0iODgiIHJ5PSIyIi8+PHBhdGggZmlsbD0iIzUwNTQ1ZSIgZD0iTTMyIDgwaDEzN3YzSDMyeiIvPjxlbGxpcHNlIGN4PSIxMjUiIGZpbGw9IiMwMzBkMjUiIHJ4PSIyNTUiIHJ5PSI3Ii8+PGVsbGlwc2UgY3g9IjU3IiBjeT0iNjEiIGZpbGw9IiMwYzE0MWQiIHJ4PSI3MyIgcnk9IjIiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=avif&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=avif&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=avif&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=avif&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=avif&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=webp&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=webp&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=webp&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=webp&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=webp&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="426"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=jpg&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=jpg&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=jpg&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=jpg&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png?fm=jpg&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6CFvmL3RWUD4HTho9tEfWw/85f220b130cbfeef1c4235acf03bdb13/Screenshot_2026-02-02_at_13.35.22.png"
                alt="import { all } from &apos;better-all&apos;  const { a, b, c } = await all({ async a() { return getA() }, // 1s   async b() { return getB() }, // 10s   async c() { return getC(await this.$.a) }  // 10s (waits for a) }) // Total: 11 seconds - optimal parallelization!"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I usually list interesting GitHub projects at the end, but this JavaScript util is such a banger that it deserves its own spot! You know that when you use <code>Promise<wbr>.all</code> you can wait for promises to resolve in parallel. However, things become interesting when the promises depend on each other.</p>
<p>Usually, you'd then need to untangle everything to get the optimal loading order. <a href="https://github.com/shuding/better-all" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fshuding%2Fbetter-all')"><code>better-all</code> does this for you</a>! I love it!</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(99,171,235); --color2: rgb(132,84,150); --color3: rgb(228,196,124); --color4: rgb(164,170,188); --color5: rgb(51,67,91);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTIzIj48cGF0aCBmaWxsPSIjMzM0MzViIiBkPSJNMCAwaDMwMHYxMjNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0MCIgY3k9Ijc2IiByPSIxNjEiIGZpbGw9IiMwMzAwMDYiLz48ZWxsaXBzZSBjeD0iMTIzIiBjeT0iMzIiIGZpbGw9IiM2YjVjNzUiIHJ4PSIxMDkiIHJ5PSIzIi8+PHBhdGggZmlsbD0iIzdiNWM2OCIgZD0iTTI2IDYxaDEyM3Y0SDI2eiIvPjxwYXRoIGZpbGw9IiM2ZjVkNjIiIGQ9Ik00MCA0MGgxMTJ2NUg0MHoiLz48ZWxsaXBzZSBjeD0iMTU1IiBjeT0iMTAyIiBmaWxsPSIjMDMwZDI2IiByeD0iMjU1IiByeT0iMTAiLz48ZWxsaXBzZSBjeD0iMTI2IiBmaWxsPSIjMDQwZjI4IiByeD0iMjU1IiByeT0iMTEiLz48cGF0aCBmaWxsPSIjMTcxZDJmIiBkPSJNNjQuNCA1OC44LTE2IDUzLjZsNDUuMyAyNC4xTDU1IDIyLjZ6Ii8+PHBhdGggZmlsbD0iIzhhNzk0MiIgZD0iTTE0MyAzMWgzMXYzaC0zMXoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=avif&fit=scale&q=75&w=300&h=123 300w, https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=avif&fit=scale&q=75&w=500&h=206 500w, https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=avif&fit=scale&q=75&w=700&h=289 700w, https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=avif&fit=scale&q=75&w=900&h=371 900w, https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=avif&fit=scale&q=75&w=1100&h=454 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=webp&fit=scale&q=75&w=300&h=123 300w, https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=webp&fit=scale&q=75&w=500&h=206 500w, https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=webp&fit=scale&q=75&w=700&h=289 700w, https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=webp&fit=scale&q=75&w=900&h=371 900w, https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=webp&fit=scale&q=75&w=1100&h=454 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="413"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=jpg&fit=scale&q=75&w=300&h=123 300w, https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=jpg&fit=scale&q=75&w=500&h=206 500w, https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=jpg&fit=scale&q=75&w=700&h=289 700w, https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=jpg&fit=scale&q=75&w=900&h=371 900w, https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png?fm=jpg&fit=scale&q=75&w=1100&h=454 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2KDWaEjtibFjG8uBd6YHEd/63b065fc6d5ad92c3ad68a7e077e0493/Screenshot_2026-02-02_at_13.46.08.png"
                alt="  function parallelize&lt;T extends unknown[]&gt;(promises: { 	[K in keyof T]: Promise&lt;T[K]&gt; }) { 	return Promise.all(promises) }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you want to ensure you never <code>await</code> your promises before passing them to <code>Promise<wbr>.all</code>, <a href="https://dodov.dev/blog/how-to-do-parallelization-right-with-promise-all" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdodov.dev%2Fblog%2Fhow-to-do-parallelization-right-with-promise-all')">use this handy <code>parallelize</code> TypeScript util</a>!</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-%60%3Aonly-child%60-view-transition-trick" href="#the-%60%3Aonly-child%60-view-transition-trick">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-%60%3Aonly-child%60-view-transition-trick">The <code>:only-child</code> view transition trick</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(83,177,192); --color2: rgb(150,94,171); --color3: rgb(193,121,217); --color4: rgb(172,179,188); --color5: rgb(43,60,81);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTU4Ij48cGF0aCBmaWxsPSIjMmIzYzUxIiBkPSJNMCAwaDMwMHYxNThIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE4NCIgY3k9Ijk2IiByPSIyMTMiIGZpbGw9IiMwODA0MTAiLz48cGF0aCBmaWxsPSIjMzYzNDQzIiBkPSJNMzYgMzNoMTI5djU4SDM2eiIvPjxwYXRoIGZpbGw9IiM2Yzc1ODIiIGQ9Ik0zNyA0NmgxMTN2NEgzN3oiLz48ZWxsaXBzZSBjeD0iODkiIGN5PSI4OCIgZmlsbD0iIzVmNjg3NSIgcng9IjU3IiByeT0iMyIvPjxlbGxpcHNlIGN4PSIxNzMiIGN5PSIzNyIgZmlsbD0iIzRlNDg1ZiIgcng9IjE1MiIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iMTAzIiBjeT0iNjEiIGZpbGw9IiMxMTE5MjciIHJ4PSIyNTUiIHJ5PSIxMSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzBiMTQyYSIgdHJhbnNmb3JtPSJtYXRyaXgoLTI3Ljg3MTkxIDMuMzk5NCAtMTkuOTA0MDUgLTE2My4xOTQ1NSAyNTUgNDQuNSkiLz48cGF0aCBmaWxsPSIjNjA1NDcwIiBkPSJNMzQgNzZoMTg1djRIMzR6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=avif&fit=scale&q=75&w=300&h=159 300w, https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=avif&fit=scale&q=75&w=500&h=265 500w, https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=avif&fit=scale&q=75&w=700&h=371 700w, https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=avif&fit=scale&q=75&w=900&h=477 900w, https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=avif&fit=scale&q=75&w=1100&h=583 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=webp&fit=scale&q=75&w=300&h=159 300w, https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=webp&fit=scale&q=75&w=500&h=265 500w, https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=webp&fit=scale&q=75&w=700&h=371 700w, https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=webp&fit=scale&q=75&w=900&h=477 900w, https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=webp&fit=scale&q=75&w=1100&h=583 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="530"
                srcset="https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=jpg&fit=scale&q=75&w=300&h=159 300w, https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=jpg&fit=scale&q=75&w=500&h=265 500w, https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=jpg&fit=scale&q=75&w=700&h=371 700w, https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=jpg&fit=scale&q=75&w=900&h=477 900w, https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png?fm=jpg&fit=scale&q=75&w=1100&h=583 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/279TDoLEOATmXOfXwHWPEr/e74d0aab30263ab8a1b3cec1118888b8/Screenshot_2026-02-02_at_13.51.51.png"
                alt="::view-transition-old(.filter-item):only-child {   animation-name: animate-out; }  ::view-transition-new(.filter-item):only-child {   animation-name: animate-in; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p><a href="https://frontendmasters.com/blog/reacts-viewtransition-element/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffrontendmasters.com%2Fblog%2Freacts-viewtransition-element%2F')">Chris blogged about React's new <code>ViewTransition</code> element</a> and dropped a link to a nifty view transition trick.</p>
<p>View transitions make it very easy to morph elements into a new state, but I still struggled creating custom enter/exit animations. Cyd shared how you can use <code>:only-child</code> for this. TIL!</p>
<p><a class="btn btn__small" href="https://cydstumpel.nl/being-lazy-with-view-transition-old-and-new/">Transition in and out</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="custom-invoker-commands" href="#custom-invoker-commands">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="custom-invoker-commands">Custom invoker commands</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(97,171,230); --color2: rgb(171,91,99); --color3: rgb(224,191,122); --color4: rgb(170,178,187); --color5: rgb(50,66,89);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY5Ij48cGF0aCBmaWxsPSIjMzI0MjU5IiBkPSJNMCAwaDMwMHYxNjlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjIwNSIgY3k9IjY0IiByPSIyMjIiIGZpbGw9IiMwODAyMGEiLz48cGF0aCBmaWxsPSIjZjM5Yjg0IiBkPSJNNTUgNjdoMTM3djlINTV6Ii8+PHBhdGggZmlsbD0iIzY0NzI4MiIgZD0iTTI3IDM3aDE3MXY0SDI3eiIvPjxwYXRoIGZpbGw9IiM1NDgzOTIiIGQ9Ik0zMiA1OWgxMTN2NEgzMnoiLz48ZWxsaXBzZSBjeD0iMTM4IiBjeT0iODIiIGZpbGw9IiM3ZDU2NTIiIHJ4PSI5OCIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iMTQxIiBjeT0iMTM3IiBmaWxsPSIjMDAwYjI0IiByeD0iMjU1IiByeT0iMTEiLz48ZWxsaXBzZSBjeD0iMTcwIiBjeT0iNSIgZmlsbD0iIzAxMGQyNiIgcng9IjI1NSIgcnk9IjExIi8+PGVsbGlwc2UgY3g9IjI1MSIgY3k9IjcyIiBmaWxsPSIjMDkxNDI5IiByeD0iMjgiIHJ5PSI2MCIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=avif&fit=scale&q=75&w=300&h=169 300w, https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=avif&fit=scale&q=75&w=500&h=283 500w, https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=avif&fit=scale&q=75&w=700&h=396 700w, https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=avif&fit=scale&q=75&w=900&h=509 900w, https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=avif&fit=scale&q=75&w=1100&h=623 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=webp&fit=scale&q=75&w=300&h=169 300w, https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=webp&fit=scale&q=75&w=500&h=283 500w, https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=webp&fit=scale&q=75&w=700&h=396 700w, https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=webp&fit=scale&q=75&w=900&h=509 900w, https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=webp&fit=scale&q=75&w=1100&h=623 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="566"
                srcset="https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=jpg&fit=scale&q=75&w=300&h=169 300w, https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=jpg&fit=scale&q=75&w=500&h=283 500w, https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=jpg&fit=scale&q=75&w=700&h=396 700w, https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=jpg&fit=scale&q=75&w=900&h=509 900w, https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png?fm=jpg&fit=scale&q=75&w=1100&h=623 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/zl7SuOl8AzXEuBEoWe4B5/22bf41d3ad5e394e1e631875f2c142df/Screenshot_2026-02-02_at_15.11.31.png"
                alt="const d = document.getElementById(&quot;d&quot;);  d.addEventListener(&quot;command&quot;, (e) =&gt; {   if (event.command === &quot;--change-bg&quot;) {     d.style.backgroundColor = e.source.value;   } });"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p><a href="https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FAPI%2FInvoker_Commands_API')">Invoker commands</a> just recently went into the baseline. The <code>command</code> and <code>commandfor</code> attributes let you define interactivity with declarative HTML.</p>
<p>But what about custom functionality? Pawel shares an often overlooked feature, explaining that you can define custom commands with a double-dash (<code>--do-something</code>). Good stuff!</p>
<p><a class="btn btn__small" href="https://pawelgrzybek.com/more-invoker-commands-and-more-reasons-not-to-use-javascript-please/">Add custom commands</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-wonderful-weird-web-%E2%80%93-draw-a-horse" href="#the-wonderful-weird-web-%E2%80%93-draw-a-horse">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-wonderful-weird-web-%E2%80%93-draw-a-horse">The wonderful weird web – Draw a horse</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(250,213,38); --color2: rgb(95,108,167); --color3: rgb(105,228,252); --color4: rgb(191,219,186); --color5: rgb(86,81,56);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTk2Ij48cGF0aCBmaWxsPSIjNTY1MTM4IiBkPSJNMCAwaDMwMHYxOTZIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgdHJhbnNmb3JtPSJtYXRyaXgoLTE4Ni42NzYzMyAzMS4yMzg5IC02LjU4ODI0IC0zOS4zNjk4IDk4LjUgMTguMikiLz48Y2lyY2xlIGN4PSIxMDIiIGN5PSIxNDkiIHI9IjUyIi8+PGNpcmNsZSBjeD0iMjU1IiBjeT0iMTQ1IiByPSI5NCIvPjxwYXRoIGZpbGw9IiNmNmZkZGYiIGQ9Ik05MiA1OGgxMDJ2MzdIOTJ6Ii8+PGNpcmNsZSByPSIxIiB0cmFuc2Zvcm09InJvdGF0ZSgxMTcuMiAtMTguNiA0Mykgc2NhbGUoMTkxLjM5OTQ4IDUxLjYwNTMzKSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2YxZjZmNSIgdHJhbnNmb3JtPSJtYXRyaXgoLTQuMTk0OTggLTguMTk1MzUgNDAuODcyMjIgLTIwLjkyMTQyIDc5LjUgOTUuNykiLz48ZWxsaXBzZSBjeD0iMTQwIiBjeT0iNTIiIHJ4PSIxNiIgcnk9IjEyMCIvPjxwYXRoIGZpbGw9IiM5YWNlZjIiIGQ9Im0xNzcgNDcgNjkgMi00My0zNHoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=avif&fit=scale&q=75&w=300&h=198 300w, https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=avif&fit=scale&q=75&w=500&h=330 500w, https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=avif&fit=scale&q=75&w=700&h=462 700w, https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=avif&fit=scale&q=75&w=900&h=594 900w, https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=avif&fit=scale&q=75&w=1100&h=726 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=webp&fit=scale&q=75&w=300&h=198 300w, https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=webp&fit=scale&q=75&w=500&h=330 500w, https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=webp&fit=scale&q=75&w=700&h=462 700w, https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=webp&fit=scale&q=75&w=900&h=594 900w, https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=webp&fit=scale&q=75&w=1100&h=726 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="660"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=jpg&fit=scale&q=75&w=300&h=198 300w, https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=jpg&fit=scale&q=75&w=500&h=330 500w, https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=jpg&fit=scale&q=75&w=700&h=462 700w, https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=jpg&fit=scale&q=75&w=900&h=594 900w, https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png?fm=jpg&fit=scale&q=75&w=1100&h=726 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4fSkTQ17DWApuOHbUcLjHe/0b842f64e8f0d30bbf8e1229af88c76c/Screenshot_2026-02-02_at_16.59.50.png"
                alt="A horse made of icons on a desktop"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>When I first looked at this &quot;project&quot;, I didn't really understand what was in front of me. I've got no idea who made this or why, but I'm fascinated by the ambition to use software to draw a horse in the most ridiculous ways. Chapeau!</p>
<p><a class="btn btn__small" href="https://interactingincorrectly.online/lookaround.html">Interact incorrectly</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-meta-element-is-coming-to-town" href="#a-new-meta-element-is-coming-to-town">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-meta-element-is-coming-to-town">A new meta element is coming to town</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(211,155,100); --color2: rgb(162,124,84); --color3: rgb(204,106,107); --color4: rgb(167,175,184); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgODciPjxwYXRoIGZpbGw9IiMyYzNjNTQiIGQ9Ik0wIDBoMzAwdjg3SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxMTciIGN5PSIzNSIgcj0iMTQ1IiBmaWxsPSIjMDMwMTA5Ii8+PHBhdGggZmlsbD0iIzc1NmQ1NCIgZD0iTTMzIDM0aDE3MnY1SDMzeiIvPjxlbGxpcHNlIGN4PSI4OCIgY3k9IjY5IiBmaWxsPSIjMDcxMDI4IiByeD0iMjU1IiByeT0iMTAiLz48cGF0aCBmaWxsPSIjM2I0OTQ4IiBkPSJNMTk3IDMzaDI4djdoLTI4eiIvPjxwYXRoIGZpbGw9IiMwZTE3MmMiIGQ9Im0tMTYtMi4xIDE4MC41LTEuNEwxMTEuMSA5MGwzMS03MS41eiIvPjxwYXRoIGZpbGw9IiMxYjIwMmUiIGQ9Ik04Ny40IDM0IDU5LjcgNDYuMiA0Ni4yIDI1LjlsMzUuNyAzMC4yeiIvPjxwYXRoIGZpbGw9IiM3YzRlNTUiIGQ9Ik0zMSAzNWg0OXYzSDMxeiIvPjxwYXRoIGZpbGw9IiMxYzFlMmQiIGQ9Ik02My4zIDIzLjkgNDEuNCA3OS4zIDU2LjMgMjUgMzYuNyA0OC40eiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=avif&fit=scale&q=75&w=300&h=88 300w, https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=avif&fit=scale&q=75&w=500&h=148 500w, https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=avif&fit=scale&q=75&w=700&h=207 700w, https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=avif&fit=scale&q=75&w=900&h=266 900w, https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=avif&fit=scale&q=75&w=1100&h=326 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=webp&fit=scale&q=75&w=300&h=88 300w, https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=webp&fit=scale&q=75&w=500&h=148 500w, https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=webp&fit=scale&q=75&w=700&h=207 700w, https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=webp&fit=scale&q=75&w=900&h=266 900w, https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=webp&fit=scale&q=75&w=1100&h=326 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="296"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=jpg&fit=scale&q=75&w=300&h=88 300w, https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=jpg&fit=scale&q=75&w=500&h=148 500w, https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=jpg&fit=scale&q=75&w=700&h=207 700w, https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=jpg&fit=scale&q=75&w=900&h=266 900w, https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png?fm=jpg&fit=scale&q=75&w=1100&h=326 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4LpKALbpT2WTLOlG3YTbk0/4d86c3fa2ca53b9816954f37566f60f3/Screenshot_2026-02-02_at_13.03.16.png"
                alt="&amp;lt;meta name=&amp;quot;text-scale&amp;quot; content=&amp;quot;scale&amp;quot; /&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>To be honest, I didn't know that most mobile browsers don't pick up when the default OS font size is bumped up. Josh shares the current state and how a new <code>meta</code> element can help make the web a bit more usable.</p>
<p><a class="btn btn__small" href="https://www.joshtumath.uk/posts/2026-01-27-try-text-scaling-support-in-chrome-canary/">React to user preferences</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="accessibility-barriers-introduced-by-text-effects" href="#accessibility-barriers-introduced-by-text-effects">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="accessibility-barriers-introduced-by-text-effects">Accessibility barriers introduced by text effects</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(226,107,116); --color2: rgb(154,100,96); --color3: rgb(209,154,99); --color4: rgb(168,176,185); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTE3Ij48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxMTdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzMSIgY3k9IjQ1IiByPSIxNTciIGZpbGw9IiMwNzAzMGEiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMzODM3M2MiIHRyYW5zZm9ybT0ibWF0cml4KC45MjE2MSAtMTYuMTIzMzMgOTcuOTU1NDYgNS41OTkxNCAxMTcuNiA0NCkiLz48cGF0aCBmaWxsPSIjNzY0ZjVlIiBkPSJNNTAgNTJoMTgwdjRINTB6Ii8+PGVsbGlwc2UgY3g9IjEwOSIgY3k9IjM3IiBmaWxsPSIjNWM2NjRlIiByeD0iODQiIHJ5PSIyIi8+PGVsbGlwc2UgY3g9IjEzMiIgY3k9Ijk0IiBmaWxsPSIjMDMwZTI2IiByeD0iMjU1IiByeT0iOCIvPjxlbGxpcHNlIGN4PSIxMDciIGN5PSIyIiBmaWxsPSIjMDUxMDI4IiByeD0iMjU1IiByeT0iMTEiLz48cGF0aCBmaWxsPSIjNzA1ZDRlIiBkPSJNMzggNDRoNzZ2M0gzOHoiLz48cGF0aCBmaWxsPSIjMGYxNzI5IiBkPSJNMTExIDQwaDEwNnYxM0gxMTF6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=avif&fit=scale&q=75&w=300&h=117 300w, https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=avif&fit=scale&q=75&w=500&h=196 500w, https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=avif&fit=scale&q=75&w=700&h=275 700w, https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=avif&fit=scale&q=75&w=900&h=353 900w, https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=avif&fit=scale&q=75&w=1100&h=432 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=webp&fit=scale&q=75&w=300&h=117 300w, https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=webp&fit=scale&q=75&w=500&h=196 500w, https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=webp&fit=scale&q=75&w=700&h=275 700w, https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=webp&fit=scale&q=75&w=900&h=353 900w, https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=webp&fit=scale&q=75&w=1100&h=432 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="393"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=jpg&fit=scale&q=75&w=300&h=117 300w, https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=jpg&fit=scale&q=75&w=500&h=196 500w, https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=jpg&fit=scale&q=75&w=700&h=275 700w, https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=jpg&fit=scale&q=75&w=900&h=353 900w, https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png?fm=jpg&fit=scale&q=75&w=1100&h=432 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6OqNuTlGZg0Vo55hT6SciW/3e3301a970d1886db16e0827cf722856/Screenshot_2026-02-02_at_12.50.13.png"
                alt="&amp;lt;a href=&amp;quot;https://something.com&amp;quot; aria-label=&amp;quot;link&amp;quot;&amp;gt; &amp;lt;span aria-hidden=&amp;quot;true&amp;quot;&amp;gt; &amp;lt;span&amp;gt;L&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;i&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;n&amp;lt;/span&amp;gt;&amp;lt;span&amp;gt;k&amp;lt;/span&amp;gt; &amp;lt;/span&amp;gt; &amp;lt;/a&amp;gt;  "
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>First off, if you're not reading Adrian's blog, you definitely should. I'm thankful and amazed by the accessibility knowledge he shares for free and the effort he puts into testing web interfaces.</p>
<p>Now, if you ever wondered whether fancy text effects paired with countless <code>span</code> elements, <code>aria-hidden</code>, and <code>aria-label</code> have an impact on UX or A11y, this post might become a future reference piece!</p>
<p><a class="btn btn__small" href="https://adrianroselli.com/2026/01/barriers-from-links-with-aria.html">Keep things accessible</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-problem-of-modern-frontend-development" href="#the-problem-of-modern-frontend-development">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-problem-of-modern-frontend-development">The problem of modern frontend development</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(235,140,68); --color2: rgb(124,116,148); --color3: rgb(219,218,242); --color4: rgb(184,183,207); --color5: rgb(76,52,52);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTA0Ij48cGF0aCBmaWxsPSIjNGMzNDM0IiBkPSJNMCAwaDMwMHYxMDRIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE5NiIgY3k9IjQ1IiByPSIyMDgiIGZpbGw9IiMwMDAwMmUiLz48cGF0aCBmaWxsPSIjYWFhZWNjIiBkPSJNMzQgMzBoMTg2djRIMzR6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMDAwMDIxIiB0cmFuc2Zvcm09Im1hdHJpeCgtLjIyNjggMjUuOTg4NzMgLTIzMC43OTMyIC0yLjAxNDEgMTQ0LjcgODcuNSkiLz48ZWxsaXBzZSBjeD0iMTAzIiBjeT0iNTgiIGZpbGw9IiM5NjkwOWUiIHJ4PSI3NiIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iMTQ3IiBjeT0iMTAiIGZpbGw9IiMwMDAwMjEiIHJ4PSIyNDYiIHJ5PSIxOSIvPjxwYXRoIGZpbGw9IiM4ZTdhNzUiIGQ9Ik00NyA0M2gxNjB2NUg0N3oiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwMzAyMjUiIHRyYW5zZm9ybT0icm90YXRlKDQ5IDcxLjYgMjkxLjIpIHNjYWxlKDI1LjEwNTYyIDkxLjIyODAzKSIvPjxwYXRoIGZpbGw9IiMwMDAwMjEiIGQ9Ik0wIDI2aDMydjQwSDB6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=avif&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=avif&fit=scale&q=75&w=500&h=175 500w, https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=avif&fit=scale&q=75&w=700&h=245 700w, https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=avif&fit=scale&q=75&w=900&h=315 900w, https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=avif&fit=scale&q=75&w=1100&h=385 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=webp&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=webp&fit=scale&q=75&w=500&h=175 500w, https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=webp&fit=scale&q=75&w=700&h=245 700w, https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=webp&fit=scale&q=75&w=900&h=315 900w, https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=webp&fit=scale&q=75&w=1100&h=385 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="350"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=jpg&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=jpg&fit=scale&q=75&w=500&h=175 500w, https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=jpg&fit=scale&q=75&w=700&h=245 700w, https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=jpg&fit=scale&q=75&w=900&h=315 900w, https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png?fm=jpg&fit=scale&q=75&w=1100&h=385 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2c1HEJndG3LdMJ2akbYMoW/aecef9fe772c293fbfbb57346567f75f/Screenshot_2026-02-02_at_12.28.29.png"
                alt="Finally, the component also includes a hidden &amp;lt;input type=&amp;quot;radio&amp;quot;&amp;gt; but only if it&amp;#39;s used inside of a &amp;lt;form&amp;gt; element. Weird!"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Paul went on the journey to understand how radio buttons are rendered when using a &quot;modern Frontend&quot; (<code>ShadCN</code> and <code>Radix</code>) and well...</p>
<blockquote>
<p>To understand how our radio buttons work I need to understand two separate component libraries and hundreds of lines of React.</p>
</blockquote>
<p><a class="btn btn__small" href="https://paulmakeswebsites.com/writing/shadcn-radio-button/">Keep things simple</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="yet-another-great-css-reset" href="#yet-another-great-css-reset">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="yet-another-great-css-reset">Yet another great CSS reset</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(82,176,191); --color2: rgb(140,89,163); --color3: rgb(226,107,116); --color4: rgb(169,177,186); --color5: rgb(46,62,82);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTczIj48cGF0aCBmaWxsPSIjMmUzZTUyIiBkPSJNMCAwaDMwMHYxNzNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzAzMDAwYyIgdHJhbnNmb3JtPSJtYXRyaXgoLTkuMTAxMzUgLTEyOC4xNzg2NCAxNzkuODI4NiAtMTIuNzY4NzYgMTIwLjggNjkuNykiLz48cGF0aCBmaWxsPSIjM2U0MzQ5IiBkPSJtNjQgMzggNyA1MSAxMzMtMXoiLz48ZWxsaXBzZSBjeD0iNjYiIGN5PSIzMiIgZmlsbD0iIzg4NTg5YiIgcng9IjE0IiByeT0iMyIvPjxwYXRoIGZpbGw9IiM2YTcyODEiIGQ9Ik03NSA4NWg3OHY0SDc1eiIvPjxlbGxpcHNlIGN4PSIxMyIgY3k9Ijc1IiBmaWxsPSIjMDcxMjI5IiByeD0iMTkiIHJ5PSIxNDYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwNzEyMjkiIHRyYW5zZm9ybT0ibWF0cml4KC0xOC45MDI3IC0uMjYzOTUgMi4xMTQ3NCAtMTUxLjQ0NzUgMjQyLjggMTE3KSIvPjxwYXRoIGZpbGw9IiMxNjFmMmQiIGQ9Ik0xOSA1NmgxNDd2MTdIMTl6Ii8+PHBhdGggZmlsbD0iIzg1NjE0NCIgZD0iTTE1NyA4NWg0MHY0aC00MHoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=avif&fit=scale&q=75&w=300&h=174 300w, https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=avif&fit=scale&q=75&w=500&h=290 500w, https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=avif&fit=scale&q=75&w=700&h=406 700w, https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=avif&fit=scale&q=75&w=900&h=522 900w, https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=avif&fit=scale&q=75&w=1100&h=638 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=webp&fit=scale&q=75&w=300&h=174 300w, https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=webp&fit=scale&q=75&w=500&h=290 500w, https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=webp&fit=scale&q=75&w=700&h=406 700w, https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=webp&fit=scale&q=75&w=900&h=522 900w, https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=webp&fit=scale&q=75&w=1100&h=638 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="580"
                srcset="https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=jpg&fit=scale&q=75&w=300&h=174 300w, https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=jpg&fit=scale&q=75&w=500&h=290 500w, https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=jpg&fit=scale&q=75&w=700&h=406 700w, https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=jpg&fit=scale&q=75&w=900&h=522 900w, https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png?fm=jpg&fit=scale&q=75&w=1100&h=638 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/33QkrlEPidx5RzekzXExIm/d77682984227773b1c9c7ce4bfab5e1f/Screenshot_2026-02-02_at_17.44.55.png"
                alt="  @layer { 	*, 	*::before, 	*::after { 		box-sizing: border-box; 		background-repeat: no-repeat; 	}"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Nothing more to say than I just love reading people's CSS resets. Here's Declan's take, and it includes some smart tricks!</p>
<p><a class="btn btn__small" href="https://vale.rocks/posts/css-reset">Get inspired</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="quick-html-tricks" href="#quick-html-tricks">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="quick-html-tricks">Quick HTML tricks</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(224,107,115); --color2: rgb(168,93,100); --color3: rgb(204,156,100); --color4: rgb(172,179,188); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTgwIj48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxODBIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyMiIgY3k9Ijk2IiByPSIxNjkiIGZpbGw9IiMwYjA1MGMiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiM0YjQzNDciIHRyYW5zZm9ybT0ibWF0cml4KDEuMzEwNjcgLTE4LjQzNjQyIDcwLjI3ODU1IDQuOTk2MiAxMTcuNyA0NC43KSIvPjxwYXRoIGZpbGw9IiNmMmFjODYiIGQ9Im03OCA5OS4yIDMyIC42djdsLTMyLS42eiIvPjxwYXRoIGZpbGw9IiNlNmE3ODIiIGQ9Ik0xMDEgMjhoMzB2NmgtMzB6Ii8+PHBhdGggZmlsbD0iIzcwNWI2MyIgZD0iTTQ4IDU3aDExM3YzSDQ4eiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzAyMGUyNiIgdHJhbnNmb3JtPSJtYXRyaXgoLS4wMTA3NSAxNC4zODI0MyAtMTk0LjAyNDE0IC0uMTQ1MDMgMTMxLjEgMTUzKSIvPjxlbGxpcHNlIGN4PSI0IiBjeT0iNjMiIGZpbGw9IiMwNDEwMjgiIHJ4PSIxNyIgcnk9IjE1MyIvPjxwYXRoIGZpbGw9IiM2NjQ1NGYiIGQ9Ik0yMTguOSA0Ni4xIDE5NyA2MS4ybDI3LjQtMS43LTQwLjctMTF6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=avif&fit=scale&q=75&w=300&h=180 300w, https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=avif&fit=scale&q=75&w=500&h=301 500w, https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=avif&fit=scale&q=75&w=700&h=422 700w, https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=avif&fit=scale&q=75&w=900&h=542 900w, https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=avif&fit=scale&q=75&w=1100&h=663 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=webp&fit=scale&q=75&w=300&h=180 300w, https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=webp&fit=scale&q=75&w=500&h=301 500w, https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=webp&fit=scale&q=75&w=700&h=422 700w, https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=webp&fit=scale&q=75&w=900&h=542 900w, https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=webp&fit=scale&q=75&w=1100&h=663 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="603"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=jpg&fit=scale&q=75&w=300&h=180 300w, https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=jpg&fit=scale&q=75&w=500&h=301 500w, https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=jpg&fit=scale&q=75&w=700&h=422 700w, https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=jpg&fit=scale&q=75&w=900&h=542 900w, https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png?fm=jpg&fit=scale&q=75&w=1100&h=663 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2NLHiDNazzeOrueZNF4NIh/16b144c3615e06b12057f7d0b7688d6d/Screenshot_2026-02-02_at_17.17.04.png"
                alt="&amp;lt;fieldset form=&amp;quot;info&amp;quot;&amp;gt; &amp;lt;legend&amp;gt;What is your name?&amp;lt;/legend&amp;gt; &amp;lt;label&amp;gt;Name: &amp;lt;input type=&amp;quot;text&amp;quot;&amp;gt;&amp;lt;/label&amp;gt; &amp;lt;/fieldset&amp;gt; &amp;lt;form id=&amp;quot;user&amp;quot;&amp;gt; &amp;lt;!-- other form content --&amp;gt; &amp;lt;/form&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Quick'n'dirty; do you know that you can place form elements outside of the actual <code>form</code>? <a href="https://html-css-tip-of-the-week.netlify.app/tip/fieldset-and-legend/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fhtml-css-tip-of-the-week.netlify.app%2Ftip%2Ffieldset-and-legend%2F')">Kevin describes how to do it with a <code>fieldset</code></a>. But it works with <code>input</code> and <code>button</code> elements via the <code>form</code> attribute, too.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(211,155,100); --color2: rgb(154,118,84); --color3: rgb(212,104,111); --color4: rgb(168,176,185); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY5Ij48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxNjlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyNCIgY3k9IjY0IiByPSIxNjUiIGZpbGw9IiMwYTA2MGIiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMzMzM0MzkiIHRyYW5zZm9ybT0ibWF0cml4KDM4LjQ0NDg0IDMyLjc5NDM3IC0yOS41MjMwOCAzNC42MDk5MiA5MiA2OS43KSIvPjxlbGxpcHNlIGN4PSIxMTYiIGN5PSIyOSIgZmlsbD0iIzc0NzE1NyIgcng9IjkwIiByeT0iMiIvPjxwYXRoIGZpbGw9IiM4NzY5NjMiIGQ9Ik01MSAxMDNoMTEydjNINTF6Ii8+PGVsbGlwc2UgY3g9IjEwOCIgY3k9Ijg1IiBmaWxsPSIjNWE2NDRjIiByeD0iNjciIHJ5PSIzIi8+PGVsbGlwc2UgY3g9IjE2OCIgY3k9IjU3IiBmaWxsPSIjNzA2ZTUzIiByeD0iNjAiIHJ5PSIyIi8+PHBhdGggZmlsbD0iIzAyMGMyNiIgZD0iTTI1NS41IDE1Ny41SC41di0yN2gyNTV6Ii8+PHBhdGggZmlsbD0iIzdlNmE1MCIgZD0iTTUxIDkzaDUydjRINTF6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=avif&fit=scale&q=75&w=300&h=169 300w, https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=avif&fit=scale&q=75&w=500&h=283 500w, https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=avif&fit=scale&q=75&w=700&h=396 700w, https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=avif&fit=scale&q=75&w=900&h=509 900w, https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=avif&fit=scale&q=75&w=1100&h=623 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=webp&fit=scale&q=75&w=300&h=169 300w, https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=webp&fit=scale&q=75&w=500&h=283 500w, https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=webp&fit=scale&q=75&w=700&h=396 700w, https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=webp&fit=scale&q=75&w=900&h=509 900w, https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=webp&fit=scale&q=75&w=1100&h=623 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="566"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=jpg&fit=scale&q=75&w=300&h=169 300w, https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=jpg&fit=scale&q=75&w=500&h=283 500w, https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=jpg&fit=scale&q=75&w=700&h=396 700w, https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=jpg&fit=scale&q=75&w=900&h=509 900w, https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png?fm=jpg&fit=scale&q=75&w=1100&h=623 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2lGgrKQlXj1dgows7mKOES/5a6b626551db0773ccbdf04bbd5b94ac/Screenshot_2026-02-02_at_17.23.02.png"
                alt="&amp;lt;button      formaction=&amp;quot;/some-other-endpoint&amp;quot;     formmethod=&amp;quot;get&amp;quot;     formnovalidate&amp;gt;Submit&amp;lt;/button&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>And speaking of buttons, here's another party trick: <a href="https://www.stefanjudis.com/today-i-learned/button-elements-offer-attributes-to-change-form-behavior/">you can overwrite a form's action or endpoint via <code>formaction</code> and <code>formmethod</code></a>. This is wild, isn't it?</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="anchor-positioning-isn't-just-for-popups" href="#anchor-positioning-isn't-just-for-popups">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="anchor-positioning-isn't-just-for-popups">Anchor positioning isn't just for popups</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(210,45,216); --color2: rgb(130,91,79); --color3: rgb(249,211,166); --color4: rgb(208,204,172); --color5: rgb(45,73,105);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY1Ij48cGF0aCBmaWxsPSIjMmQ0OTY5IiBkPSJNMCAwaDMwMHYxNjVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyNSIgY3k9IjY3IiByPSIxNTIiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmZmZDMiIHRyYW5zZm9ybT0ibWF0cml4KC0xNS4wMDk4NyAxMzguMTc0MjIgLTIyNy45NDQwNiAtMjQuNzYxNTcgMTU2LjEgNjguNCkiLz48ZWxsaXBzZSBjeD0iNTkiIGN5PSI3NCIgZmlsbD0iIzAwMmU0NSIgcng9IjkiIHJ5PSI4Ii8+PGVsbGlwc2UgY3g9IjIyNCIgY3k9IjU1IiBmaWxsPSIjZTNlMWM4IiByeD0iMTQ2IiByeT0iODAiLz48Y2lyY2xlIGN4PSI0MyIgY3k9IjE1IiByPSI4IiBmaWxsPSIjNWYxMTAxIi8+PHBhdGggZmlsbD0iIzRmMDA5NyIgZD0iTTUyIDExMmgxNnYxM0g1MnoiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmMmVjZDciIHRyYW5zZm9ybT0ibWF0cml4KC0xLjU4MTEzIC0xNDQuNjg1NTkgMjEuMjcxNTYgLS4yMzI0NiAxNSA4Ny4yKSIvPjxlbGxpcHNlIGN4PSIxMTgiIGN5PSI5MSIgZmlsbD0iIzViNjA1YiIgcng9Ijc0IiByeT0iMiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=avif&fit=scale&q=75&w=300&h=165 300w, https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=avif&fit=scale&q=75&w=500&h=276 500w, https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=avif&fit=scale&q=75&w=700&h=387 700w, https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=avif&fit=scale&q=75&w=900&h=497 900w, https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=avif&fit=scale&q=75&w=1100&h=608 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=webp&fit=scale&q=75&w=300&h=165 300w, https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=webp&fit=scale&q=75&w=500&h=276 500w, https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=webp&fit=scale&q=75&w=700&h=387 700w, https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=webp&fit=scale&q=75&w=900&h=497 900w, https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=webp&fit=scale&q=75&w=1100&h=608 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="553"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=jpg&fit=scale&q=75&w=300&h=165 300w, https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=jpg&fit=scale&q=75&w=500&h=276 500w, https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=jpg&fit=scale&q=75&w=700&h=387 700w, https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=jpg&fit=scale&q=75&w=900&h=497 900w, https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png?fm=jpg&fit=scale&q=75&w=1100&h=608 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2b7ARlzqfHuao4W76cXQJX/92cb67559dae6143ac1007e3378e3b8a/Screenshot_2026-02-02_at_16.22.39.png"
                alt="Comments connected with lines to show parent/child relationships"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Anchor positioning entered the baseline last month, and while everyone is talking about popups, Roland shares how to use the feature to draw connections with pseudo-elements. That's some very funky CSS!</p>
<p><a class="btn btn__small" href="https://rolandfranke.nl/frontend-stories/drawing-connections-with-css-anchor-positioning/">Anchor without using popups</a></p>
<p><em>FYI: the page widget shows that anchor positioning isn't in the baseline yet. I checked the demo in Chrome, Firefox, and Safari, and it renders fine.</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="random-mdn-%E2%80%93-%60console.timestamp%60" href="#random-mdn-%E2%80%93-%60console.timestamp%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="random-mdn-%E2%80%93-%60console.timestamp%60">Random MDN – <code>console<wbr>.timeStamp</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(98,170,234); --color2: rgb(85,130,170); --color3: rgb(228,196,124); --color4: rgb(165,172,188); --color5: rgb(51,66,90);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTYwIj48cGF0aCBmaWxsPSIjMzM0MjVhIiBkPSJNMCAwaDMwMHYxNjBIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEwOSIgY3k9IjUwIiByPSIxNzIiIGZpbGw9IiMwMzAyMDciLz48Y2lyY2xlIGN4PSI4MCIgY3k9IjU5IiByPSI0MCIgZmlsbD0iIzM3M2Y0MCIvPjxjaXJjbGUgY3g9IjE1NSIgY3k9IjY2IiByPSIzMCIgZmlsbD0iIzMwMzU0MiIvPjxwYXRoIGZpbGw9IiM1YTZmN2YiIGQ9Ik0zOSAyN2g3NXY1SDM5eiIvPjxwYXRoIGZpbGw9IiM3NTcwNjUiIGQ9Ik00OCA0OGg2NHY1SDQ4eiIvPjxlbGxpcHNlIGN4PSIxMjciIGN5PSIxMzYiIGZpbGw9IiMwMjBiMjYiIHJ4PSIyNTUiIHJ5PSIxNCIvPjxwYXRoIGZpbGw9IiMxMDE2MjgiIGQ9Im05MyA0NyA1OSAzMkg3MnoiLz48ZWxsaXBzZSBjeT0iNTMiIGZpbGw9IiMwNDBlMjciIHJ4PSIxNCIgcnk9IjEzNiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=avif&fit=scale&q=75&w=300&h=160 300w, https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=avif&fit=scale&q=75&w=500&h=268 500w, https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=avif&fit=scale&q=75&w=700&h=375 700w, https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=avif&fit=scale&q=75&w=900&h=482 900w, https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=avif&fit=scale&q=75&w=1100&h=590 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=webp&fit=scale&q=75&w=300&h=160 300w, https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=webp&fit=scale&q=75&w=500&h=268 500w, https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=webp&fit=scale&q=75&w=700&h=375 700w, https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=webp&fit=scale&q=75&w=900&h=482 900w, https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=webp&fit=scale&q=75&w=1100&h=590 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="536"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=jpg&fit=scale&q=75&w=300&h=160 300w, https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=jpg&fit=scale&q=75&w=500&h=268 500w, https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=jpg&fit=scale&q=75&w=700&h=375 700w, https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=jpg&fit=scale&q=75&w=900&h=482 900w, https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png?fm=jpg&fit=scale&q=75&w=1100&h=590 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3j8LPIpV3fPNtyBfGDVoKe/e34af098152b91b64dfb993a8866ed3c/Screenshot_2026-02-02_at_16.44.07.png"
                alt="console.timeStamp(   &quot;Event with Link&quot;, // label   performance.now(), // startTime (instant)   undefined, // endTime (instant)   &quot;Tasks&quot;, // trackName   &quot;My Extension&quot;, // trackGroup   &quot;primary-light&quot;, // color);"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Do you know that there's a non-standard <code>console</code> method to add markers to the dev tools performance panel? It's primarily a Chrome thing, but I think that's where we're all debugging perf issues anyway, right?</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/API/console/timeStamp_static">Mark your timeline</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-recap-%E2%80%93-%60.%60-doesn't-match-all-characters-in-regular-expressions" href="#til-recap-%E2%80%93-%60.%60-doesn't-match-all-characters-in-regular-expressions">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-recap-%E2%80%93-%60.%60-doesn't-match-all-characters-in-regular-expressions">TIL recap – <code>.</code> doesn't match all characters in regular expressions</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(99,171,234); --color2: rgb(152,101,112); --color3: rgb(226,108,116); --color4: rgb(171,179,187); --color5: rgb(50,66,89);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTMyIj48cGF0aCBmaWxsPSIjMzI0MjU5IiBkPSJNMCAwaDMwMHYxMzJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzMyIgY3k9IjM2IiByPSIxNTYiIGZpbGw9IiMwMzAyMGEiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMzMzNmNGEiIHRyYW5zZm9ybT0ibWF0cml4KC0xLjc2NDI1IDI2LjMwNDQgLTYxLjI3NTI5IC00LjEwOTc4IDEwMy42IDU2LjkpIi8+PHBhdGggZmlsbD0iIzNhM2U0OSIgZD0iTTE4NyAzM2gyN3Y0NmgtMjd6Ii8+PGVsbGlwc2UgY3g9IjEyOCIgY3k9Ijc3IiBmaWxsPSIjNDI1MTVkIiByeD0iOTAiIHJ5PSIzIi8+PHBhdGggZmlsbD0iIzNjNmE3NiIgZD0iTTc0IDYwaDc1djZINzR6Ii8+PHBhdGggZmlsbD0iIzQ5MjczNCIgZD0iTTQzIDMyaDI1djQ5SDQzeiIvPjxlbGxpcHNlIGN4PSIxMzciIGN5PSIxMDgiIGZpbGw9IiMwMjBhMjMiIHJ4PSIyNTUiIHJ5PSI3Ii8+PGVsbGlwc2UgY3g9IjEyNyIgZmlsbD0iIzA1MGUyNyIgcng9IjI1NSIgcnk9IjExIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=avif&fit=scale&q=75&w=300&h=132 300w, https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=avif&fit=scale&q=75&w=500&h=221 500w, https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=avif&fit=scale&q=75&w=700&h=310 700w, https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=avif&fit=scale&q=75&w=900&h=398 900w, https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=avif&fit=scale&q=75&w=1100&h=487 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=webp&fit=scale&q=75&w=300&h=132 300w, https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=webp&fit=scale&q=75&w=500&h=221 500w, https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=webp&fit=scale&q=75&w=700&h=310 700w, https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=webp&fit=scale&q=75&w=900&h=398 900w, https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=webp&fit=scale&q=75&w=1100&h=487 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="443"
                srcset="https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=jpg&fit=scale&q=75&w=300&h=132 300w, https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=jpg&fit=scale&q=75&w=500&h=221 500w, https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=jpg&fit=scale&q=75&w=700&h=310 700w, https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=jpg&fit=scale&q=75&w=900&h=398 900w, https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png?fm=jpg&fit=scale&q=75&w=1100&h=487 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/LyQYjundlb55IraAetMVa/757db4ceb43d05c603d9244d2060c971/Screenshot_2026-02-02_at_17.40.32.png"
                alt="/a.b/.test(&apos;a\nb&apos;);     // false /a.b/.test(&apos;a\rb&apos;);     // false /a.b/.test(&apos;a\u2028b&apos;); // false /a.b/.test(&apos;a\u2029b&apos;); // false"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Even though I blogged about it nine (!) years ago, I ran into a regular expression &quot;bug&quot; the other day. Do you know that <code>.</code> doesn't match all characters?</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/the-dot-in-regexp-doesnt-match-all-characters-in-javascript/">Match everything</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-on-the-baseline" href="#new-on-the-baseline">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-on-the-baseline">New on the baseline</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(27,116,238); --color2: rgb(143,153,95); --color3: rgb(140,171,232); --color4: rgb(188,197,210); --color5: rgb(60,60,68);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTM3Ij48cGF0aCBmaWxsPSIjM2MzYzQ0IiBkPSJNMCAwaDMwMHYxMzdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE1NyIgY3k9IjQ2IiByPSIxNzIiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KC0yMTkuNDc4NyAtMTQuODUxMTggOC4wMTYwOCAtMTE4LjQ2NiAxODQgNjgpIi8+PGNpcmNsZSBjeD0iMTI0IiBjeT0iMTUiIHI9IjE3MSIgZmlsbD0iI2ZmZiIvPjxwYXRoIGZpbGw9IiM1MDUwNGYiIGQ9Ik04MyAxMy40djhsLTcwIDEuMnYtOHoiLz48cGF0aCBmaWxsPSIjMzE1ZmJiIiBkPSJNMzUgNDJoODh2N0gzNXoiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KC0xMjUuNTUzODUgLTE4LjU0MDE4IDQuMzIyMjMgLTI5LjI3MDA5IDE3OC43IDkuNSkiLz48ZWxsaXBzZSBjeD0iMzMiIGN5PSI2OSIgZmlsbD0iIzc1NmU3ZSIgcng9IjIzNSIgcnk9IjIiLz48ZWxsaXBzZSBjeD0iMTQwIiBjeT0iMTEyIiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iMjEiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=avif&fit=scale&q=75&w=300&h=138 300w, https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=avif&fit=scale&q=75&w=500&h=230 500w, https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=avif&fit=scale&q=75&w=700&h=322 700w, https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=avif&fit=scale&q=75&w=900&h=414 900w, https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=avif&fit=scale&q=75&w=1100&h=506 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=webp&fit=scale&q=75&w=300&h=138 300w, https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=webp&fit=scale&q=75&w=500&h=230 500w, https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=webp&fit=scale&q=75&w=700&h=322 700w, https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=webp&fit=scale&q=75&w=900&h=414 900w, https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=webp&fit=scale&q=75&w=1100&h=506 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="460"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=jpg&fit=scale&q=75&w=300&h=138 300w, https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=jpg&fit=scale&q=75&w=500&h=230 500w, https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=jpg&fit=scale&q=75&w=700&h=322 700w, https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=jpg&fit=scale&q=75&w=900&h=414 900w, https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png?fm=jpg&fit=scale&q=75&w=1100&h=506 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4YUscHdPSyLLfj6AO4czO5/52b0a7b5cc8fdced909d7cac62d35a66/Screenshot_2026-02-02_at_17.48.06.png"
                alt="The Navigation API allows control over all navigation actions for the current window in one central place, including initiating navigations programmatically, examining navigation history entries, and managing navigations as they happen."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>With Firefox 147, <a href="https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FAPI%2FNavigation_API')">the Navigation API</a> entered the baseline. It's the successor to previous web platform features such as the History API and <code>window<wbr>.location</code>. If you want to learn what it's about, Ollie has been secretly blogging about it!</p>
<ul>
<li><a href="https://olliewilliams.xyz/blog/the-navigate-event/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Folliewilliams.xyz%2Fblog%2Fthe-navigate-event%2F')">The navigate event</a></li>
<li><a href="https://olliewilliams.xyz/blog/initiating-navigations-with-the-navigation-api/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Folliewilliams.xyz%2Fblog%2Finitiating-navigations-with-the-navigation-api%2F')">Initiating navigations with the Navigation API</a></li>
<li><a href="https://olliewilliams.xyz/blog/managing-focus-with-the-navigation-api/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Folliewilliams.xyz%2Fblog%2Fmanaging-focus-with-the-navigation-api%2F')">Focus Management with the Navigation API</a></li>
<li><a href="https://olliewilliams.xyz/blog/preventing-navigation/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Folliewilliams.xyz%2Fblog%2Fpreventing-navigation%2F')">Preventing same-document and cross-document navigation</a></li>
</ul>
<p>All these posts will definitely get you up to speed!</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="three-valuable-projects-to-have-a-look-at" href="#three-valuable-projects-to-have-a-look-at">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="three-valuable-projects-to-have-a-look-at">Three valuable projects to have a look at</h2></div><ul>
<li><a href="https://github.com/steipete/RepoBar" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsteipete%2FRepoBar')">steipete/RepoBar</a> – Yet another native GitHub repo status app.</li>
<li><a href="https://github.com/vicanso/zedis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fvicanso%2Fzedis')">vicanso/zedis</a> – A native Redis GUI built with Rust and GPUI.</li>
<li><a href="https://github.com/tldev/posturr" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Ftldev%2Fposturr')">tldev/posturr</a> – A macOS app that blurs your screen when you slouch.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-tiny-helper" href="#a-new-tiny-helper">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-tiny-helper">A new Tiny Helper</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(252,159,21); --color2: rgb(151.0632911392405,91.02531645569621,1.9367088607594756); --color3: rgb(252,213,102); --color4: rgb(168,185,209); --color5: rgb(14.711538461538437,138.28846153846155,97.09615384615385);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTAxIj48cGF0aCBmaWxsPSIjMGU4YTYxIiBkPSJNMCAwaDMwMHYxMDFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjYyIiBjeT0iNTgiIHI9IjIyNCIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjEwNiIgY3k9IjM2IiByPSIxNjciIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMjEiIGN5PSIzMCIgcj0iMTQ3IiBmaWxsPSIjZmZmIi8+PHBhdGggZmlsbD0iI2ZmOGYwMCIgZD0ibTM4LjYgNDAuNy0uMi0xMCA4NS0xLjQuMiAxMHoiLz48cGF0aCBmaWxsPSIjM2I2ZGUzIiBkPSJNMTI0IDI5aDk0djExaC05NHoiLz48ZWxsaXBzZSBjeD0iMTA5IiBjeT0iNjciIGZpbGw9IiNmZmZiZmYiIHJ4PSIyNTUiIHJ5PSIyNyIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJyb3RhdGUoOTEuOSA1OSA2Ni42KSBzY2FsZSgxOS4xNjkyOSAyMDguMjEyNjMpIi8+PGVsbGlwc2UgY3g9IjEzNSIgY3k9IjU3IiBmaWxsPSIjYTdhZGJkIiByeD0iMTA4IiByeT0iMyIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=avif&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=avif&fit=scale&q=75&w=500&h=170 500w, https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=avif&fit=scale&q=75&w=700&h=238 700w, https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=avif&fit=scale&q=75&w=900&h=306 900w, https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=avif&fit=scale&q=75&w=1100&h=374 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=webp&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=webp&fit=scale&q=75&w=500&h=170 500w, https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=webp&fit=scale&q=75&w=700&h=238 700w, https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=webp&fit=scale&q=75&w=900&h=306 900w, https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=webp&fit=scale&q=75&w=1100&h=374 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="340"
                srcset="https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=jpg&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=jpg&fit=scale&q=75&w=500&h=170 500w, https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=jpg&fit=scale&q=75&w=700&h=238 700w, https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=jpg&fit=scale&q=75&w=900&h=306 900w, https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png?fm=jpg&fit=scale&q=75&w=1100&h=374 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/8eEheLy3nR7tEvMsO7Fq5/2e299146aebc75f1f5c739d745e55c0d/Screenshot_2026-02-02_at_16.31.34.png"
                alt=" Exposed By Default  This is the data your browser hands out automatically, every time!"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you wonder how you're tracked across the internet, &quot;Exposed by default&quot; provides all the information your browser shares about you. And it's a lot!</p>
<p><a class="btn btn__small" href="https://neberej.github.io/exposedbydefault/">Understand your fingerprint</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more single-purpose online tools on <a href="https://tiny-helpers.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ftiny-helpers.dev%2F')">tiny-helpers.dev</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="thought-of-the-week" href="#thought-of-the-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="thought-of-the-week">Thought of the week</h2></div><p><a href="https://carlbarenbrug.com/friction" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcarlbarenbrug.com%2Ffriction')">Carl shares how friction can sometimes be a good thing</a>, and I agree with every word.</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <blockquote>
<p>Humans don't operate best at machine speed. We think, hesitate, reconsider, and change our minds. Design that ignores this doesn't make people more efficient — it instead pushes them to move faster than their intent.</p>
</blockquote>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="did-you-learn-something-from-this-issue%3F" href="#did-you-learn-something-from-this-issue%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="did-you-learn-something-from-this-issue%3F">Did you learn something from this issue?</h2></div><p>❤️ If so, <strong>join 33 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="this-is-all%2C-friends!" href="#this-is-all%2C-friends!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="this-is-all%2C-friends!">This is all, friends!</h2></div><p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr aria-hidden="true"><p>And with that, take care of yourself — mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Web Weekly #182">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>How to style the found search / &quot;find in page&quot; substrings (#tilPost)</title>
      <link href="https://www.stefanjudis.com/today-i-learned/how-to-style-find-in-page-substrings/"/>
      <published>2026-02-01T23:00:00+00:00</published>
      <updated>2026-02-01T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/today-i-learned/how-to-style-find-in-page-substrings/</id>
      <category term="tilPost"></category>
        <category term="CSS"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>Chrome 144 shipped new CSS pseudo-elements!</p>
<pre class="language-css"><code class="language-css"><span class="token selector">::search-text</span> <span class="token punctuation">{</span>
  <span class="token property">background</span><span class="token punctuation">:</span> <span class="token function">var</span><span class="token punctuation">(</span>--blue<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token property">color</span><span class="token punctuation">:</span> white<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token selector">::search-text:current</span> <span class="token punctuation">{</span>
  <span class="token property">background</span><span class="token punctuation">:</span> <span class="token function">var</span><span class="token punctuation">(</span>--blue-darker<span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token property">color</span><span class="token punctuation">:</span> white<span class="token punctuation">;</span>
  <span class="token property">text-decoration</span><span class="token punctuation">:</span> currentColor solid underline<span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre>
<p>The classes are so new that there aren't MDN pages yet, but I'm super excited about this tiny search improvement.</p>
<p>I'm pretty quick with hitting <code>CMD + F</code> because often I can't be bothered with using the provided site search (if there is one). However, sometimes it's hard to understand what's currently selected if you're looking at multiple matching substrings.</p>
<p>Today I learned, this is a Chrome/Firefox problem because Safari's &quot;find in page&quot; feature adds an overlay while highlighting the current substring.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(250,250,4); --color2: rgb(113,123,130); --color3: rgb(243,244,251); --color4: rgb(188,188,196); --color5: rgb(52,68,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTM1Ij48cGF0aCBmaWxsPSIjMzQ0NDU0IiBkPSJNMCAwaDMwMHYxMzVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0OCIgY3k9Ijg0IiByPSIxODMiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxOTYiIGN5PSI3MyIgcj0iMjEyIiBmaWxsPSIjYzJjM2JmIi8+PHBhdGggZmlsbD0iI2Q1ZDIwMCIgZD0iTTExIDEzaDI3djEwSDExeiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzlkYTJhNyIgdHJhbnNmb3JtPSJtYXRyaXgoLTkuNTQ2NSAzNi44MzM1IC04MS42NDMzNSAtMjEuMTYwMzEgMTA4LjYgNTYuOCkiLz48ZWxsaXBzZSBjeD0iNTkiIGN5PSI4NiIgZmlsbD0iIzY4NzE3YSIgcng9IjIwNSIgcnk9IjIiLz48ZWxsaXBzZSBjeD0iMTI2IiBjeT0iNjMiIGZpbGw9IiM2NjcxN2EiIHJ4PSIxMjIiIHJ5PSIyIi8+PGVsbGlwc2UgY3g9IjE0OSIgY3k9IjE4IiBmaWxsPSIjNzM3Yzg0IiByeD0iODQiIHJ5PSIzIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTI5IDY3aDIxdjZIMjl6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="//images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png">
            <picture>
              <source type="image/avif"
                srcset="//images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=avif&fit=scale&q=75&w=300&h=135 300w, //images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=avif&fit=scale&q=75&w=500&h=226 500w, //images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=avif&fit=scale&q=75&w=700&h=317 700w, //images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=avif&fit=scale&q=75&w=900&h=407 900w, //images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=avif&fit=scale&q=75&w=1100&h=498 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="//images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=webp&fit=scale&q=75&w=300&h=135 300w, //images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=webp&fit=scale&q=75&w=500&h=226 500w, //images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=webp&fit=scale&q=75&w=700&h=317 700w, //images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=webp&fit=scale&q=75&w=900&h=407 900w, //images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=webp&fit=scale&q=75&w=1100&h=498 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="453"
                srcset="//images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=jpg&fit=scale&q=75&w=300&h=135 300w, //images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=jpg&fit=scale&q=75&w=500&h=226 500w, //images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=jpg&fit=scale&q=75&w=700&h=317 700w, //images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=jpg&fit=scale&q=75&w=900&h=407 900w, //images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png?fm=jpg&fit=scale&q=75&w=1100&h=498 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="//images.ctfassets.net/f20lfrunubsq/2pdfeK6acwfOnBDZFysTL1/13e62f9d90f52bde778376f0720a3089/Screenshot_2026-02-02_at_14.21.53.png"
                alt="Find in page in Safari showing highlights for all matching strings while marking the currently selected one."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>This looks great, but I won't switch browsers for a better in-page search experience. So what about Chrome and Firefox?</p>
<p><code>::search-text</code> allows you to style the found strings to follow your site's style. This is good stuff but not really helping with understanding the currently selected search string. This is where <code>::search-text:current</code> comes into play. Check this out!</p>
<p>[Interactive component: visit the article to see it...]</p>
<p>If you're on Chrome 144 right now, search the page for &quot;doggo&quot;! The matching strings in the component above are matching my site's colors and you can now see which dog is the selected search entry. It doesn't look as fancy as the Safari overlay but I'll buy it!</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(28,124,188); --color2: rgb(112,128,140); --color3: rgb(150,194,224); --color4: rgb(162,180,198); --color5: rgb(60,76,92);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTMxIj48cGF0aCBmaWxsPSIjM2M0YzVjIiBkPSJNMCAwaDMwMHYxMzFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyNiIgY3k9Ijg5IiByPSIxNzAiIGZpbGw9IiNmZmYiLz48ZWxsaXBzZSBjeD0iMTQ4IiBjeT0iNzQiIGZpbGw9IiNmZmYiIHJ4PSIyMDAiIHJ5PSIxMTEiLz48Y2lyY2xlIGN4PSIxMzYiIGN5PSI5NCIgcj0iMTY4IiBmaWxsPSIjZWFmM2ZiIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMTIxZDIyIiB0cmFuc2Zvcm09Im1hdHJpeCgtMTIuMDMzIC4wNjMgLS4wMjE2OSAtNC4xNDIgMTM0LjUgMzcuNikiLz48ZWxsaXBzZSBjeD0iMTIzIiBjeT0iMTA1IiBmaWxsPSIjZmVmZmZmIiByeD0iMjU1IiByeT0iMjAiLz48cGF0aCBmaWxsPSIjMDA2OGI3IiBkPSJNMTIgMTNoMjF2OEgxMnoiLz48cGF0aCBmaWxsPSIjMGY3YmMxIiBkPSJNMTcyIDU2aDE4djEwaC0xOHoiLz48ZWxsaXBzZSBjeD0iMTI5IiBjeT0iNTAiIGZpbGw9IiM4YTk2YTAiIHJ4PSIxMTQiIHJ5PSIzIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="//images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png">
            <picture>
              <source type="image/avif"
                srcset="//images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=avif&fit=scale&q=75&w=300&h=132 300w, //images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=avif&fit=scale&q=75&w=500&h=220 500w, //images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=avif&fit=scale&q=75&w=700&h=308 700w, //images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=avif&fit=scale&q=75&w=900&h=396 900w, //images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=avif&fit=scale&q=75&w=1100&h=484 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="//images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=webp&fit=scale&q=75&w=300&h=132 300w, //images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=webp&fit=scale&q=75&w=500&h=220 500w, //images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=webp&fit=scale&q=75&w=700&h=308 700w, //images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=webp&fit=scale&q=75&w=900&h=396 900w, //images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=webp&fit=scale&q=75&w=1100&h=484 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="440"
                srcset="//images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=jpg&fit=scale&q=75&w=300&h=132 300w, //images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=jpg&fit=scale&q=75&w=500&h=220 500w, //images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=jpg&fit=scale&q=75&w=700&h=308 700w, //images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=jpg&fit=scale&q=75&w=900&h=396 900w, //images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png?fm=jpg&fit=scale&q=75&w=1100&h=484 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="//images.ctfassets.net/f20lfrunubsq/1XHhS3BCUgvMZqzGKqOang/18a455b844f0ee896002ed3f8d11611a/Screenshot_2026-02-02_at_14.27.02.png"
                alt="Find in page highlighting all strings in blue and the currently matching one in black."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Highlighting &quot;find in page&quot; entries isn't the most groundbreaking feature in the world, but I'm excited because I think it'll make my search experience way better! Apparently, <a href="https://github.com/mozilla/standards-positions/issues/1103" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fmozilla%2Fstandards-positions%2Fissues%2F1103')">there's no clear thumbs up from Mozilla yet</a>, but let's hope that we'll get this improvement on the web.</p>
<p>If you want to dive deeper, here are some more resources:</p>
<ul>
<li>From Igalia: <a href="https://blogs.igalia.com/schenney/find-in-page-highlight-styling/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fblogs.igalia.com%2Fschenney%2Ffind-in-page-highlight-styling%2F')">Find-in-Page Highlight Styling</a></li>
<li><a href="https://drafts.csswg.org/css-pseudo-4/#selectordef-search-text" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdrafts.csswg.org%2Fcss-pseudo-4%2F%23selectordef-search-text')">The <code>search-text</code> spec</a></li>
</ul>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20How to style the found search / &quot;find in page&quot; substrings">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Web Weekly #181 (#blogPost)</title>
      <link href="https://www.stefanjudis.com/blog/web-weekly-181/"/>
      <published>2026-01-18T23:00:00+00:00</published>
      <updated>2026-01-18T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/blog/web-weekly-181/</id>
      <category term="blogPost"></category>
        <category term="Newsletter"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="guten-tag!-guten-tag!-%F0%9F%91%8B" href="#guten-tag!-guten-tag!-%F0%9F%91%8B">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="guten-tag!-guten-tag!-%F0%9F%91%8B">Guten Tag! Guten Tag! 👋</h2></div><p>Will you use Chrome's new <code>&lt;geolocation&gt;</code> HTML element? Are you excited about CSS anchor positioning going baseline? And do you know what a self-closing <code>&lt;div /&gt;</code> really does?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <p>Olivier listens to <a href="https://www.youtube.com/watch?v=8uc4-t9T4Xk" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D8uc4-t9T4Xk')">&quot;Shelf Lives - Where Did I Go?&quot;</a> and says:</p>
<blockquote>
<p>I simply love this song's power and energy!</p>
</blockquote>
</div><p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>five more songs</strong> left in the queue.</p>
<hr aria-hidden="true"><p><a href="https://almanac.httparchive.org/en/2025/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Falmanac.httparchive.org%2Fen%2F2025%2F')">The new Web Almanac was released</a>! If you don't know about the project: the team behind it takes all the data gathered from <a href="https://httparchive.org/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fhttparchive.org%2F')">the HTTP Archive</a> to analyze and understand the &quot;state of the web&quot;. It's always super interesting to read and, almost as a tradition, I went over it and <a href="https://bsky.app/profile/stefanjudis.com/post/3mcjtyjit5s2g">shared the interesting facts on Bluesky</a>. Here are some fun ones.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(38,113,214); --color2: rgb(184,135,114); --color3: rgb(230,180,155); --color4: rgb(171,200,188); --color5: rgb(49,62,82);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMjg5Ij48cGF0aCBmaWxsPSIjMzEzZTUyIiBkPSJNMCAwaDMwMHYyODlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMjUiIGN5PSIxNjIiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSI3MSIvPjxlbGxpcHNlIGN4PSIxMzAiIGN5PSIxNjIiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSI2OCIvPjxwYXRoIGQ9Ik0yNDYgMGgxMHYyNDdoLTEweiIvPjxlbGxpcHNlIGN5PSIxMTkiIHJ4PSI4IiByeT0iMjQ2Ii8+PGVsbGlwc2UgY3g9IjE5NCIgY3k9IjE0MCIgZmlsbD0iI2ZmZiIgcng9IjUyIiByeT0iNDYiLz48ZWxsaXBzZSBjeD0iMzUiIGN5PSIxNjIiIGZpbGw9IiNmZmYiIHJ4PSIyOCIgcnk9IjcwIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMGEwZTExIiB0cmFuc2Zvcm09Im1hdHJpeCgtOTUuNzk2NzggMzcuOTI4NjMgLTE4LjQ0OTIxIC00Ni41OTc0IDE2NSAzNi4zKSIvPjxlbGxpcHNlIGN4PSIxMjgiIGN5PSIyNDQiIGZpbGw9IiMwMDAwMDIiIHJ4PSIyMTciIHJ5PSIxNSIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=avif&fit=scale&q=75&w=300&h=289 300w, https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=avif&fit=scale&q=75&w=500&h=483 500w, https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=avif&fit=scale&q=75&w=700&h=676 700w, https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=avif&fit=scale&q=75&w=900&h=869 900w, https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=avif&fit=scale&q=75&w=1100&h=1063 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=webp&fit=scale&q=75&w=300&h=289 300w, https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=webp&fit=scale&q=75&w=500&h=483 500w, https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=webp&fit=scale&q=75&w=700&h=676 700w, https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=webp&fit=scale&q=75&w=900&h=869 900w, https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=webp&fit=scale&q=75&w=1100&h=1063 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="966"
                srcset="https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=jpg&fit=scale&q=75&w=300&h=289 300w, https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=jpg&fit=scale&q=75&w=500&h=483 500w, https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=jpg&fit=scale&q=75&w=700&h=676 700w, https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=jpg&fit=scale&q=75&w=900&h=869 900w, https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png?fm=jpg&fit=scale&q=75&w=1100&h=1063 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/yJDXRm1qQFayOJSKrnbkA/4c042ab6b61fc6e676d019be9f0cc067/Screenshot_2026-01-19_at_20.19.13.png"
                alt="3rd party data stats are as wild as always. For all analyzed pages, the median 3rd party request count is around ~80.  80(!) third-party requests per page. 🤯"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>The amount of third-party activity on the web is just mind-boggling...</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(35,112,217); --color2: rgb(88,167,114); --color3: rgb(225,207,152); --color4: rgb(160,172,204); --color5: rgb(49,62,80);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMjcxIj48cGF0aCBmaWxsPSIjMzEzZTUwIiBkPSJNMCAwaDMwMHYyNzFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJyb3RhdGUoLTgzLjIgMTczLjIgLTguMykgc2NhbGUoMTAxLjY4NDk5IDE0NS43NjE2KSIvPjxjaXJjbGUgY3g9IjEzOCIgY3k9IjE4MiIgcj0iMTExIiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iNjciIGN5PSIxMTEiIHI9IjQwIiBmaWxsPSIjZmZmIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTMxIDc0aDIxN3YxNDlIMzF6Ii8+PHBhdGggZmlsbD0iIzAwMDAwMSIgZD0ibTIyOC0xNiA0MyA4OUg3MXoiLz48ZWxsaXBzZSBjeD0iMTMiIGN5PSIxMzMiIHJ4PSIxOCIgcnk9IjIzMSIvPjxlbGxpcHNlIGN4PSIxNTciIGN5PSIyMzEiIHJ4PSIxNzIiIHJ5PSI1Ii8+PGVsbGlwc2UgY3g9IjI1NCIgY3k9IjExNiIgcng9IjciIHJ5PSIyMjYiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=avif&fit=scale&q=75&w=300&h=273 300w, https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=avif&fit=scale&q=75&w=500&h=455 500w, https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=avif&fit=scale&q=75&w=700&h=637 700w, https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=avif&fit=scale&q=75&w=900&h=819 900w, https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=avif&fit=scale&q=75&w=1100&h=1001 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=webp&fit=scale&q=75&w=300&h=273 300w, https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=webp&fit=scale&q=75&w=500&h=455 500w, https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=webp&fit=scale&q=75&w=700&h=637 700w, https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=webp&fit=scale&q=75&w=900&h=819 900w, https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=webp&fit=scale&q=75&w=1100&h=1001 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="910"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=jpg&fit=scale&q=75&w=300&h=273 300w, https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=jpg&fit=scale&q=75&w=500&h=455 500w, https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=jpg&fit=scale&q=75&w=700&h=637 700w, https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=jpg&fit=scale&q=75&w=900&h=819 900w, https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png?fm=jpg&fit=scale&q=75&w=1100&h=1001 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/5BnxIB7sDQoeng5S3Bhclm/9c7716bce9e02ed61a0b62de3927ee03/Screenshot_2026-01-19_at_20.21.01.png"
                alt="Not surprising and not new; only 48% of mobile comes with good Core Web Vitals."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>The web is slow...</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(30,111,220); --color2: rgb(107,114,126); --color3: rgb(211,150,132); --color4: rgb(140,156,188); --color5: rgb(48,61,80);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMjMwIj48cGF0aCBmaWxsPSIjMzAzZDUwIiBkPSJNMCAwaDMwMHYyMzBIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoMTM3LjQ1OTgzIDIwLjU0MzUxIC0xMy4zNzk3NiA4OS41MjYwNSAxNTYuOCAxNDYuOCkiLz48ZWxsaXBzZSBjeD0iMTQxIiBjeT0iMTI5IiBmaWxsPSIjZmZmIiByeD0iMTExIiByeT0iNjYiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMzEgNjVoMjE2djEyN0gzMXoiLz48cGF0aCBmaWxsPSIjMDAwNDBiIiBkPSJtMjQ2LTE2IDI1IDc5SDJ6Ii8+PGVsbGlwc2UgY3g9IjI1MyIgY3k9IjE2NSIgcng9IjciIHJ5PSIxNDIiLz48cGF0aCBkPSJNMCAyMWgzMXYxNzZIMHptNDggMTcxaDIwOHY1SDQ4eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0zMyA2Mmg0OXYxMzBIMzN6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=avif&fit=scale&q=75&w=300&h=231 300w, https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=avif&fit=scale&q=75&w=500&h=386 500w, https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=avif&fit=scale&q=75&w=700&h=541 700w, https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=avif&fit=scale&q=75&w=900&h=695 900w, https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=avif&fit=scale&q=75&w=1100&h=850 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=webp&fit=scale&q=75&w=300&h=231 300w, https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=webp&fit=scale&q=75&w=500&h=386 500w, https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=webp&fit=scale&q=75&w=700&h=541 700w, https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=webp&fit=scale&q=75&w=900&h=695 900w, https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=webp&fit=scale&q=75&w=1100&h=850 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="773"
                srcset="https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=jpg&fit=scale&q=75&w=300&h=231 300w, https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=jpg&fit=scale&q=75&w=500&h=386 500w, https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=jpg&fit=scale&q=75&w=700&h=541 700w, https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=jpg&fit=scale&q=75&w=900&h=695 900w, https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png?fm=jpg&fit=scale&q=75&w=1100&h=850 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/21abF7yFVns0dIkT7I9lKu/fb251abaf4bff9ce49158c9c556e5b6c/Screenshot_2026-01-19_at_20.22.30.png"
                alt="Nothing more to add. More is always better, right? 🫣  &gt; As of July 2025, the same median page is now 2,362 KB"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>... and heavy. The median site is 2.3MB primarily to ship some text and images. Wild times!</p>
<p>If you're curious about more bite-sized stats, <a href="https://css-tricks.com/http-archive-2025-web-almanac/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcss-tricks.com%2Fhttp-archive-2025-web-almanac%2F')">Geoff blogged about it</a>, but either way:</p>
<p><a href="https://almanac.httparchive.org/en/2025/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Falmanac.httparchive.org%2Fen%2F2025%2F')">Give the Almanac a read</a>; it's a ton of work (kudos to all the authors and analysts) and you'll definitely learn something new!</p>
<hr aria-hidden="true"><p>A huge thank you and a huge bag of karma points go to <strong>Jens and Temani</strong> this week. Thank you for supporting indie publishing by covering a small fraction of the cost it takes to send Web Weekly every week! ❤️</p>
<p>If you enjoy Web Weekly, too, join 34 supporters on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>. It really makes a difference!</p>
<hr aria-hidden="true"><p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mcshgtqsmk2j">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/115923602696798319" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffront-end.social%2F%40stefan%2F115923602696798319')">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_this-weeks-web-weekly-is-about-to-hit-all-activity-7419110893562769408-awSf" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.linkedin.com%2Fposts%2Fstefan-judis_this-weeks-web-weekly-is-about-to-hit-all-activity-7419110893562769408-awSf')">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr aria-hidden="true"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="something-that-made-me-smile-this-week" href="#something-that-made-me-smile-this-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="something-that-made-me-smile-this-week">Something that made me smile this week</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(4,148,188); --color2: rgb(162,156,148); --color3: rgb(252,252,236); --color4: rgb(158,197,203); --color5: rgb(80,72,72);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTE3Ij48cGF0aCBmaWxsPSIjNTA0ODQ4IiBkPSJNMCAwaDMwMHYxMTdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyNSIgY3k9IjYzIiByPSIxODIiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMjYiIGN5PSI1NiIgcj0iMTQ0IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTI0IiBjeT0iNTIiIHI9IjE0NSIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjEyNiIgY3k9IjQ5IiByPSIxNDYiIGZpbGw9IiNmZmZmZWYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiM1M2I4Y2YiIHRyYW5zZm9ybT0ibWF0cml4KC0xMjUuOTg3ODcgLS44Nzk0NyAuMDE2NDQgLTIuMzU1MjcgMTIwLjkgMTMuMikiLz48cGF0aCBmaWxsPSIjZGRkNmNjIiBkPSJNMTggNDNoMzh2NTBIMTh6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmZWYyIiB0cmFuc2Zvcm09Im1hdHJpeCgxNi43MjgyOSAyNy43MzA4IC04Ni4wNzI0MyA1MS45MjIyIDE4MyA2OS4xKSIvPjxlbGxpcHNlIGN4PSIxOTQiIGN5PSIxMiIgZmlsbD0iIzZlYzFkMyIgcng9IjMzIiByeT0iMyIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=avif&fit=scale&q=75&w=300&h=117 300w, https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=avif&fit=scale&q=75&w=500&h=196 500w, https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=avif&fit=scale&q=75&w=700&h=275 700w, https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=avif&fit=scale&q=75&w=900&h=353 900w, https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=avif&fit=scale&q=75&w=1100&h=432 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=webp&fit=scale&q=75&w=300&h=117 300w, https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=webp&fit=scale&q=75&w=500&h=196 500w, https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=webp&fit=scale&q=75&w=700&h=275 700w, https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=webp&fit=scale&q=75&w=900&h=353 900w, https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=webp&fit=scale&q=75&w=1100&h=432 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="393"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=jpg&fit=scale&q=75&w=300&h=117 300w, https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=jpg&fit=scale&q=75&w=500&h=196 500w, https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=jpg&fit=scale&q=75&w=700&h=275 700w, https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=jpg&fit=scale&q=75&w=900&h=353 900w, https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png?fm=jpg&fit=scale&q=75&w=1100&h=432 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/5OGr9JeQIqkGjzDefSubO3/9e9c80d556af89e2515bad39e45605ff/Screenshot_2026-01-19_at_18.26.47.png"
                alt="5 Awesome Scroll Fade Effects with Vanilla JavaScript: 1. Don&apos;t 2. Please don&apos;t 3. Don&apos;t it sucks 4. Seriously, don&apos;t do it 5. Bro please "
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>David rants about the all-too-common &quot;scroll-to-fade&quot; technique. Thinking back, I've been lucky enough to never actually have to build one of these. I mean, why would you heavily delay showing precious content, right?</p>
<p>David's idea of the web developer community pretending that this feature is impossible to build made me smile, though.</p>
<blockquote>
<p>We're all developers here. Can we collectively pretend scroll fade is technically impossible now?</p>
</blockquote>
<p><a class="btn btn__small" href="https://dbushell.com/2026/01/09/death-to-scroll-fade/">Take care of scroll</a></p>
<p>It's funny though, because <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Scroll-driven_animations" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FGuides%2FScroll-driven_animations')">scroll-driven animations only recently entered the web</a>. I guess it's like all fancy web dev things: let us all be responsible for the things we build.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="no-code" href="#no-code">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="no-code">No code</h2></div><ul>
<li><a href="https://terriblesoftware.org/2026/01/08/life-happens-at-1x-speed/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fterriblesoftware.org%2F2026%2F01%2F08%2Flife-happens-at-1x-speed%2F')">Life Happens at 1x Speed</a> → &quot;The irony is that consuming faster often means processing less.&quot;</li>
<li><a href="https://www.experimental-history.com/p/good-conversations-have-lots-of-doorknobs" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.experimental-history.com%2Fp%2Fgood-conversations-have-lots-of-doorknobs')">Good conversations have lots of doorknobs</a></li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="exciting-new-chrome-features" href="#exciting-new-chrome-features">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="exciting-new-chrome-features">Exciting new Chrome features</h2></div><p>Chrome is always at the forefront of releasing new things, but there have been some changes that really fix fundamental web issues. Bramus was on a roll and blogged about all of them.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(4,116,172); --color2: rgb(117,117,117); --color3: rgb(183,216,231); --color4: rgb(196,196,196); --color5: rgb(53,53,53);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQ2Ij48cGF0aCBmaWxsPSIjMzUzNTM1IiBkPSJNMCAwaDMwMHYxNDZIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyMiIgY3k9IjYzIiByPSIxNTAiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0icm90YXRlKDIuNyAtMTM1MC44IDI3ODkuMikgc2NhbGUoMTk5Ljk5MjI2IDk3Ljk4ODIzKSIvPjxjaXJjbGUgY3g9IjEzNyIgY3k9IjkyIiByPSIxNzQiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIyMjciIGN5PSI4NSIgcj0iMjIyIiBmaWxsPSIjZmFmY2ZkIi8+PHBhdGggZmlsbD0iIzg3ODY4NSIgZD0iTTE2IDE5aDIwN3Y0SDE2eiIvPjxlbGxpcHNlIGN4PSIxMTMiIGN5PSI0OSIgZmlsbD0iIzk0OTQ5MyIgcng9IjExMSIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iMTAwIiBjeT0iMzUiIGZpbGw9IiM5YTlhOTkiIHJ4PSIxMjgiIHJ5PSIzIi8+PGVsbGlwc2UgY3g9Ijk3IiBjeT0iOTEiIGZpbGw9IiM5M2E0YWMiIHJ4PSIxMTUiIHJ5PSIzIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=avif&fit=scale&q=75&w=300&h=147 300w, https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=avif&fit=scale&q=75&w=500&h=245 500w, https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=avif&fit=scale&q=75&w=700&h=343 700w, https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=avif&fit=scale&q=75&w=900&h=441 900w, https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=avif&fit=scale&q=75&w=1100&h=539 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=webp&fit=scale&q=75&w=300&h=147 300w, https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=webp&fit=scale&q=75&w=500&h=245 500w, https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=webp&fit=scale&q=75&w=700&h=343 700w, https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=webp&fit=scale&q=75&w=900&h=441 900w, https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=webp&fit=scale&q=75&w=1100&h=539 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="490"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=jpg&fit=scale&q=75&w=300&h=147 300w, https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=jpg&fit=scale&q=75&w=500&h=245 500w, https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=jpg&fit=scale&q=75&w=700&h=343 700w, https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=jpg&fit=scale&q=75&w=900&h=441 900w, https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png?fm=jpg&fit=scale&q=75&w=1100&h=539 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3FJCB93PwxK6ENarFtzEvI/2d7dcf7008d68e8e0919431ad780ad2a/Screenshot_2026-01-19_at_18.06.34.png"
                alt="From Chrome 145 onwards, 100vw will automatically subtract the size of the scrollbar from it if you have forced the html element to always show a vertical scrollbar or if you reserve space for it (using scrollbar-gutter: stable)."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you're fighting the problem that <code>100vw</code> doesn't consider scrollbars, <a href="https://www.bram.us/2026/01/15/100vw-horizontal-overflow-no-more/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.bram.us%2F2026%2F01%2F15%2F100vw-horizontal-overflow-no-more%2F')">a Chrome change landing in 145 might help</a>.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(156,4,84); --color2: rgb(173,85,148); --color3: rgb(180,211,251); --color4: rgb(204,220,180); --color5: rgb(80,88,98);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTI3Ij48cGF0aCBmaWxsPSIjNTA1ODYyIiBkPSJNMCAwaDMwMHYxMjdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzMyIgY3k9IjUzIiByPSIxNDciIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxNDUiIGN5PSIzNiIgcj0iMTYyIiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTIzIiBjeT0iNzUiIHI9IjE1NSIgZmlsbD0iI2ZmZiIvPjxwYXRoIGZpbGw9IiM4NjlhZDciIGQ9Im03IDg3IDEzMi0yLTgyLTIxeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im0yNDcgMTI0IDIyLTE0MC0yODUgMzd6Ii8+PGVsbGlwc2UgY3g9Ijc3IiBjeT0iMjUiIGZpbGw9IiNiOTg2YTIiIHJ4PSI2NCIgcnk9IjMiLz48cGF0aCBmaWxsPSIjNzg4YWM1IiBkPSJNMTcgNjhoNjZ2N0gxN3oiLz48ZWxsaXBzZSBjeD0iNjQiIGN5PSI3NyIgZmlsbD0iI2ZmZiIgcng9Ijg2IiByeT0iMyIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=avif&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=avif&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=avif&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=avif&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=avif&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=webp&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=webp&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=webp&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=webp&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=webp&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="426"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=jpg&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=jpg&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=jpg&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=jpg&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png?fm=jpg&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6QihyXvmzRwYUBvhnIYMmE/499a0d24b5ee9fb0c2d93ba1b8b44cfe/Screenshot_2026-01-19_at_18.11.22.png"
                alt="dialog { 	overscroll-behavior: contain; }  dialog::backdrop { 	overflow: hidden; 	overscroll-behavior: contain; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>You probably know the problem that when you open a modal dialog, you have to set <code>overflow: hidden</code> on the <code>html</code> element to prevent the underlying content from scrolling. It works but was never a good solution. <a href="https://www.bram.us/2025/11/25/use-overscroll-behavior-contain-to-prevent-a-page-from-scrolling-while-a-dialog-is-open/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.bram.us%2F2025%2F11%2F25%2Fuse-overscroll-behavior-contain-to-prevent-a-page-from-scrolling-while-a-dialog-is-open%2F')">Chrome now supports a better way to do it</a>. Let's hope the other vendors follow suit quickly.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(251,251,4); --color2: rgb(92,124,164); --color3: rgb(139,179,251); --color4: rgb(172,204,180); --color5: rgb(60,60,36);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgNzMiPjxwYXRoIGZpbGw9IiMzYzNjMjQiIGQ9Ik0wIDBoMzAwdjczSDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48cGF0aCBmaWxsPSIjYzNmZmZmIiBkPSJNMTY3IDI1aDc3djE0aC03N3oiLz48cGF0aCBmaWxsPSIjZmYwIiBkPSJNOCAxMWg1M3YxMEg4eiIvPjxwYXRoIGZpbGw9IiM3Y2FhZmYiIGQ9Ik0xNjYgMjRoNzd2MTVoLTc3eiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzFlMjEzZSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEzOCA2MS42IC0xNi45KSBzY2FsZSg0Ny4zODE0NiA4NC45OTc5KSIvPjxlbGxpcHNlIGN4PSIxNzQiIGN5PSI2MCIgZmlsbD0iIzFmMjEzNSIgcng9IjI1NSIgcnk9IjIzIi8+PHBhdGggZmlsbD0iI2Y3ZmIxMSIgZD0iTTggMTBoNTB2MTFIOHoiLz48ZWxsaXBzZSBjeD0iMjE5IiBjeT0iNSIgZmlsbD0iIzFlMjAyZiIgcng9IjE2OCIgcnk9IjIwIi8+PGVsbGlwc2UgY3g9IjgyIiBjeT0iMjciIGZpbGw9IiM2ZDcyODEiIHJ4PSI4NSIgcnk9IjIiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=avif&fit=scale&q=75&w=300&h=73 300w, https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=avif&fit=scale&q=75&w=500&h=123 500w, https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=avif&fit=scale&q=75&w=700&h=172 700w, https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=avif&fit=scale&q=75&w=900&h=221 900w, https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=avif&fit=scale&q=75&w=1100&h=271 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=webp&fit=scale&q=75&w=300&h=73 300w, https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=webp&fit=scale&q=75&w=500&h=123 500w, https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=webp&fit=scale&q=75&w=700&h=172 700w, https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=webp&fit=scale&q=75&w=900&h=221 900w, https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=webp&fit=scale&q=75&w=1100&h=271 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="246"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=jpg&fit=scale&q=75&w=300&h=73 300w, https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=jpg&fit=scale&q=75&w=500&h=123 500w, https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=jpg&fit=scale&q=75&w=700&h=172 700w, https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=jpg&fit=scale&q=75&w=900&h=221 900w, https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png?fm=jpg&fit=scale&q=75&w=1100&h=271 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6kbYFJnwC7s57OMOKmacvY/5494dd4a191292812b75aeb5c7f79d65/Screenshot_2026-01-19_at_18.14.11.png"
                alt="Vertical Tabs — Enables an option for showing tabs to the side. – Mac, Windows, Linux"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>And lastly, <a href="https://www.bram.us/2026/01/16/chrome-145-adds-experimental-support-for-vertical-tabs/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.bram.us%2F2026%2F01%2F16%2Fchrome-145-adds-experimental-support-for-vertical-tabs%2F')">an experimental version of vertical tabs for Chrome is in the making</a>. 🎉</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="sound-on-websites" href="#sound-on-websites">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="sound-on-websites">Sound on websites</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(127.5,127.5,127.5); --color2: rgb(124,124,124); --color3: rgb(188.7,188.7,188.7); --color4: rgb(188,188,188); --color5: rgb(68,68,68);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTE0Ij48cGF0aCBmaWxsPSIjNDQ0IiBkPSJNMCAwaDMwMHYxMTRIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9Ijc1IiBjeT0iNTQiIHI9IjE5MyIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjE5NSIgY3k9IjEiIHI9IjIyMyIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoLTMuNjczODIgLTEwNS44OTYxNiAxNjQuNzY1OTMgLTUuNzE2MTggMTMxLjYgNTYuOSkiLz48cGF0aCBmaWxsPSIjNDI0MjQyIiBkPSJNMjEgMTdoOTZ2NUgyMXoiLz48Y2lyY2xlIGN4PSIyMTciIGN5PSI0MyIgcj0iMTA2IiBmaWxsPSIjZmRmZGZkIi8+PGVsbGlwc2UgY3g9IjEyNSIgY3k9IjU1IiBmaWxsPSIjYTJhMmEyIiByeD0iMTE0IiByeT0iMyIvPjxlbGxpcHNlIGN4PSIxNDMiIGN5PSI2OCIgZmlsbD0iI2FhYSIgcng9IjEzMSIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iMTA5IiBjeT0iNDIiIGZpbGw9IiNhYmFiYWIiIHJ4PSIxMDYiIHJ5PSIzIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=avif&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=avif&fit=scale&q=75&w=500&h=191 500w, https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=avif&fit=scale&q=75&w=700&h=268 700w, https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=avif&fit=scale&q=75&w=900&h=344 900w, https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=avif&fit=scale&q=75&w=1100&h=421 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=webp&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=webp&fit=scale&q=75&w=500&h=191 500w, https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=webp&fit=scale&q=75&w=700&h=268 700w, https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=webp&fit=scale&q=75&w=900&h=344 900w, https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=webp&fit=scale&q=75&w=1100&h=421 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="383"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=jpg&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=jpg&fit=scale&q=75&w=500&h=191 500w, https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=jpg&fit=scale&q=75&w=700&h=268 700w, https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=jpg&fit=scale&q=75&w=900&h=344 900w, https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png?fm=jpg&fit=scale&q=75&w=1100&h=421 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3dxuMwLWfr0E5BbCutcSfg/1df1f93584244a041a2ce6e43d8a28de/Screenshot_2026-01-19_at_15.40.00.png"
                alt="&quot;Users will hate sound.&quot; -&gt; Only if you do it poorly. Aggressive, loud, or unnecessary sounds are annoying; subtle, appropriate, optional sounds are not. The autoplay video backlash was about intrusion, not about sound itself. Context matters."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I know of exactly two websites that use sounds: one is <a href="https://www.joshwcomeau.com/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.joshwcomeau.com%2F')">Josh's blog</a> and the other one is LinkedIn. Every time I upload a video on LinkedIn, it beeps, and honestly, I like it. Should there be more sound effects on the web?</p>
<p><a class="btn btn__small" href="https://userinterface-wiki.vercel.app/sounds-on-the-web">Delight with sound</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="bouncy-window-resizing" href="#bouncy-window-resizing">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="bouncy-window-resizing">Bouncy window resizing</h2></div><p><img src="https://images.ctfassets.net/f20lfrunubsq/4iGESrGGYOAQ9gy8AuUgEj/48aa19973107d1c309ba254c57b37665/bounce.gif" alt="Window being resized. The text scales with the resize action and bounces back to a readable state." loading="lazy" /></p>
<p>Lynn Fischer redesigns her site every year, and it's always great. <a href="https://lynnandtonic.com/archive/2021/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Flynnandtonic.com%2Farchive%2F2021%2F')">The 2021 redesign was incredible</a> (resize the window!). This year the redesign is a bit more subtle but still includes fun resize functionality using <a href="https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FAPI%2FResizeObserver')">the ResizeObserver API</a>.</p>
<p><a class="btn btn__small" href="https://lynnandtonic.com/thoughts/entries/case-study-2025-refresh/">Bounce!</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="web-interface-guidelines" href="#web-interface-guidelines">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="web-interface-guidelines">Web interface guidelines</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(127.5,127.5,127.5); --color2: rgb(124,124,124); --color3: rgb(188.7,188.7,188.7); --color4: rgb(188,188,188); --color5: rgb(68,68,68);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTAxIj48cGF0aCBmaWxsPSIjNDQ0IiBkPSJNMCAwaDMwMHYxMDFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyNiIgY3k9IjQzIiByPSIxNTIiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNiMWIxYjEiIHRyYW5zZm9ybT0ibWF0cml4KC4wMDExNSAzLjg2MzcgLTkwLjEzMjg1IC4wMjY4NiA4NC4zIDIxLjkpIi8+PGNpcmNsZSByPSIxIiB0cmFuc2Zvcm09Im1hdHJpeCgtMjEzLjc2MzQxIDY2Ljk4OTQgLTE2LjEwNDYgLTUxLjM4OTg2IDE1MC40IDc4LjYpIi8+PGVsbGlwc2UgY3g9IjIiIGN5PSI1MCIgcng9IjEzIiByeT0iNzciLz48ZWxsaXBzZSBjeD0iMTA2IiBjeT0iMSIgcng9IjI1NSIgcnk9IjE1Ii8+PHBhdGggZmlsbD0iIzU3NTc1NyIgZD0iTTE1IDUzaDIyM3Y0SDE1eiIvPjxlbGxpcHNlIGN4PSI4NyIgY3k9IjMzIiByeD0iMjU1IiByeT0iOCIvPjxwYXRoIGZpbGw9IiM1YTVhNWEiIGQ9Ik0xMyA2NWgxNjF2NEgxM3oiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=avif&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=avif&fit=scale&q=75&w=500&h=171 500w, https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=avif&fit=scale&q=75&w=700&h=240 700w, https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=avif&fit=scale&q=75&w=900&h=308 900w, https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=avif&fit=scale&q=75&w=1100&h=377 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=webp&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=webp&fit=scale&q=75&w=500&h=171 500w, https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=webp&fit=scale&q=75&w=700&h=240 700w, https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=webp&fit=scale&q=75&w=900&h=308 900w, https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=webp&fit=scale&q=75&w=1100&h=377 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="343"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=jpg&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=jpg&fit=scale&q=75&w=500&h=171 500w, https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=jpg&fit=scale&q=75&w=700&h=240 700w, https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=jpg&fit=scale&q=75&w=900&h=308 900w, https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png?fm=jpg&fit=scale&q=75&w=1100&h=377 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/5BQvwkHYdOYXdWpiAFwWpF/9d930e624688111a802c3fcbe4efbeea/Screenshot_2026-01-19_at_16.02.49.png"
                alt="Web Interface Guidelines — Interfaces succeed because of hundreds of choices. This is a living, non-exhaustive list of those decisions. Most guidelines are framework-agnostic, some specific to React/Next.js. Feedback is welcome."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I'm really no fan of Vercel, but their public interface guidelines include good stuff. Do you know of more companies putting these out? I'd love to learn about the UI quality standards of other big players.</p>
<p><a class="btn btn__small" href="https://vercel.com/design/guidelines">Ship good stuff</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-wonderful-weird-web-%E2%80%93-draw-on-the-world-map" href="#the-wonderful-weird-web-%E2%80%93-draw-on-the-world-map">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-wonderful-weird-web-%E2%80%93-draw-on-the-world-map">The wonderful weird web – Draw on the world map</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(220,60,52); --color2: rgb(84,172,164); --color3: rgb(164,252,116); --color4: rgb(146,195,143); --color5: rgb(84,108,60);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMjA4Ij48cGF0aCBmaWxsPSIjNTQ2YzNjIiBkPSJNMCAwaDMwMHYyMDhIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMTIiIGN5PSI4MyIgZmlsbD0iIzk0NmY4YiIgcng9IjI1NSIgcnk9IjExNyIvPjxjaXJjbGUgY3g9IjM1IiBjeT0iNjAiIHI9IjI1Ii8+PHBhdGggZmlsbD0iI2ZhZmFmZiIgZD0iTTkgMTE0aDUzdjMySDl6Ii8+PGVsbGlwc2UgY3g9IjE1NiIgY3k9IjU2IiByeD0iNyIgcnk9IjY1Ii8+PGVsbGlwc2UgY3g9IjkwIiBjeT0iMTUyIiBmaWxsPSIjMjcwMDAwIiByeD0iMjIiIHJ5PSIzNCIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMjguNyAyMS4zIDEyNyA1MC45IDExMyA2MmwtMS41LTQ1LjN6bTIxLjUgMzUtOSAuMy0xLjQtMzkgOS0uMnoiLz48Y2lyY2xlIHI9IjEiIHRyYW5zZm9ybT0icm90YXRlKDg4IDI2LjcgODAuMikgc2NhbGUoNTQuODAzNzcgNi40MjY3OSkiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=avif&fit=scale&q=75&w=300&h=208 300w, https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=avif&fit=scale&q=75&w=500&h=348 500w, https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=avif&fit=scale&q=75&w=700&h=487 700w, https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=avif&fit=scale&q=75&w=900&h=626 900w, https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=avif&fit=scale&q=75&w=1100&h=766 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=webp&fit=scale&q=75&w=300&h=208 300w, https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=webp&fit=scale&q=75&w=500&h=348 500w, https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=webp&fit=scale&q=75&w=700&h=487 700w, https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=webp&fit=scale&q=75&w=900&h=626 900w, https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=webp&fit=scale&q=75&w=1100&h=766 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="696"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=jpg&fit=scale&q=75&w=300&h=208 300w, https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=jpg&fit=scale&q=75&w=500&h=348 500w, https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=jpg&fit=scale&q=75&w=700&h=487 700w, https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=jpg&fit=scale&q=75&w=900&h=626 900w, https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png?fm=jpg&fit=scale&q=75&w=1100&h=766 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3Ns8ReybiAJwrcerkBEaag/9d55c23371d98033c4686eb06fb59d1d/Screenshot_2026-01-19_at_16.07.02.png"
                alt="Artboard that includes &quot;random&quot; pixel art."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>There's this site where people can log in to draw pixel art on the maps of this world, and it's a wonderfully weird collection of pixel art. This is how my area looks! 👆</p>
<p><a class="btn btn__small" href="https://wplace.live/">Be fascinated</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-custom-elements-manifest" href="#the-custom-elements-manifest">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-custom-elements-manifest">The custom elements manifest</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(127.5,127.5,127.5); --color2: rgb(124,124,124); --color3: rgb(188.7,188.7,188.7); --color4: rgb(188,188,188); --color5: rgb(68,68,68);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTEzIj48cGF0aCBmaWxsPSIjNDQ0IiBkPSJNMCAwaDMwMHYxMTNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSI4OCIgY3k9IjM0IiBmaWxsPSIjY2ZjZmNmIiByeD0iMTI5IiByeT0iNiIvPjxlbGxpcHNlIGN4PSIxNTciIGN5PSI4MSIgcng9IjI1NSIgcnk9IjE4Ii8+PGVsbGlwc2UgY3g9IjExMSIgY3k9IjU4IiBmaWxsPSIjZGZkZmRmIiByeD0iOTgiIHJ5PSI3Ii8+PGVsbGlwc2UgY3g9IjE0OSIgcng9IjI1MiIgcnk9IjI3Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMDUwNTA1IiB0cmFuc2Zvcm09Im1hdHJpeCgtMjAuMzUxMSAtMTcuMjU4OTkgMzQuMTk5MTIgLTQwLjMyNjIyIDIzMC42IDU5KSIvPjxwYXRoIGQ9Im0tMTYtMTEgMzAgMTIzIDUtODF6Ii8+PGVsbGlwc2UgY3g9IjE0NyIgY3k9IjQ3IiBmaWxsPSIjMDYwNjA2IiByeD0iMTI2IiByeT0iNiIvPjxwYXRoIGZpbGw9IiNlN2U3ZTciIGQ9Ik0xOTEgMjloMjV2MTFoLTI1eiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=avif&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=avif&fit=scale&q=75&w=500&h=190 500w, https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=avif&fit=scale&q=75&w=700&h=266 700w, https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=avif&fit=scale&q=75&w=900&h=342 900w, https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=avif&fit=scale&q=75&w=1100&h=418 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=webp&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=webp&fit=scale&q=75&w=500&h=190 500w, https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=webp&fit=scale&q=75&w=700&h=266 700w, https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=webp&fit=scale&q=75&w=900&h=342 900w, https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=webp&fit=scale&q=75&w=1100&h=418 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="380"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=jpg&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=jpg&fit=scale&q=75&w=500&h=190 500w, https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=jpg&fit=scale&q=75&w=700&h=266 700w, https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=jpg&fit=scale&q=75&w=900&h=342 900w, https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png?fm=jpg&fit=scale&q=75&w=1100&h=418 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4kvcI1fTKnjbiBc4GfmNmq/21e2dacff77076fbdd4edc87761ddda0/Screenshot_2026-01-19_at_18.19.32.png"
                alt="The missing link for web components"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I heard about <a href="https://custom-elements-manifest.open-wc.org/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcustom-elements-manifest.open-wc.org%2F')">the Custom Elements Manifest</a> for the first time <a href="https://daverupert.com/2025/10/custom-elements-manifest-killer-feature/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdaverupert.com%2F2025%2F10%2Fcustom-elements-manifest-killer-feature%2F')">when Dave blogged about it</a>, and it seems like it will improve the tooling around web components drastically.</p>
<p>If I understand this correctly, you can now scan, parse, and document your web components to display them in Storybook or have much-needed editor completions.</p>
<p><a class="btn btn__small" href="https://frontendmasters.com/blog/the-missing-link-for-web-components/">Document your web components</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="what-actually-is-ttfb%3F" href="#what-actually-is-ttfb%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="what-actually-is-ttfb%3F">What actually is TTFB?</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(240.83333333333337,14.166666666666616,14.166666666666616); --color2: rgb(134,108,108); --color3: rgb(252,204,204); --color4: rgb(207,166,167); --color5: rgb(68,52,52);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTAxIj48cGF0aCBmaWxsPSIjNDQzNDM0IiBkPSJNMCAwaDMwMHYxMDFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0NSIgY3k9IjEyIiByPSIxNjUiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxNzEiIGN5PSI1MCIgcj0iMjAxIiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTQwIiBjeT0iMzgiIHI9IjE1NiIgZmlsbD0iI2ZmZmJmYiIvPjxlbGxpcHNlIGN4PSIxMDgiIGN5PSI1OCIgZmlsbD0iIzhkNGU1MSIgcng9IjExOSIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iMTI3IiBjeT0iMjUiIGZpbGw9IiM2YzcwNzAiIHJ4PSIxMTciIHJ5PSIzIi8+PGVsbGlwc2UgY3g9IjEyOCIgY3k9IjQ3IiBmaWxsPSIjODg2MjYzIiByeD0iMTIwIiByeT0iMyIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJyb3RhdGUoODUuNSAxOSAxMTMuNykgc2NhbGUoMjEuMjY1NjggMTU3LjY5MTU4KSIvPjxlbGxpcHNlIGN4PSIxNDUiIGN5PSIxNSIgZmlsbD0iIzVmNjM2MyIgcng9IjEwNSIgcnk9IjIiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=avif&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=avif&fit=scale&q=75&w=500&h=171 500w, https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=avif&fit=scale&q=75&w=700&h=240 700w, https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=avif&fit=scale&q=75&w=900&h=308 900w, https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=avif&fit=scale&q=75&w=1100&h=377 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=webp&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=webp&fit=scale&q=75&w=500&h=171 500w, https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=webp&fit=scale&q=75&w=700&h=240 700w, https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=webp&fit=scale&q=75&w=900&h=308 900w, https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=webp&fit=scale&q=75&w=1100&h=377 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="343"
                srcset="https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=jpg&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=jpg&fit=scale&q=75&w=500&h=171 500w, https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=jpg&fit=scale&q=75&w=700&h=240 700w, https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=jpg&fit=scale&q=75&w=900&h=308 900w, https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png?fm=jpg&fit=scale&q=75&w=1100&h=377 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/jPzLoRkgAZf9x7n1VGCSh/4409fca8f0f753d9619379ed8c2259a9/Screenshot_2026-01-19_at_19.51.13.png"
                alt="Why all the details? Well, to help you understand how useless it is to use 103 Early Hints just to get a better TTFB. Usually, the 103 response will contain useful stuff that helps improve performance. There are parties that just try to manipulate TTFB."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you care about web performance, looking at <strong>Time to First Byte</strong> is often a first step. But what does this metric actually tell you? It turns out things are very complicated when you look at the first bytes. Robin provides massive detail and explains what you need to watch out for! Highly recommended.</p>
<p>And if learning about TTFB isn't enough, the post also includes some spiciness showing how &quot;certain&quot; companies fake a good TTFB metric with useless <code>103 Early Hints</code> headers. Ouch.</p>
<p><a class="btn btn__small" href="https://calendar.perfplanet.com/2025/ttfb-doesnt-mean-what-you-think-it-means/">Understand your metrics</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="more-declarative-html%3A-%60%3Cgeolocation%3E%60" href="#more-declarative-html%3A-%60%3Cgeolocation%3E%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="more-declarative-html%3A-%60%3Cgeolocation%3E%60">More declarative HTML: <code>&lt;geolocation&gt;</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(222,106,114); --color2: rgb(158,88,93); --color3: rgb(211,155,100); --color4: rgb(165,173,183); --color5: rgb(44,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTQ4Ij48cGF0aCBmaWxsPSIjMmMzYzU0IiBkPSJNMCAwaDMwMHYxNDhIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE4MiIgY3k9Ijc4IiByPSIyMDIiIGZpbGw9IiMwNjAyMDkiLz48cGF0aCBmaWxsPSIjNGMzZDNlIiBkPSJtMTEyLjggMzguMS0yLjcgNTMtNjEtMy4yIDIuOC01M3oiLz48cGF0aCBmaWxsPSIjNjk4NzViIiBkPSJNMjA3IDUxLjVoLTkydi01aDkyeiIvPjxwYXRoIGZpbGw9IiM3ODczNTYiIGQ9Ik01MyA3MGgxMDh2NEg1M3oiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwNDBlMjciIHRyYW5zZm9ybT0ibWF0cml4KDIyOS4zNTY0NiA2LjgwNzE0IC0uNTA4MjQgMTcuMTI0NTEgMTc1LjQgMTI1LjQpIi8+PHBhdGggZmlsbD0iIzgxNDc1NiIgZD0iTTQwIDM2aDU1djRINDB6Ii8+PHBhdGggZmlsbD0iIzA2MTEyYSIgZD0iTTI2LjUtMTEuNXYxMjFoLTUxdi0xMjF6Ii8+PHBhdGggZmlsbD0iIzZhNjQ0ZSIgZD0iTTUxIDQ3aDc2djRINTF6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=avif&fit=scale&q=75&w=300&h=148 300w, https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=avif&fit=scale&q=75&w=500&h=248 500w, https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=avif&fit=scale&q=75&w=700&h=347 700w, https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=avif&fit=scale&q=75&w=900&h=446 900w, https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=avif&fit=scale&q=75&w=1100&h=546 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=webp&fit=scale&q=75&w=300&h=148 300w, https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=webp&fit=scale&q=75&w=500&h=248 500w, https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=webp&fit=scale&q=75&w=700&h=347 700w, https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=webp&fit=scale&q=75&w=900&h=446 900w, https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=webp&fit=scale&q=75&w=1100&h=546 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="496"
                srcset="https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=jpg&fit=scale&q=75&w=300&h=148 300w, https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=jpg&fit=scale&q=75&w=500&h=248 500w, https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=jpg&fit=scale&q=75&w=700&h=347 700w, https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=jpg&fit=scale&q=75&w=900&h=446 900w, https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png?fm=jpg&fit=scale&q=75&w=1100&h=546 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/73jWFktujw9bRGVJ8A4f5H/8869313c8a05f2a59697a56e26b38069/Screenshot_2026-01-19_at_18.51.26.png"
                alt="&amp;lt;geolocation   onlocation=&amp;quot;handleLocation(event)&amp;quot;   autolocate   accuracymode=&amp;quot;precise&amp;quot;&amp;gt; &amp;lt;/geolocation&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Chrome 144 (released last week) ships a new HTML element. And what can I say? I'm all for more native elements!</p>
<p><a class="btn btn__small" href="https://developer.chrome.com/blog/geolocation-html-element?hl=en">Ask for permission</a></p>
<p><em>And if you're into declarative HTML, you should definitely check out <a href="https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FAPI%2FInvoker_Commands_API')">Invoker Commands, which recently went into Baseline</a>!</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="for-the-mac-users" href="#for-the-mac-users">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="for-the-mac-users">For the Mac users</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(76,148,194); --color2: rgb(125,117,123); --color3: rgb(124,188,225); --color4: rgb(188,180,186); --color5: rgb(44,28,44);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTA3Ij48cGF0aCBmaWxsPSIjMmMxYzJjIiBkPSJNMCAwaDMwMHYxMDdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSI4NSIgY3k9IjU1IiBmaWxsPSIjZDRkNGQxIiByeD0iNzIiIHJ5PSI2Ii8+PHBhdGggZmlsbD0iI2NmZiIgZD0iTTE4IDE2aDIzdjI0SDE4eiIvPjxlbGxpcHNlIGN4PSIxMDIiIGN5PSI2OCIgZmlsbD0iIzg4ODM4NSIgcng9IjE0MiIgcnk9IjMiLz48cGF0aCBmaWxsPSIjMjUxOTIwIiBkPSJNOTIuNyAxOS40IDgyLjEgNTkuN2wtODMuOC4zIDk0LjEgMi42eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im0zNyAzMi4yLjggNS0xOC45IDIuNi0uNy01eiIvPjxwYXRoIGZpbGw9IiMyMzE3MWMiIGQ9Ik0zOSA4aDE5djQ0SDM5eiIvPjxlbGxpcHNlIGN4PSIzMiIgY3k9IjQ1IiBmaWxsPSIjMmIxZjI2IiByeD0iMzUiIHJ5PSI4Ii8+PHBhdGggZmlsbD0iIzFjMTAxOCIgZD0ibS0xNiA3MCAzMy0xNy0yIDIyeiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=avif&fit=scale&q=75&w=300&h=108 300w, https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=avif&fit=scale&q=75&w=500&h=180 500w, https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=avif&fit=scale&q=75&w=700&h=252 700w, https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=avif&fit=scale&q=75&w=900&h=324 900w, https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=avif&fit=scale&q=75&w=1100&h=396 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=webp&fit=scale&q=75&w=300&h=108 300w, https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=webp&fit=scale&q=75&w=500&h=180 500w, https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=webp&fit=scale&q=75&w=700&h=252 700w, https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=webp&fit=scale&q=75&w=900&h=324 900w, https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=webp&fit=scale&q=75&w=1100&h=396 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="360"
                srcset="https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=jpg&fit=scale&q=75&w=300&h=108 300w, https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=jpg&fit=scale&q=75&w=500&h=180 500w, https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=jpg&fit=scale&q=75&w=700&h=252 700w, https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=jpg&fit=scale&q=75&w=900&h=324 900w, https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png?fm=jpg&fit=scale&q=75&w=1100&h=396 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/47U47uJ477d8GhR8xgrSkK/a7226bb304de1880ddb35f18d110fd56/Screenshot_2026-01-19_at_20.12.26.png"
                alt="macOS Tidbits — Some neat conveniences for macOS users (or just the macOS-curious)"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I thought I was pretty good on the Mac power user scale, but after reading these tidbits, I noticed that I need to level up. This tip, for example:</p>
<blockquote>
<p>Hold <code>⌘</code> to interact with background windows without bringing them into focus.</p>
</blockquote>
<p>I mean, what? How could I not know about this?</p>
<p><a class="btn btn__small" href="https://macos-tidbits.lai.nz/">Be a power user</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="random-mdn-%E2%80%93-%60system-ui%60-and-friends" href="#random-mdn-%E2%80%93-%60system-ui%60-and-friends">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="random-mdn-%E2%80%93-%60system-ui%60-and-friends">Random MDN – <code>system-ui</code> and friends</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(240.83333333333337,14.166666666666616,14.166666666666616); --color2: rgb(136,126,126); --color3: rgb(252,204,204); --color4: rgb(213,172,172); --color5: rgb(60,44,44);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgODUiPjxwYXRoIGZpbGw9IiMzYzJjMmMiIGQ9Ik0wIDBoMzAwdjg1SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxMjciIGN5PSIyMCIgcj0iMTQxIiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTM5IiBjeT0iNDEiIHI9IjE0NSIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjEzNCIgY3k9IjMwIiByPSIxNDciIGZpbGw9IiNmZmYiLz48ZWxsaXBzZSBjeD0iMTAwIiBjeT0iMjkiIGZpbGw9IiM4ZjRlNTAiIHJ4PSIxMjIiIHJ5PSIzIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InJvdGF0ZSgtODEuMyAxNTguOCAtMTAwKSBzY2FsZSgxNzEuMzM2MTIgMjYuNjgxMykiLz48ZWxsaXBzZSBjeD0iMTI3IiBjeT0iNiIgZmlsbD0iI2ZmZiIgcng9IjI1NSIgcnk9IjIwIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InJvdGF0ZSg4OC44IC05LjYgNjMuNikgc2NhbGUoMTguNzAxNTYgMjU0Ljk5OTk3KSIvPjxlbGxpcHNlIGN4PSIxMTYiIGN5PSI1MCIgZmlsbD0iIzg3ODk4OSIgcng9IjEwMCIgcnk9IjMiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=avif&fit=scale&q=75&w=300&h=85 300w, https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=avif&fit=scale&q=75&w=500&h=143 500w, https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=avif&fit=scale&q=75&w=700&h=200 700w, https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=avif&fit=scale&q=75&w=900&h=257 900w, https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=avif&fit=scale&q=75&w=1100&h=315 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=webp&fit=scale&q=75&w=300&h=85 300w, https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=webp&fit=scale&q=75&w=500&h=143 500w, https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=webp&fit=scale&q=75&w=700&h=200 700w, https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=webp&fit=scale&q=75&w=900&h=257 900w, https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=webp&fit=scale&q=75&w=1100&h=315 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="286"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=jpg&fit=scale&q=75&w=300&h=85 300w, https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=jpg&fit=scale&q=75&w=500&h=143 500w, https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=jpg&fit=scale&q=75&w=700&h=200 700w, https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=jpg&fit=scale&q=75&w=900&h=257 900w, https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png?fm=jpg&fit=scale&q=75&w=1100&h=315 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3OodwgMS4DvuPVogIDqIWd/dd9d052beb22cce4a63471fe3858a1d5/Screenshot_2026-01-19_at_19.22.45.png"
                alt="system-ui — Glyphs are taken from the default user interface font on a given platform. Because typographic traditions vary widely across the world, this generic is provided for typefaces that don&apos;t map cleanly into the other generics."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Did you know that you can set the default operating system font via <code>font-family: system-ui</code>? There's also <code>ui-serif</code>, <code>ui-sans-serif</code>, <code>ui-monospace</code>, and <code>ui-rounded</code>; they're Safari-only, but useful if you're after the original Apple look.</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/font-family#system-ui">Match the system</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-recap-%E2%80%93-are-self-closing-html-elements-a-thing%3F" href="#til-recap-%E2%80%93-are-self-closing-html-elements-a-thing%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-recap-%E2%80%93-are-self-closing-html-elements-a-thing%3F">TIL recap – Are self-closing HTML elements a thing?</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(75,183,244); --color2: rgb(169,86,93); --color3: rgb(132,220,252); --color4: rgb(196,196,204); --color5: rgb(82,52,60);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTI1Ij48cGF0aCBmaWxsPSIjNTIzNDNjIiBkPSJNMCAwaDMwMHYxMjVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE3MCIgY3k9IjU1IiByPSIxODEiIGZpbGw9IiMwMDAzMGMiLz48Y2lyY2xlIGN4PSIxNDQiIGN5PSI0OSIgcj0iMTY2IiBmaWxsPSIjMDAxYjI0Ii8+PHBhdGggZmlsbD0iIzI2MzUzNSIgZD0iTTIwIDE3aDU0djUySDIweiIvPjxjaXJjbGUgY3g9IjE4MSIgY3k9Ijg4IiByPSIxMzAiIGZpbGw9IiMwMjE4MjEiLz48cGF0aCBmaWxsPSIjNzg3MjUzIiBkPSJNMzEgNTZoNjB2NEgzMXoiLz48cGF0aCBmaWxsPSIjNWI1ZTRmIiBkPSJtODMuOSAzNi4zLTY0LjggMS44IDI2LjYgMy4yIDQzLjQtMi42eiIvPjxwYXRoIGZpbGw9IiM0MGE0ZGQiIGQ9Ik0yMjkgNWgxNXYzaC0xNXoiLz48ZWxsaXBzZSBjeD0iNDgiIGN5PSIxOSIgZmlsbD0iIzY3Njk1NyIgcng9IjQxIiByeT0iMiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=avif&fit=scale&q=75&w=300&h=126 300w, https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=avif&fit=scale&q=75&w=500&h=210 500w, https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=avif&fit=scale&q=75&w=700&h=294 700w, https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=avif&fit=scale&q=75&w=900&h=378 900w, https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=avif&fit=scale&q=75&w=1100&h=462 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=webp&fit=scale&q=75&w=300&h=126 300w, https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=webp&fit=scale&q=75&w=500&h=210 500w, https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=webp&fit=scale&q=75&w=700&h=294 700w, https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=webp&fit=scale&q=75&w=900&h=378 900w, https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=webp&fit=scale&q=75&w=1100&h=462 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="420"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=jpg&fit=scale&q=75&w=300&h=126 300w, https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=jpg&fit=scale&q=75&w=500&h=210 500w, https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=jpg&fit=scale&q=75&w=700&h=294 700w, https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=jpg&fit=scale&q=75&w=900&h=378 900w, https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png?fm=jpg&fit=scale&q=75&w=1100&h=462 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/7iA5U2Zmk8H6Emnw1AkhpB/fc138af66ac2b007cc1d7b983f0c6663/Screenshot_2026-01-19_at_18.39.44.png"
                alt="&amp;lt;div class=&amp;quot;blue&amp;quot; /&amp;gt;   Blue   &amp;lt;div class=&amp;quot;red&amp;quot; /&amp;gt;     Red     &amp;lt;div class=&amp;quot;green&amp;quot; /&amp;gt;       Green     &amp;lt;/div&amp;gt;   &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Trick question: can you imagine what the HTML above renders? Note the self-closing <code>div</code> elements.</p>
<p>I won't reveal the answer, but there's a high chance that you'll be very surprised.</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/self-closing-tags-are-mostly-meaningless-in-html/">Understand HTML</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-on-the-baseline" href="#new-on-the-baseline">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-on-the-baseline">New on the baseline</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(243,147,28); --color2: rgb(156,92,180); --color3: rgb(252,221,147); --color4: rgb(189,154,207); --color5: rgb(83,60,92);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY3Ij48cGF0aCBmaWxsPSIjNTMzYzVjIiBkPSJNMCAwaDMwMHYxNjdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE3MSIgY3k9IjcwIiByPSIxOTgiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KDQ4LjE1NTIzIC00MC44MTI4NSAxNjQuODcwODggMTk0LjUzMTczIDE3Ni40IDQuOCkiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KDM3LjkzNzg3IC0uMzk3MyAyLjI5OTM0IDIxOS41NjI3NyAyOS44IDc1KSIvPjxlbGxpcHNlIGN4PSIxMzgiIGN5PSI4OCIgZmlsbD0iIzk3MzI2ZiIgcng9IjU4IiByeT0iNDIiLz48ZWxsaXBzZSBjeD0iMjI0IiBjeT0iNzUiIGZpbGw9IiNmZmYiIHJ4PSIzNSIgcnk9IjE0MiIvPjxlbGxpcHNlIGN4PSIzMCIgY3k9IjkwIiBmaWxsPSIjZmZmIiByeD0iMzYiIHJ5PSIxNDIiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KDE1MC41ODA4IDQ4LjY4MjA4IC04LjgyNDg2IDI3LjI5NjYgMTcwIDE3LjIpIi8+PHBhdGggZmlsbD0iI2ZmYmEwMCIgZD0ibTEwOC4xIDUzLjUgMzgtMiAxLjggMzUtMzggMnoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=avif&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=avif&fit=scale&q=75&w=500&h=280 500w, https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=avif&fit=scale&q=75&w=700&h=392 700w, https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=avif&fit=scale&q=75&w=900&h=504 900w, https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=avif&fit=scale&q=75&w=1100&h=616 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=webp&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=webp&fit=scale&q=75&w=500&h=280 500w, https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=webp&fit=scale&q=75&w=700&h=392 700w, https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=webp&fit=scale&q=75&w=900&h=504 900w, https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=webp&fit=scale&q=75&w=1100&h=616 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="560"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=jpg&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=jpg&fit=scale&q=75&w=500&h=280 500w, https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=jpg&fit=scale&q=75&w=700&h=392 700w, https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=jpg&fit=scale&q=75&w=900&h=504 900w, https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png?fm=jpg&fit=scale&q=75&w=1100&h=616 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1AbTVc9T7ve4kmAlRrCiE4/e56169a351bd977a07486597bed8e7a3/Screenshot_2026-01-19_at_19.42.35.png"
                alt="Multiple boxes explaining the concept of anchor positioning. There&apos;s one box in the middle and multiple boxes are anchored around it."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>With Firefox 147 (released last week), CSS anchor positioning moved into cross-browser territory. If you were holding back on learning this incredible new CSS feature because the browser support wasn't there, now's the time to look into it!</p>
<p>And a good start is the CSS-Tricks reference guide.</p>
<p><a class="btn btn__small" href="https://css-tricks.com/css-anchor-positioning-guide/">Anchor</a></p>
<p><em>And if this guide is too long for you today, <a href="https://frontendmasters.com/blog/popover-context-menus-with-anchor-positioning/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffrontendmasters.com%2Fblog%2Fpopover-context-menus-with-anchor-positioning%2F')">here's a very practical example from Chris</a>.</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="three-valuable-projects-to-have-a-look-at" href="#three-valuable-projects-to-have-a-look-at">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="three-valuable-projects-to-have-a-look-at">Three valuable projects to have a look at</h2></div><ul>
<li><a href="https://github.com/brunopulis/awesome-a11y" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fbrunopulis%2Fawesome-a11y')">brunopulis/awesome-a11y</a> – A curated list of accessibility resources.</li>
<li><a href="https://github.com/3ru/eslint-plugin-baseline-js" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2F3ru%2Feslint-plugin-baseline-js')">3ru/eslint-plugin-baseline-js</a> – ESLint plugin to enforce the JavaScript Baseline.</li>
<li><a href="https://github.com/argyleink/css-color-component" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fargyleink%2Fcss-color-component')">argyleink/css-color-component</a> – A modern color picker for the web with support for all spaces.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-tiny-helper" href="#a-new-tiny-helper">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-tiny-helper">A new Tiny Helper</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(235,132,52); --color2: rgb(84,180,132); --color3: rgb(244,180,112); --color4: rgb(202,167,160); --color5: rgb(63,62,68);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTg2Ij48cGF0aCBmaWxsPSIjM2YzZTQ0IiBkPSJNMCAwaDMwMHYxODZIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0OSIgY3k9IjkyIiByPSIxODUiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMzciIGN5PSI2NCIgcj0iMTgxIiBmaWxsPSIjZmZmIi8+PGVsbGlwc2UgY3g9IjEyNCIgY3k9IjkxIiBmaWxsPSIjZmZmIiByeD0iMTY4IiByeT0iMTQ4Ii8+PGNpcmNsZSBjeD0iMjIwIiBjeT0iNzYiIHI9IjE5NCIgZmlsbD0iI2ZmZmNmOCIvPjxwYXRoIGZpbGw9IiNmZjRiMDAiIGQ9Ik0zIDEzNGg0MXY2SDN6Ii8+PGVsbGlwc2UgY3g9IjEwNSIgY3k9IjEzNCIgZmlsbD0iIzk4OTg5ZCIgcng9IjUiIHJ5PSI4NCIvPjxwYXRoIGZpbGw9IiM2MTAwMDAiIGQ9Im0xNjIgODEtNSA3LTEzLTN6Ii8+PHBhdGggZmlsbD0iIzRmMDAwMCIgZD0iTTE0MSAxMjRoMTF2NmgtMTF6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=avif&fit=scale&q=75&w=300&h=186 300w, https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=avif&fit=scale&q=75&w=500&h=311 500w, https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=avif&fit=scale&q=75&w=700&h=436 700w, https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=avif&fit=scale&q=75&w=900&h=560 900w, https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=avif&fit=scale&q=75&w=1100&h=685 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=webp&fit=scale&q=75&w=300&h=186 300w, https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=webp&fit=scale&q=75&w=500&h=311 500w, https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=webp&fit=scale&q=75&w=700&h=436 700w, https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=webp&fit=scale&q=75&w=900&h=560 900w, https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=webp&fit=scale&q=75&w=1100&h=685 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="623"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=jpg&fit=scale&q=75&w=300&h=186 300w, https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=jpg&fit=scale&q=75&w=500&h=311 500w, https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=jpg&fit=scale&q=75&w=700&h=436 700w, https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=jpg&fit=scale&q=75&w=900&h=560 900w, https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png?fm=jpg&fit=scale&q=75&w=1100&h=685 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3hKBO9f1d80w5TKuN2qEGs/b00ac86fa2aecaea58b76d9928552cab/Screenshot_2026-01-19_at_15.16.32.png"
                alt="ReliCSS with a textarea on the left and recommendations to remove old CSS on the right."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Do you remember all those wild CSS hacks we had to deal with a decade ago like <code>*+html <wbr>.ie7-only {}</code> or <code>::-moz-selection</code>? Luckily those times are mostly gone, but they'll probably live on forever in old CSS resets andaAbandoned sites. If you want to double-check whether you're shipping relics from the past, ReliCSS can help discover them.</p>
<p><a class="btn btn__small" href="https://www.alwaystwisted.com/relicss/">Forget the past</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more single-purpose online tools on <a href="https://tiny-helpers.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ftiny-helpers.dev%2F')">tiny-helpers.dev</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="thought-of-the-week" href="#thought-of-the-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="thought-of-the-week">Thought of the week</h2></div><p><a href="https://blog.jim-nielsen.com/2026/feedback-for-those-who-make-software/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fblog.jim-nielsen.com%2F2026%2Ffeedback-for-those-who-make-software%2F')">Here's Jim (one of my favorite bloggers) with something I can very much stand behind</a> in the new world of &quot;no effort&quot; creations and coding.</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <blockquote>
<p>My desire to give you constructive feedback is in direct correlation to your effort to care — about your communications, about what you ship, even about what you don't ship.</p>
</blockquote>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="did-you-learn-something-from-this-issue%3F" href="#did-you-learn-something-from-this-issue%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="did-you-learn-something-from-this-issue%3F">Did you learn something from this issue?</h2></div><p>❤️ If so, <strong>join 34 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="this-is-all%2C-friends!" href="#this-is-all%2C-friends!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="this-is-all%2C-friends!">This is all, friends!</h2></div><p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr aria-hidden="true"><p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Web Weekly #181">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Web Weekly #180 (#blogPost)</title>
      <link href="https://www.stefanjudis.com/blog/web-weekly-180/"/>
      <published>2026-01-12T23:00:00+00:00</published>
      <updated>2026-01-12T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/blog/web-weekly-180/</id>
      <category term="blogPost"></category>
        <category term="Newsletter"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="guten-tag!-guten-tag!-%F0%9F%91%8B" href="#guten-tag!-guten-tag!-%F0%9F%91%8B">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="guten-tag!-guten-tag!-%F0%9F%91%8B">Guten Tag! Guten Tag! 👋</h2></div><p>Do you use iterator helpers in JavaScript? Have you heard of scroll-triggered CSS animations? Are you excited about <code>Temporal</code>?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <p><a href="https://pawelgrzybek.com/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fpawelgrzybek.com%2F')">Paweł</a> listens to &quot;<a href="https://www.youtube.com/watch?v=EYE5QEBOMA8" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DEYE5QEBOMA8')">Mtume - Juicy Fruit</a>&quot; and says:</p>
<blockquote>
<p>Everyone has heard &quot;Juicy&quot; by The Notorious B.I.G. before, but I only recently discovered that this is the original sample. It's not just a sample; the whole melody line is the same. Shocking how similar these two songs are.</p>
</blockquote>
</div><p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>five more songs</strong> left in the queue.</p>
<hr aria-hidden="true"><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(20,227,150); --color2: rgb(152,160,84); --color3: rgb(243,237,140); --color4: rgb(158,207,198); --color5: rgb(44,82,65);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTYyIj48cGF0aCBmaWxsPSIjMmM1MjQxIiBkPSJNMCAwaDMwMHYxNjJIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2U1ZmZjMiIgdHJhbnNmb3JtPSJtYXRyaXgoLTU3LjU3MDg3IDcuMzc1IC0zLjE0NzE2IC0yNC41Njc0MiAxMjUuNCA2OC42KSIvPjxjaXJjbGUgY3k9IjM2IiByPSI5OSIgZmlsbD0iIzI0MGUxMyIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzIwMDMwYiIgdHJhbnNmb3JtPSJtYXRyaXgoLTEzLjA0NTg3IDI0NS43OTE1NSAtNDkuNjQ5MTMgLTIuNjM1MjMgMjM2IDcxLjUpIi8+PHBhdGggZmlsbD0iI2RmZmY4ZiIgZD0ibTcxLjIgNjAuMiA1Mi43IDM5LjctOSAxMkw2MiA3MnoiLz48cGF0aCBmaWxsPSIjY2JkZmFlIiBkPSJtMTYzIDc3LTg1IDQgODAtNjB6Ii8+PHBhdGggZmlsbD0iIzEwMjUyOCIgZD0iTTkyIDBoNDN2NTdIOTJ6Ii8+PHBhdGggZmlsbD0iIzFhMWQyNCIgZD0iTTExOCA4MGg3MHY1OWgtNzB6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMjAwZDEyIiB0cmFuc2Zvcm09InJvdGF0ZSgxMzguMiA1LjQgNzMuNykgc2NhbGUoNDUuNzY2NTkgMjAuNjkyNzkpIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=avif&fit=scale&q=75&w=300&h=163 300w, https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=avif&fit=scale&q=75&w=500&h=273 500w, https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=avif&fit=scale&q=75&w=700&h=382 700w, https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=avif&fit=scale&q=75&w=900&h=491 900w, https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=avif&fit=scale&q=75&w=1100&h=601 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=webp&fit=scale&q=75&w=300&h=163 300w, https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=webp&fit=scale&q=75&w=500&h=273 500w, https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=webp&fit=scale&q=75&w=700&h=382 700w, https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=webp&fit=scale&q=75&w=900&h=491 900w, https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=webp&fit=scale&q=75&w=1100&h=601 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="546"
                srcset="https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=jpg&fit=scale&q=75&w=300&h=163 300w, https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=jpg&fit=scale&q=75&w=500&h=273 500w, https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=jpg&fit=scale&q=75&w=700&h=382 700w, https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=jpg&fit=scale&q=75&w=900&h=491 900w, https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png?fm=jpg&fit=scale&q=75&w=1100&h=601 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/47ZAqIQoimmP6dYrKRsOyc/6e511b47509c2bf69d6f96cf0aeb9401/Screenshot_2026-01-13_at_12.58.19.png"
                alt="The State of HTML 2025"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p><a href="https://2025.stateofhtml.com/en-US/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2F2025.stateofhtml.com%2Fen-US%2F')">The State of HTML survey results</a> are in! And let me tell you, if you read them you'll definitely discover some new web technology things.</p>
<p>For me this year, the web dev features that the fewest people know about was the most interesting. Let's have a look.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(213,18,71); --color2: rgb(92,167,126); --color3: rgb(227,140,165); --color4: rgb(191,200,200); --color5: rgb(84,84,92);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgODAiPjxwYXRoIGZpbGw9IiM1NDU0NWMiIGQ9Ik0wIDBoMzAwdjgwSDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxMjUiIGN5PSIxNSIgcj0iMTQ4IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTMzIiBjeT0iMjciIHI9IjE1MCIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjEyMSIgY3k9IjIiIHI9IjE3MyIgZmlsbD0iI2Y1ZjdmOSIvPjxlbGxpcHNlIGN4PSIxMjEiIGN5PSI1MCIgZmlsbD0iI2E0YTc5ZSIgcng9IjEwNyIgcnk9IjMiLz48cGF0aCBmaWxsPSIjOWM5ZmE0IiBkPSJNMzIgMjZoMjA2djRIMzJ6Ii8+PHBhdGggZmlsbD0iI2EwYTRhOCIgZD0iTTM1IDE1aDE4OXY0SDM1eiIvPjxwYXRoIGZpbGw9IiM5YzlmYTMiIGQ9Ik0zMyAzN2g5M3Y0SDMzeiIvPjxlbGxpcHNlIGN4PSIyMjIiIGN5PSI2NCIgZmlsbD0iI2Y1ZjZmOCIgcng9IjI1NSIgcnk9IjEzIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=avif&fit=scale&q=75&w=300&h=81 300w, https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=avif&fit=scale&q=75&w=500&h=135 500w, https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=avif&fit=scale&q=75&w=700&h=189 700w, https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=avif&fit=scale&q=75&w=900&h=243 900w, https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=avif&fit=scale&q=75&w=1100&h=297 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=webp&fit=scale&q=75&w=300&h=81 300w, https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=webp&fit=scale&q=75&w=500&h=135 500w, https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=webp&fit=scale&q=75&w=700&h=189 700w, https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=webp&fit=scale&q=75&w=900&h=243 900w, https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=webp&fit=scale&q=75&w=1100&h=297 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="270"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=jpg&fit=scale&q=75&w=300&h=81 300w, https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=jpg&fit=scale&q=75&w=500&h=135 500w, https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=jpg&fit=scale&q=75&w=700&h=189 700w, https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=jpg&fit=scale&q=75&w=900&h=243 900w, https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png?fm=jpg&fit=scale&q=75&w=1100&h=297 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6nYG9uep34ya3FoAVs39N8/3249458736ff08500928678a2e37a43a/Screenshot_2026-01-13_at_13.09.39.png"
                alt="&amp;lt;link rel=&amp;quot;expect&amp;quot; href=&amp;quot;#lead-content&amp;quot; blocking=&amp;quot;render&amp;quot; /&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Only 10% have heard of <code>rel=&quot;expect&quot;</code>. In combination with <code>blocking=&quot;render&quot;</code> <a href="https://developer.mozilla.org/en-US/docs/Web/API/View_Transition_API/Using#stabilizing_page_state_to_make_cross-document_transitions_consistent" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FAPI%2FView_Transition_API%2FUsing%23stabilizing_page_state_to_make_cross-document_transitions_consistent')">the new attributes enable smooth cross-document view transitions</a>. Cross-document view transitions are still a Chromium-only thing, but once they ship in more browsers, it'll be time to check out these new attributes.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(228,174,34); --color2: rgb(73,122,162); --color3: rgb(100,187,216); --color4: rgb(201,216,186); --color5: rgb(90,73,47);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTM0Ij48cGF0aCBmaWxsPSIjNWE0OTJmIiBkPSJNMCAwaDMwMHYxMzRIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0OCIgY3k9IjU5IiByPSIxNjEiIGZpbGw9IiMwMDAwMWIiLz48Y2lyY2xlIGN4PSIxNDgiIGN5PSI3MCIgcj0iMTY4IiBmaWxsPSIjMDAxNTI1Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMmI0NzUyIiB0cmFuc2Zvcm09InJvdGF0ZSgxMTMuOCAtNiA0Nikgc2NhbGUoMTMuMjI5MjQgMzIuNzk3MTgpIi8+PGVsbGlwc2UgY3g9IjYwIiBjeT0iMjIiIGZpbGw9IiM4MTdiODEiIHJ4PSI2NiIgcnk9IjIiLz48cGF0aCBmaWxsPSIjNTc3NDUxIiBkPSJNNjIgNzRoMTM1djRINjJ6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMDAxNzFmIiB0cmFuc2Zvcm09Im1hdHJpeCg4MC4xMjE2IDI0LjY0ODYyIC0zMi42NDkwMiAxMDYuMTI3MyAyMDMgNTguNSkiLz48cGF0aCBmaWxsPSIjNTY4NzcxIiBkPSJNMzEgMzBoODF2M0gzMXoiLz48cGF0aCBmaWxsPSIjNTU3Yjk3IiBkPSJNMTggNzRoNjJ2M0gxOHoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=avif&fit=scale&q=75&w=300&h=135 300w, https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=avif&fit=scale&q=75&w=500&h=225 500w, https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=avif&fit=scale&q=75&w=700&h=315 700w, https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=avif&fit=scale&q=75&w=900&h=405 900w, https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=avif&fit=scale&q=75&w=1100&h=495 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=webp&fit=scale&q=75&w=300&h=135 300w, https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=webp&fit=scale&q=75&w=500&h=225 500w, https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=webp&fit=scale&q=75&w=700&h=315 700w, https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=webp&fit=scale&q=75&w=900&h=405 900w, https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=webp&fit=scale&q=75&w=1100&h=495 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="450"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=jpg&fit=scale&q=75&w=300&h=135 300w, https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=jpg&fit=scale&q=75&w=500&h=225 500w, https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=jpg&fit=scale&q=75&w=700&h=315 700w, https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=jpg&fit=scale&q=75&w=900&h=405 900w, https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png?fm=jpg&fit=scale&q=75&w=1100&h=495 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3xFdyi1y0ixFYm6mcN5rkW/84c092fa672a343f601d2d6b887e0241/Screenshot_2026-01-13_at_13.03.28.png"
                alt="const segmenter = new Intl.Segmenter(   &apos;en&apos;, { granularity: &apos;sentence&apos; } );  console.log(   Array.from(     segmenter.segment(`I&apos;m like 🫣. But you are, too! 🫵`),     s =&gt; s.segment   ) );"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>17% have heard of the <code>Intl<wbr>.Segmenter</code> API. If you're wrangling text, you should definitely check this one out! It works across browsers, too, and <a href="https://www.stefanjudis.com/today-i-learned/how-to-split-javascript-strings-with-intl-segmenter/">I wrote about it in November 2022</a> already.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(212,5,61); --color2: rgb(99,172,132); --color3: rgb(226,141,159); --color4: rgb(164,204,182); --color5: rgb(62,62,63);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgODciPjxwYXRoIGZpbGw9IiMzZTNlM2YiIGQ9Ik0wIDBoMzAwdjg3SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxMzMiIGN5PSIzOCIgcj0iMTQ3IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTE3IiBjeT0iMzAiIHI9IjE3MyIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjE3NCIgcj0iMjAwIiBmaWxsPSIjZmVmZmZmIi8+PHBhdGggZmlsbD0iIzgzODE3NiIgZD0iTTE0IDQ2aDIyMnYzSDE0eiIvPjxlbGxpcHNlIGN4PSI5NSIgY3k9IjE3IiBmaWxsPSIjN2E4ZDg0IiByeD0iODMiIHJ5PSIyIi8+PHBhdGggZmlsbD0iIzkzYTM5ZiIgZD0iTTEyIDM1aDgydjVIMTJ6Ii8+PHBhdGggZmlsbD0iIzhlYTI5YyIgZD0iTTcgNTVoNzR2NEg3eiIvPjxlbGxpcHNlIGN4PSIxMzIiIGN5PSI0NyIgZmlsbD0iI2Q2OTI5NCIgcng9IjQzIiByeT0iNCIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=avif&fit=scale&q=75&w=300&h=87 300w, https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=avif&fit=scale&q=75&w=500&h=146 500w, https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=avif&fit=scale&q=75&w=700&h=205 700w, https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=avif&fit=scale&q=75&w=900&h=263 900w, https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=avif&fit=scale&q=75&w=1100&h=322 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=webp&fit=scale&q=75&w=300&h=87 300w, https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=webp&fit=scale&q=75&w=500&h=146 500w, https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=webp&fit=scale&q=75&w=700&h=205 700w, https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=webp&fit=scale&q=75&w=900&h=263 900w, https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=webp&fit=scale&q=75&w=1100&h=322 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="293"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=jpg&fit=scale&q=75&w=300&h=87 300w, https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=jpg&fit=scale&q=75&w=500&h=146 500w, https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=jpg&fit=scale&q=75&w=700&h=205 700w, https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=jpg&fit=scale&q=75&w=900&h=263 900w, https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png?fm=jpg&fit=scale&q=75&w=1100&h=322 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/7zNlmXPSKfxqWdcdVxG15l/5bac20c885f4e9a568e37be08c2a10d9/Screenshot_2026-01-13_at_13.05.48.png"
                alt="HTML including hidden=&quot;until-found&quot;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>And lastly, only 20% have heard of <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/hidden#the_hidden_until_found_state" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FHTML%2FReference%2FGlobal_attributes%2Fhidden%23the_hidden_until_found_state')"><code>hidden=&quot;until-found&quot;</code></a>. Chromium has shipped the property to make content discoverable via search for ages, and Firefox and Safari are slowly getting there.</p>
<p>Either way, have a look at the survey results. I'm sure you'll discover some new things to learn!</p>
<hr aria-hidden="true"><p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mccrb2jv5c2t">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/115888262686636897" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ffront-end.social%2F%40stefan%2F115888262686636897')">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_this-weeks-web-weekly-is-about-to-hit-all-activity-7416849065138724865-p31u" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.linkedin.com%2Fposts%2Fstefan-judis_this-weeks-web-weekly-is-about-to-hit-all-activity-7416849065138724865-p31u')">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr aria-hidden="true"><div class="highlightBox sponsored margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-sponsored"/>
            </svg>
          </div>
        

      <div class="highlightBox__pill">Sponsored</div>
      <div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="measure-core-web-vitals-in-safari-and-firefox" href="#measure-core-web-vitals-in-safari-and-firefox">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="measure-core-web-vitals-in-safari-and-firefox">Measure Core Web Vitals in Safari and Firefox</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(12,100,239); --color2: rgb(91,129,146); --color3: rgb(251,229,68); --color4: rgb(193,206,218); --color5: rgb(101,70,46);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMjA3Ij48cGF0aCBmaWxsPSIjNjU0NjJlIiBkPSJNMCAwaDMwMHYyMDdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMjMiIGN5PSIxMTciIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSI4MCIvPjxlbGxpcHNlIGN4PSIxMjQiIGN5PSIxMjQiIGZpbGw9IiNmZmYiIHJ4PSIyNTUiIHJ5PSI4MyIvPjxlbGxpcHNlIGN4PSI3MyIgY3k9IjEwMiIgZmlsbD0iI2VkM2MwMCIgcng9IjM1IiByeT0iMjkiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwMDU3OWUiIHRyYW5zZm9ybT0ibWF0cml4KC0yMzYuMDU1NTggNi4wMzMxMyAtLjgwNzI4IC0zMS41ODYyNCAxNTEuNSAxMS40KSIvPjxjaXJjbGUgY3g9IjE3NyIgY3k9Ijk3IiByPSIyNyIgZmlsbD0iIzAwNjNmZiIvPjxlbGxpcHNlIGN4PSIyMDciIGN5PSI2NCIgZmlsbD0iI2ZmZiIgcng9IjI1NSIgcnk9IjIzIi8+PHBhdGggZmlsbD0icmVkIiBkPSJNMTA0IDE0Nmg0OXYyMGgtNDl6Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09InJvdGF0ZSg4NC40IC01MS40IDEzNy44KSBzY2FsZSg0Ni43NzY3NyAyNDcuMjAyNzgpIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="//images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png">
            <picture>
              <source type="image/avif"
                srcset="//images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=avif&fit=scale&q=75&w=300&h=207 300w, //images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=avif&fit=scale&q=75&w=500&h=346 500w, //images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=avif&fit=scale&q=75&w=700&h=485 700w, //images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=avif&fit=scale&q=75&w=900&h=623 900w, //images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=avif&fit=scale&q=75&w=1100&h=762 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="//images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=webp&fit=scale&q=75&w=300&h=207 300w, //images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=webp&fit=scale&q=75&w=500&h=346 500w, //images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=webp&fit=scale&q=75&w=700&h=485 700w, //images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=webp&fit=scale&q=75&w=900&h=623 900w, //images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=webp&fit=scale&q=75&w=1100&h=762 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="693"
                srcset="//images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=jpg&fit=scale&q=75&w=300&h=207 300w, //images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=jpg&fit=scale&q=75&w=500&h=346 500w, //images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=jpg&fit=scale&q=75&w=700&h=485 700w, //images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=jpg&fit=scale&q=75&w=900&h=623 900w, //images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png?fm=jpg&fit=scale&q=75&w=1100&h=762 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="//images.ctfassets.net/f20lfrunubsq/2K84wQow329WuIzPlGtc4Q/22fba631933ebe1c10d9567664fb2c7e/Group_2793.png"
                alt="Cross-Browser Core Web Vitals"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>For a long time, Google's Core Web Vitals metrics could only be measured in Chrome. But now the Largest Contentful Paint and Interaction to Next Paint metrics can both be measured in Firefox and Safari!</p>
<p><a class="btn btn__small" href="https://www.debugbear.com/blog/firefox-safari-web-vitals?utm_campaign=web-weekly">Learn more</a></p>
<p><small>Web Weekly is open for sponsorships. If you want to reach 6k developers, <a href="https://webweekly.email/sponsor">you know what to do</a>!</small></p>
</div><hr aria-hidden="true"><p>A huge thank you and huge bag of karma points go to <strong>Nicolas</strong> this week. Thank you for supporting indie publishing by covering a small fraction of the cost it takes to send Web Weekly every week! ❤️</p>
<p>If you enjoy Web Weekly, too, join 33 supporters on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>. It really makes a difference!</p>
<hr aria-hidden="true"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="something-that-made-me-smile-this-week" href="#something-that-made-me-smile-this-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="something-that-made-me-smile-this-week">Something that made me smile this week</h2></div><p><img src="https://images.ctfassets.net/f20lfrunubsq/6YrdZghgW2t57wZSXWzpLg/7c5eab3d57eae80c07d16fb903aea27a/next-levle.jpg" alt="Visualization showing the underline goes over the text bounding box." loading="lazy" /></p>
<p>Have you ever noticed that if you use <code>text-decoration: underline</code>, the underline isn't aligned with the actual text? Daniel said this about &quot;the problem&quot;:</p>
<blockquote>
<p>I say it's a problem &quot;we've&quot; had rather sheepishly because maybe you, like some users, don't actually care. But if you're a funny bunny like me (I think &quot;designer&quot; is the technical term) then it most likely drives you crazy.</p>
</blockquote>
<p>This made me smile because it seems like I'm &quot;some users.&quot;</p>
<p><a class="btn btn__small" href="https://css-tricks.com/text-decoration-inset-is-like-padding-for-text-decorations/">Align the line</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="no-code" href="#no-code">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="no-code">No code</h2></div><ul>
<li><a href="https://www.stefanjudis.com/notes/the-trust-equation/">The Trust Equation</a> with some fancy <code>MathML</code>.</li>
<li><a href="https://www.anildash.com/2026/01/05/a-tech-career-in-2026/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.anildash.com%2F2026%2F01%2F05%2Fa-tech-career-in-2026%2F')">How the hell are you supposed to have a career in tech in 2026?</a> with the banger line &quot;<em>Don't let your job get in the way of your career.</em>&quot;</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="browsers'-third-party-internals" href="#browsers'-third-party-internals">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="browsers'-third-party-internals">Browsers' third-party internals</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(47.8125,79.6875,207.1875); --color2: rgb(108,116,140); --color3: rgb(236,244,252); --color4: rgb(180,188,196); --color5: rgb(52,60,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTIzIj48cGF0aCBmaWxsPSIjMzQzYzU0IiBkPSJNMCAwaDMwMHYxMjNIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjExOCIgY3k9IjQyIiByPSIxNTQiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0icm90YXRlKDgyLjkgMjEuMSA5Ny43KSBzY2FsZSgxMDMuOTM5MzYgMTY1Ljc4NjEzKSIvPjxjaXJjbGUgY3g9IjIxNiIgY3k9IjEwNCIgcj0iMjU1IiBmaWxsPSIjZjVmYWZmIi8+PGVsbGlwc2UgY3g9IjEyNSIgY3k9IjQ1IiBmaWxsPSIjNTQ1YjcwIiByeD0iOTIiIHJ5PSIxOSIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDQxaDI1NnY4SDB6Ii8+PHBhdGggZmlsbD0iIzBiMTQyZiIgZD0iTTE4MiA1MGgzOXYxM2gtMzl6Ii8+PHBhdGggZmlsbD0iIzIxMjk0MiIgZD0iTTM0IDUzaDc5djlIMzR6Ii8+PGVsbGlwc2UgY3g9IjEzNSIgY3k9Ijg3IiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iMjYiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=avif&fit=scale&q=75&w=300&h=123 300w, https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=avif&fit=scale&q=75&w=500&h=206 500w, https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=avif&fit=scale&q=75&w=700&h=289 700w, https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=avif&fit=scale&q=75&w=900&h=371 900w, https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=avif&fit=scale&q=75&w=1100&h=454 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=webp&fit=scale&q=75&w=300&h=123 300w, https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=webp&fit=scale&q=75&w=500&h=206 500w, https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=webp&fit=scale&q=75&w=700&h=289 700w, https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=webp&fit=scale&q=75&w=900&h=371 900w, https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=webp&fit=scale&q=75&w=1100&h=454 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="413"
                srcset="https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=jpg&fit=scale&q=75&w=300&h=123 300w, https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=jpg&fit=scale&q=75&w=500&h=206 500w, https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=jpg&fit=scale&q=75&w=700&h=289 700w, https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=jpg&fit=scale&q=75&w=900&h=371 900w, https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png?fm=jpg&fit=scale&q=75&w=1100&h=454 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/147dX7ochDrWeu65C54CLJ/d309dde5d20b05c3f904b1af29334fb9/Screenshot_2026-01-13_at_10.59.01.png"
                alt="Not all browser APIs are &quot;web&quot; APIs"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I'm gonna be honest here; I've never thought about how some browser APIs work internally. How does <code>navigator<wbr>.geolocation</code> figure out the current location? Or how do all these fancy new LLMs in Chrome work? Kilian shares that certain APIs have third-party dependencies.</p>
<p>Makes total sense, and yet I'm surprised because I didn't even think about this fact.</p>
<p><a class="btn btn__small" href="https://polypane.app/blog/not-all-browser-apis-are-web-apis/">Evaluate browser APIs</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="performance-devtools-tricks" href="#performance-devtools-tricks">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="performance-devtools-tricks">Performance DevTools tricks</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(6,138,239); --color2: rgb(148,92,172); --color3: rgb(107,177,243); --color4: rgb(187,188,188); --color5: rgb(34,44,62);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTc2Ij48cGF0aCBmaWxsPSIjMjIyYzNlIiBkPSJNMCAwaDMwMHYxNzZIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMTUiIGN5PSIyMCIgZmlsbD0iIzgwOGQ5MSIgcng9IjEwOSIgcnk9IjEwIi8+PGVsbGlwc2UgY3g9IjE0MCIgY3k9IjExNyIgZmlsbD0iIzI4MjYxZCIgcng9IjI1NSIgcnk9IjkyIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMDAwZTI3IiB0cmFuc2Zvcm09InJvdGF0ZSgtODkuNyA1NC44IC01MSkgc2NhbGUoOS44ODAwOCAxNjQuMzIyNzQpIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMDAwYTI0IiB0cmFuc2Zvcm09Im1hdHJpeCgyMjMuMDM3OCAtLjI2NTYxIC4wMjQ1MyAyMC41OTY4IDcwLjIgMTQ5LjEpIi8+PHBhdGggZmlsbD0iIzM4MzkzNCIgZD0ibTIzNiAxMjYtMTE0LTkgOTgtMTA3eiIvPjxlbGxpcHNlIGN4PSI1OCIgY3k9IjE0IiBmaWxsPSIjYjNkNWZmIiByeD0iMTQ4IiByeT0iMSIvPjxlbGxpcHNlIGN4PSIxNDUiIGN5PSIyOSIgZmlsbD0iIzAwNzlkMCIgcng9IjEzNCIgcnk9IjEiLz48ZWxsaXBzZSBjeD0iNCIgY3k9IjkwIiBmaWxsPSIjMDAwYzI5IiByeD0iMTEiIHJ5PSIxMzUiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=avif&fit=scale&q=75&w=300&h=177 300w, https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=avif&fit=scale&q=75&w=500&h=295 500w, https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=avif&fit=scale&q=75&w=700&h=413 700w, https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=avif&fit=scale&q=75&w=900&h=531 900w, https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=avif&fit=scale&q=75&w=1100&h=649 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=webp&fit=scale&q=75&w=300&h=177 300w, https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=webp&fit=scale&q=75&w=500&h=295 500w, https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=webp&fit=scale&q=75&w=700&h=413 700w, https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=webp&fit=scale&q=75&w=900&h=531 900w, https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=webp&fit=scale&q=75&w=1100&h=649 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="590"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=jpg&fit=scale&q=75&w=300&h=177 300w, https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=jpg&fit=scale&q=75&w=500&h=295 500w, https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=jpg&fit=scale&q=75&w=700&h=413 700w, https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=jpg&fit=scale&q=75&w=900&h=531 900w, https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png?fm=jpg&fit=scale&q=75&w=1100&h=649 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3tSb3cgStTh8WyCZy0KrO9/c1b9ca0e39401371f91ae4fce8afb60c/network-panel.png"
                alt="Chrome DevTools network panel with highlighted &quot;larger-than:20k&quot; filter"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p><a href="https://webweekly.email/archive/web-weekly-179/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwebweekly.email%2Farchive%2Fweb-weekly-179%2F')">I warned you last week</a>; last year's <a href="https://calendar.perfplanet.com/2025/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcalendar.perfplanet.com%2F2025%2F')">Web Performance calendar</a> was so high-quality that multiple articles will make it into Web Weekly.</p>
<p>If you're debugging web performance, you shouldn't miss out; check these articles for some Chrome performance debugging tricks:</p>
<ul>
<li><a href="https://calendar.perfplanet.com/2025/tips-for-making-the-performance-panel-less-overwhelming/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcalendar.perfplanet.com%2F2025%2Ftips-for-making-the-performance-panel-less-overwhelming%2F')">Tips for making the Performance Panel less overwhelming</a></li>
<li><a href="https://calendar.perfplanet.com/2025/chrome-devtools-for-debugging-web-performance/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcalendar.perfplanet.com%2F2025%2Fchrome-devtools-for-debugging-web-performance%2F')">Chrome DevTools for Debugging Web Performance</a></li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-%22unhealthy%22-web-ecosystem" href="#the-%22unhealthy%22-web-ecosystem">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-%22unhealthy%22-web-ecosystem">The &quot;unhealthy&quot; web ecosystem</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(200.35714285714295,200.35714285714297,54.64285714285703); --color2: rgb(124,124,116); --color3: rgb(252,252,244); --color4: rgb(188,188,180); --color5: rgb(68,60,60);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgODkiPjxwYXRoIGZpbGw9IiM0NDNjM2MiIGQ9Ik0wIDBoMzAwdjg5SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxMjEiIGN5PSIzNSIgcj0iMTQzIiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTM2IiBjeT0iMzMiIHI9IjE0NSIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjE4MSIgY3k9IjU0IiByPSIxOTUiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiM3NTc0NzEiIHRyYW5zZm9ybT0ibWF0cml4KC02My43MTcwMyAuMzkyMDYgLS4wMTc0MiAtMi44MzE0MiAxMjcuMyA1MCkiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KDIyMS41NzAxNCAxLjQ4NjUgLS4xMzcxMSAyMC40MzcxIDE5MS44IDcxKSIvPjxlbGxpcHNlIGN4PSIxMjYiIGN5PSIyNSIgZmlsbD0iIzgyODE3ZSIgcng9IjExNiIgcnk9IjMiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiM4ODg3ODMiIHRyYW5zZm9ybT0ibWF0cml4KC4wMTc3NSAtMS45ODA5NCAxMTcuODkzODcgMS4wNTYxIDk5IDM3LjQpIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09Im1hdHJpeCgtMTY4LjE0OTk0IDEuMTczOTMgLS4wOTQzMSAtMTMuNTA5MzYgMTM1IDkpIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=avif&fit=scale&q=75&w=300&h=90 300w, https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=avif&fit=scale&q=75&w=500&h=150 500w, https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=avif&fit=scale&q=75&w=700&h=210 700w, https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=avif&fit=scale&q=75&w=900&h=270 900w, https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=avif&fit=scale&q=75&w=1100&h=330 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=webp&fit=scale&q=75&w=300&h=90 300w, https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=webp&fit=scale&q=75&w=500&h=150 500w, https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=webp&fit=scale&q=75&w=700&h=210 700w, https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=webp&fit=scale&q=75&w=900&h=270 900w, https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=webp&fit=scale&q=75&w=1100&h=330 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="300"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=jpg&fit=scale&q=75&w=300&h=90 300w, https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=jpg&fit=scale&q=75&w=500&h=150 500w, https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=jpg&fit=scale&q=75&w=700&h=210 700w, https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=jpg&fit=scale&q=75&w=900&h=270 900w, https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png?fm=jpg&fit=scale&q=75&w=1100&h=330 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1Wkb0YknGAwRIO895TZ38P/08ffd4058cb2faedaf7c2e7fd5322838/Screenshot_2026-01-13_at_11.06.49.png"
                alt="Given the current state of the ecosystem, not using bundlers in any nontrivial application does seem like an exercise in masochism. [...] This is not a healthy ecosystem."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Lea reflects on the current state of web dependencies, and frankly, it's not great. Could we improve the current state to work without heavy bundler dependencies? I hope so!</p>
<p><a class="btn btn__small" href="https://lea.verou.me/blog/2026/web-deps/">Fix the web</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="how-to-avoid-creating-new-arrays-for-everything" href="#how-to-avoid-creating-new-arrays-for-everything">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="how-to-avoid-creating-new-arrays-for-everything">How to avoid creating new arrays for everything</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(165,42,102); --color2: rgb(90,111,176); --color3: rgb(214,160,186); --color4: rgb(231,204,218); --color5: rgb(69,113,63);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTE2Ij48cGF0aCBmaWxsPSIjNDU3MTNmIiBkPSJNMCAwaDMwMHYxMTZIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0MCIgY3k9IjMyIiByPSIxOTIiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxNDQiIGN5PSI1NyIgcj0iMTU4IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTMwIiBjeT0iNjciIHI9IjE1MSIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjEyMSIgY3k9IjQwIiByPSIxNTMiIGZpbGw9IiNmZmZlZmYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNkNWQ4ZGIiIHRyYW5zZm9ybT0ibWF0cml4KC0xMi42MTQ1NSAtMjguMDc1NTUgMzUuNTM3MjQgLTE1Ljk2NzE0IDY4LjYgNDUpIi8+PHBhdGggZmlsbD0iIzgwOGI4NiIgZD0iTTQ1IDU3aDUydjRINDV6Ii8+PGVsbGlwc2UgY3g9IjYxIiBjeT0iMjAiIGZpbGw9IiNiODllYWYiIHJ4PSI0NyIgcnk9IjMiLz48cGF0aCBmaWxsPSIjZmNmY2ZmIiBkPSJNMjcxIDIgOC0xNmwxOTcgMTMweiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=avif&fit=scale&q=75&w=300&h=117 300w, https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=avif&fit=scale&q=75&w=500&h=195 500w, https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=avif&fit=scale&q=75&w=700&h=273 700w, https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=avif&fit=scale&q=75&w=900&h=351 900w, https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=avif&fit=scale&q=75&w=1100&h=429 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=webp&fit=scale&q=75&w=300&h=117 300w, https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=webp&fit=scale&q=75&w=500&h=195 500w, https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=webp&fit=scale&q=75&w=700&h=273 700w, https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=webp&fit=scale&q=75&w=900&h=351 900w, https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=webp&fit=scale&q=75&w=1100&h=429 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="390"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=jpg&fit=scale&q=75&w=300&h=117 300w, https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=jpg&fit=scale&q=75&w=500&h=195 500w, https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=jpg&fit=scale&q=75&w=700&h=273 700w, https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=jpg&fit=scale&q=75&w=900&h=351 900w, https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png?fm=jpg&fit=scale&q=75&w=1100&h=429 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/7JZ9MSiEbtjbvaHSew1s4a/a0290e489df578958502353fe01240c2/Screenshot_2026-01-13_at_11.46.49.png"
                alt="const ids = users.values().map(u =&gt; u.id) .filter(Boolean).toArray();"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I must admit I'm still confused about when to use iterator helpers. Matt gives some good pointers on when and why to use them.</p>
<p><a class="btn btn__small" href="https://allthingssmitty.com/2026/01/12/stop-turning-everything-into-arrays-and-do-less-work-instead/">Iterate</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-wonderful-weird-web-%E2%80%93-%60poms.fun%60" href="#the-wonderful-weird-web-%E2%80%93-%60poms.fun%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-wonderful-weird-web-%E2%80%93-%60poms.fun%60">The wonderful weird web – <code>poms<wbr>.fun</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(237,137,22); --color2: rgb(175,140,100); --color3: rgb(238,193,153); --color4: rgb(201,184,161); --color5: rgb(88,69,47);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTUxIj48cGF0aCBmaWxsPSIjNTg0NTJmIiBkPSJNMCAwaDMwMHYxNTFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjExMyIgY3k9IjExMCIgcj0iMTgxIiBmaWxsPSIjMDQwNjA1Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjYzBhMzdiIiB0cmFuc2Zvcm09Im1hdHJpeCgtMjAuODUzOTcgNDYuNTgzNDMgLTI1LjQzOTk3IC0xMS4zODg3IDE5Ny45IDQ2KSIvPjxlbGxpcHNlIGN4PSI4OCIgY3k9IjQyIiBmaWxsPSIjZmZlOGEzIiByeD0iMzIiIHJ5PSIxOCIvPjxlbGxpcHNlIGN4PSI1OSIgY3k9IjEwNCIgcng9IjY3IiByeT0iMzQiLz48cGF0aCBmaWxsPSIjYzE5ZDZmIiBkPSJNMTc3LjcgMTIyLjQgMTQ0LjUgMTY1bC00MC4yLTMxLjRMMTM3LjUgOTF6Ii8+PGNpcmNsZSByPSIxIiB0cmFuc2Zvcm09Im1hdHJpeCgtOC40NTEyIC00Mi4yOTQxMyA2MC41Njc3IC0xMi4xMDI2MiAyMzIuNiA5OS4zKSIvPjxjaXJjbGUgcj0iMSIgdHJhbnNmb3JtPSJtYXRyaXgoMS42MzM4MiAyMS43MjkwNiAtMTIwLjUxNTQyIDkuMDYxNiA0NSAxMSkiLz48cGF0aCBmaWxsPSIjZjZlNmQzIiBkPSJtMjAyLjcgNjcuNi00OS4zIDE1LjIgNC43LTEzTDE4Ni40IDUyeiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=avif&fit=scale&q=75&w=300&h=151 300w, https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=avif&fit=scale&q=75&w=500&h=253 500w, https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=avif&fit=scale&q=75&w=700&h=354 700w, https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=avif&fit=scale&q=75&w=900&h=455 900w, https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=avif&fit=scale&q=75&w=1100&h=557 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=webp&fit=scale&q=75&w=300&h=151 300w, https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=webp&fit=scale&q=75&w=500&h=253 500w, https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=webp&fit=scale&q=75&w=700&h=354 700w, https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=webp&fit=scale&q=75&w=900&h=455 900w, https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=webp&fit=scale&q=75&w=1100&h=557 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="506"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=jpg&fit=scale&q=75&w=300&h=151 300w, https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=jpg&fit=scale&q=75&w=500&h=253 500w, https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=jpg&fit=scale&q=75&w=700&h=354 700w, https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=jpg&fit=scale&q=75&w=900&h=455 900w, https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png?fm=jpg&fit=scale&q=75&w=1100&h=557 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/7tKwuGHsRaQLIEIJTSKzYZ/796304ea62095d2421f4c4bc8e2823c9/Screenshot_2026-01-13_at_10.48.08.png"
                alt="Some Pomeranians walking around."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>There's nothing to see here, it's just some Pomeranians having a walk...</p>
<p><a class="btn btn__small" href="https://poms.fun/">Walk the dog</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="on-css-alignment..." href="#on-css-alignment...">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="on-css-alignment...">On CSS alignment...</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(213,99,49); --color2: rgb(97,134,164); --color3: rgb(158,217,244); --color4: rgb(185,196,209); --color5: rgb(79,80,81);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTE5Ij48cGF0aCBmaWxsPSIjNGY1MDUxIiBkPSJNMCAwaDMwMHYxMTlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMTEiIGN5PSI1MSIgZmlsbD0iI2ZmZiIgcng9IjE3NyIgcnk9IjEwMSIvPjxjaXJjbGUgY3g9IjEyNyIgY3k9IjQwIiByPSIxNDciIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMTAiIGN5PSIzNyIgcj0iMTcyIiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTM5IiBjeT0iODkiIHI9IjE3MyIgZmlsbD0iI2ZmZiIvPjxlbGxpcHNlIGN4PSI2MCIgY3k9IjMzIiBmaWxsPSIjYjA3YjdiIiByeD0iNjUiIHJ5PSIyIi8+PHBhdGggZmlsbD0iIzc2NzM3MyIgZD0iTTIwOSAyM2gydjY1aC0yeiIvPjxwYXRoIGZpbGw9IiM3NTc0NzQiIGQ9Ik0xMzYgMjNoNjl2MmgtNjl6Ii8+PGVsbGlwc2UgY3g9IjI5IiBjeT0iNjIiIGZpbGw9IiM5OWE4YzIiIHJ4PSI4MyIgcnk9IjIiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=avif&fit=scale&q=75&w=300&h=120 300w, https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=avif&fit=scale&q=75&w=500&h=200 500w, https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=avif&fit=scale&q=75&w=700&h=280 700w, https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=avif&fit=scale&q=75&w=900&h=360 900w, https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=avif&fit=scale&q=75&w=1100&h=440 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=webp&fit=scale&q=75&w=300&h=120 300w, https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=webp&fit=scale&q=75&w=500&h=200 500w, https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=webp&fit=scale&q=75&w=700&h=280 700w, https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=webp&fit=scale&q=75&w=900&h=360 900w, https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=webp&fit=scale&q=75&w=1100&h=440 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="400"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=jpg&fit=scale&q=75&w=300&h=120 300w, https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=jpg&fit=scale&q=75&w=500&h=200 500w, https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=jpg&fit=scale&q=75&w=700&h=280 700w, https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=jpg&fit=scale&q=75&w=900&h=360 900w, https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png?fm=jpg&fit=scale&q=75&w=1100&h=440 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1QlmSKhowtkzKgUodQIbVB/c194683ce047c15e8a9e715ffa8528c4/Screenshot_2026-01-13_at_11.36.20.png"
                alt="Visual explanation of place-* CSS properties."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Disclaimer: you'll need some time for this guide. Temani explains all the details when it comes to CSS alignment. Do you wonder why we need <code>place-content</code>, <code>place-self</code>, and <code>place-items</code> in CSS? If so, this guide is for you!</p>
<p><a class="btn btn__small" href="https://css-tip.com/explore/alignment/">Align</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="from-the-future%3A-scroll-triggered-css-animations" href="#from-the-future%3A-scroll-triggered-css-animations">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="from-the-future%3A-scroll-triggered-css-animations">From the future: scroll-triggered CSS animations</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(28,101,212); --color2: rgb(123,134,140); --color3: rgb(124,172,228); --color4: rgb(188,196,196); --color5: rgb(64,79,87);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTA1Ij48cGF0aCBmaWxsPSIjNDA0ZjU3IiBkPSJNMCAwaDMwMHYxMDVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE3NSIgY3k9IjY0IiByPSIxODgiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMjciIGN5PSIzMyIgcj0iMTQ5IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTM0IiBjeT0iNTAiIHI9IjE0OSIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjE2NyIgY3k9Ijc4IiByPSIxOTYiIGZpbGw9IiNmNWZhZmQiLz48ZWxsaXBzZSBjeD0iNTMiIGN5PSI1MSIgZmlsbD0iI2FmYzVlMSIgcng9IjE0MSIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iNTAiIGN5PSIyNCIgZmlsbD0iIzhlYjJlMiIgcng9IjMzIiByeT0iMyIvPjxlbGxpcHNlIGN4PSI0MSIgY3k9IjQyIiBmaWxsPSIjOTliNGQ2IiByeD0iMTMiIHJ5PSIzIi8+PHBhdGggZmlsbD0iI2ZmZmZmYSIgZD0iTTAgNDloMjl2N0gweiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=avif&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=avif&fit=scale&q=75&w=500&h=176 500w, https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=avif&fit=scale&q=75&w=700&h=247 700w, https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=avif&fit=scale&q=75&w=900&h=317 900w, https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=avif&fit=scale&q=75&w=1100&h=388 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=webp&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=webp&fit=scale&q=75&w=500&h=176 500w, https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=webp&fit=scale&q=75&w=700&h=247 700w, https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=webp&fit=scale&q=75&w=900&h=317 900w, https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=webp&fit=scale&q=75&w=1100&h=388 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="353"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=jpg&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=jpg&fit=scale&q=75&w=500&h=176 500w, https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=jpg&fit=scale&q=75&w=700&h=247 700w, https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=jpg&fit=scale&q=75&w=900&h=317 900w, https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png?fm=jpg&fit=scale&q=75&w=1100&h=388 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/5poVygYwNAph4RzLT94ahU/d52e835d0a71c4ecdb60ebc1b0bd334c/Screenshot_2026-01-13_at_11.39.58.png"
                alt="timeline-trigger:   --t   view()   entry 100% exit 0% / entry 0% exit 100% ;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>That's some funky CSS, isn't it? Scroll-triggered animations will land in Chrome 145 (we're currently on 143). Granted, there aren't many materials besides this blog post and the specs yet, but Bramus shares details about what's coming!</p>
<p><a class="btn btn__small" href="https://developer.chrome.com/blog/scroll-triggered-animations">Trigger</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="better-date-handling-with-%60temporal%60" href="#better-date-handling-with-%60temporal%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="better-date-handling-with-%60temporal%60">Better date handling with <code>Temporal</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(204,180,20); --color2: rgb(140,140,132); --color3: rgb(236,100,92); --color4: rgb(188,188,180); --color5: rgb(83,68,40);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTA1Ij48cGF0aCBmaWxsPSIjNTM0NDI4IiBkPSJNMCAwaDMwMHYxMDVIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyMyIgY3k9IjM4IiByPSIxNTIiIGZpbGw9IiMwZjE2MmUiLz48cGF0aCBmaWxsPSIjOTA4ODU2IiBkPSJNNTEgMTloMTE3djRINTF6Ii8+PHBhdGggZmlsbD0iIzhmNzgyZiIgZD0iTTkgMjloMTY2djNIOXoiLz48cGF0aCBmaWxsPSIjOGI4NTVlIiBkPSJNODkgMzhoNDN2NEg4OXoiLz48cGF0aCBmaWxsPSIjNTAzZTI3IiBkPSJNMjQgMTloNTB2NDNIMjR6Ii8+PGVsbGlwc2UgY3g9IjE5MiIgY3k9IjYzIiBmaWxsPSIjMjUyNTI5IiByeD0iOTciIHJ5PSIzMCIvPjxwYXRoIGZpbGw9IiM3ZjVkNDgiIGQ9Ik0xNTggMjhoNjh2NGgtNjh6Ii8+PHBhdGggZmlsbD0iIzk2NGIzZCIgZD0iTTMxIDU4aDY5djNIMzF6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=avif&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=avif&fit=scale&q=75&w=500&h=176 500w, https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=avif&fit=scale&q=75&w=700&h=247 700w, https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=avif&fit=scale&q=75&w=900&h=317 900w, https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=avif&fit=scale&q=75&w=1100&h=388 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=webp&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=webp&fit=scale&q=75&w=500&h=176 500w, https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=webp&fit=scale&q=75&w=700&h=247 700w, https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=webp&fit=scale&q=75&w=900&h=317 900w, https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=webp&fit=scale&q=75&w=1100&h=388 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="353"
                srcset="https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=jpg&fit=scale&q=75&w=300&h=105 300w, https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=jpg&fit=scale&q=75&w=500&h=176 500w, https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=jpg&fit=scale&q=75&w=700&h=247 700w, https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=jpg&fit=scale&q=75&w=900&h=317 900w, https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png?fm=jpg&fit=scale&q=75&w=1100&h=388 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/49jnd5SG0r1azqUGQeFAiO/3c1e821790a2333dfd7d628fea883ba8/Screenshot_2026-01-13_at_11.59.52.png"
                alt="const today = Temporal.Now.plainDateISO(); const jsShipped = Temporal.PlainDate.from( &quot;1995-12-04&quot; ); const sinceDate = today.since(   jsShipped,   { largestUnit: &apos;year&apos; } );"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Here's Mat talking about date handling in JavaScript:</p>
<blockquote>
<p>I dislike Date <strong>immensely</strong>.</p>
</blockquote>
<p>I feel you, Mat. I really do! But there's something better coming: <code>Temporal</code>. The new API will make date handling so much better. Browser support isn't there yet (Firefox ships it and Chromium and WebKit are working on it), but if you want to peek into the bright future, this nicely nerdy post will get you started.</p>
<p><a class="btn btn__small" href="https://piccalil.li/blog/date-is-out-and-temporal-is-in/">Add one more day</a></p>
<p><em>And if this isn't enough: <a href="https://philna.sh/blog/2026/01/11/javascript-date-calculation/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fphilna.sh%2Fblog%2F2026%2F01%2F11%2Fjavascript-date-calculation%2F')">Phil also shared how to handle durations with <code>Temporal</code></a>.</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-checkbox-%60switch%60-polyfill" href="#a-new-checkbox-%60switch%60-polyfill">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-checkbox-%60switch%60-polyfill">A new checkbox <code>switch</code> polyfill</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(235,41,162); --color2: rgb(169,96,104); --color3: rgb(225,122,123); --color4: rgb(199,199,199); --color5: rgb(84,47,64);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTAwIj48cGF0aCBmaWxsPSIjNTQyZjQwIiBkPSJNMCAwaDMwMHYxMDBIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE0OCIgY3k9IjUxIiByPSIxNTgiIGZpbGw9IiMwYzE5MzgiLz48cGF0aCBmaWxsPSIjZTU4Mjg4IiBkPSJNMTM1IDM2aDMxdjEwaC0zMXoiLz48cGF0aCBmaWxsPSIjNjczNjRlIiBkPSJNMjkgMjdoODh2MTdIMjl6Ii8+PGVsbGlwc2UgY3g9IjE4NCIgY3k9IjQxIiBmaWxsPSIjODM0YzVhIiByeD0iMzMiIHJ5PSIzIi8+PGVsbGlwc2UgY3g9IjM4IiBjeT0iNTMiIGZpbGw9IiM4ZDU3NjQiIHJ4PSIxOSIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iNzAiIGN5PSIzNSIgZmlsbD0iIzFjMWQzNiIgcng9IjYxIiByeT0iNCIvPjxwYXRoIGZpbGw9IiMyNTFmMzciIGQ9Ik0xNzcuOCAxMDEtMTYgNTZsMTc2LjggNi43IDUtNDIuNHoiLz48cGF0aCBmaWxsPSIjN2M0NzQxIiBkPSJNMzMgMzloOTR2NUgzM3oiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=avif&fit=scale&q=75&w=300&h=100 300w, https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=avif&fit=scale&q=75&w=500&h=168 500w, https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=avif&fit=scale&q=75&w=700&h=235 700w, https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=avif&fit=scale&q=75&w=900&h=302 900w, https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=avif&fit=scale&q=75&w=1100&h=370 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=webp&fit=scale&q=75&w=300&h=100 300w, https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=webp&fit=scale&q=75&w=500&h=168 500w, https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=webp&fit=scale&q=75&w=700&h=235 700w, https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=webp&fit=scale&q=75&w=900&h=302 900w, https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=webp&fit=scale&q=75&w=1100&h=370 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="336"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=jpg&fit=scale&q=75&w=300&h=100 300w, https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=jpg&fit=scale&q=75&w=500&h=168 500w, https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=jpg&fit=scale&q=75&w=700&h=235 700w, https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=jpg&fit=scale&q=75&w=900&h=302 900w, https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png?fm=jpg&fit=scale&q=75&w=1100&h=370 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4CXQPI5gMxuWoq6EdbzdOH/eb275df0d7a0c0729d3b56f4cac73940/Screenshot_2026-01-13_at_12.07.25.png"
                alt="&amp;lt;label&amp;gt;Toggle me &amp;lt;   input type=&amp;quot;checkbox&amp;quot; switch checked /&amp;gt; &amp;lt;/label&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I'm still unsure whether I think the <code>switch</code> checkbox attribute shipped by Safari was a good idea. But hey, if you fancy it, there's a new polyfill available.</p>
<p><a class="btn btn__small" href="https://blog.tomayac.com/2026/01/12/a-polyfill-for-the-html-switch-element/">Switch the checkbox</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-%E2%80%94-aria-roles-can-change-their-children's-semantics" href="#til-%E2%80%94-aria-roles-can-change-their-children's-semantics">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-%E2%80%94-aria-roles-can-change-their-children's-semantics">TIL — ARIA roles can change their children's semantics</h2></div><p><img src="https://images.ctfassets.net/f20lfrunubsq/3KCZk51COmtenXFwRqEUSL/a96299c057df2bb3ed995d57e465096c/menu.gif" alt="Interactive component showing that role=menu changes the list item semantics." loading="lazy" /></p>
<p>I learned a new thing about ARIA. Do you know that elements containing landmark roles like <code>menu</code> change their children's semantics?</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/aria-roles-can-remove-their-childrens-semantics/">Watch the tree</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="random-mdn-%E2%80%93-%60font-size-adjust%60" href="#random-mdn-%E2%80%93-%60font-size-adjust%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="random-mdn-%E2%80%93-%60font-size-adjust%60">Random MDN – <code>font-size-adjust</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(132,44,252); --color2: rgb(108,116,124); --color3: rgb(172,108,252); --color4: rgb(211,187,196); --color5: rgb(71,71,71);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgOTQiPjxwYXRoIGZpbGw9IiM0NzQ3NDciIGQ9Ik0wIDBoMzAwdjk0SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KDE1Mi4wMjA5MSA2LjYwMjcxIC01LjQ0MTQ3IDEyNS4yODQ0IDEzNS45IDMxLjIpIi8+PGNpcmNsZSBjeD0iMTUzIiBjeT0iODAiIHI9IjE4MSIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjE0NCIgY3k9IjQ0IiByPSIxNTIiIGZpbGw9IiNmZmYiLz48cGF0aCBmaWxsPSIjYWQ3YjhjIiBkPSJNMzEgMzdoMTYydjZIMzF6Ii8+PHBhdGggZmlsbD0iI2I2ODJmZSIgZD0iTTIwIDIyaDEwMHY2SDIweiIvPjxlbGxpcHNlIGN4PSIyMjkiIGN5PSIzNSIgZmlsbD0iI2YyZjRmOCIgcng9IjQxIiByeT0iODAiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmMmY0ZjgiIHRyYW5zZm9ybT0ibWF0cml4KDExMi41NjU1NiAtMTAuMjQ0MjcgMi40OTY2OCAyNy40MzM5NSA4NSA3MykiLz48cGF0aCBmaWxsPSIjODM5Yjk1IiBkPSJtMTM1LjQgMzYuOC0uOSAzIC44IDQuOCAzMy4yLTYuMnoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=avif&fit=scale&q=75&w=300&h=94 300w, https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=avif&fit=scale&q=75&w=500&h=158 500w, https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=avif&fit=scale&q=75&w=700&h=221 700w, https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=avif&fit=scale&q=75&w=900&h=284 900w, https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=avif&fit=scale&q=75&w=1100&h=348 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=webp&fit=scale&q=75&w=300&h=94 300w, https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=webp&fit=scale&q=75&w=500&h=158 500w, https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=webp&fit=scale&q=75&w=700&h=221 700w, https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=webp&fit=scale&q=75&w=900&h=284 900w, https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=webp&fit=scale&q=75&w=1100&h=348 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="316"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=jpg&fit=scale&q=75&w=300&h=94 300w, https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=jpg&fit=scale&q=75&w=500&h=158 500w, https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=jpg&fit=scale&q=75&w=700&h=221 700w, https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=jpg&fit=scale&q=75&w=900&h=284 900w, https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png?fm=jpg&fit=scale&q=75&w=1100&h=348 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4SsMbvvOHRMvoncZf8Ya9Q/4b6980f045f959563cefb969af4a6da1/Screenshot_2026-01-13_at_12.54.47.png"
                alt=".adj-times-cap-height {   font-size-adjust: cap-height 0.73; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Did you know that you can adjust the size of lowercase letters relative to the size of uppercase letters with CSS? Now you do!</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/font-size-adjust">Adjust your fonts</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-recap-%E2%80%93-%60git-log--s%60" href="#til-recap-%E2%80%93-%60git-log--s%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-recap-%E2%80%93-%60git-log--s%60">TIL recap – <code>git log -S</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(76,188,251); --color2: rgb(156,82,90); --color3: rgb(196,236,140); --color4: rgb(182,186,188); --color5: rgb(45,75,93);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgODciPjxwYXRoIGZpbGw9IiMyZDRiNWQiIGQ9Ik0wIDBoMzAwdjg3SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxMzEiIHI9IjE1NCIvPjxjaXJjbGUgY3g9IjE1NyIgY3k9IjM3IiByPSIxNjQiIGZpbGw9IiMwNDE0MWMiLz48ZWxsaXBzZSBjeD0iMTU5IiBjeT0iMzAiIGZpbGw9IiMzODUxNWUiIHJ4PSIxNTEiIHJ5PSIzIi8+PHBhdGggZmlsbD0iIzUxNjY1NCIgZD0iTTE2IDQwaDE0OXY1SDE2eiIvPjxlbGxpcHNlIGN4PSIxMDgiIGN5PSI0MiIgZmlsbD0iIzZjODc1NCIgcng9IjI3IiByeT0iMiIvPjxwYXRoIGZpbGw9IiMwODE2MWYiIGQ9Im0xMSA4NCAxOTItMUw1NCAzNXoiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwMTEwMWIiIHRyYW5zZm9ybT0ibWF0cml4KDIuOTkyNDEgMS4zNDQ4NCAtNi4xMzk5OSAxMy42NjIxIDExNyA0NC4xKSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzA1MTQxZCIgdHJhbnNmb3JtPSJtYXRyaXgoNi41Mzk2NSA3NC43NDg1MiAtMTYuMTUyNjkgMS40MTMxOCAyNTUgMjEpIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=avif&fit=scale&q=75&w=300&h=88 300w, https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=avif&fit=scale&q=75&w=500&h=148 500w, https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=avif&fit=scale&q=75&w=700&h=207 700w, https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=avif&fit=scale&q=75&w=900&h=266 900w, https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=avif&fit=scale&q=75&w=1100&h=326 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=webp&fit=scale&q=75&w=300&h=88 300w, https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=webp&fit=scale&q=75&w=500&h=148 500w, https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=webp&fit=scale&q=75&w=700&h=207 700w, https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=webp&fit=scale&q=75&w=900&h=266 900w, https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=webp&fit=scale&q=75&w=1100&h=326 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="296"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=jpg&fit=scale&q=75&w=300&h=88 300w, https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=jpg&fit=scale&q=75&w=500&h=148 500w, https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=jpg&fit=scale&q=75&w=700&h=207 700w, https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=jpg&fit=scale&q=75&w=900&h=266 900w, https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png?fm=jpg&fit=scale&q=75&w=1100&h=326 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3zQlqb5pijlGRCf9UgV1zK/e341a5580cb3d9ef4ed6de1ef1dec874/Screenshot_2026-01-13_at_12.16.18.png"
                alt="# search for a string in file additions or deletions git log -S &apos;if (someVar === 1.32)&apos;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Here's a quick Git tip: if you want to find when a code string entered the codebase, <code>log -S</code> is your friend!</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/how-to-search-for-strings-in-git-commit-additions-or-deletions/">Analyze the past</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-on-the-baseline" href="#new-on-the-baseline">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-on-the-baseline">New on the baseline</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(212,4,60); --color2: rgb(96,168,130); --color3: rgb(227,142,166); --color4: rgb(185,202,195); --color5: rgb(60,60,60);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTE0Ij48cGF0aCBmaWxsPSIjM2MzYzNjIiBkPSJNMCAwaDMwMHYxMTRIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzMSIgY3k9Ijk2IiByPSIxODEiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxNzQiIGN5PSI3MyIgcj0iMTk5IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTI3IiBjeT0iNzciIHI9IjE1NCIgZmlsbD0iI2ZmZiIvPjxlbGxpcHNlIGN4PSIxNzEiIGN5PSI1OCIgZmlsbD0iIzkzOTY4ZiIgcng9IjE3MiIgcnk9IjIiLz48cGF0aCBmaWxsPSIjNWY2MDYzIiBkPSJNMjEgNjdoNDh2M0gyMXoiLz48cGF0aCBmaWxsPSIjOGU4YzgzIiBkPSJNMTUgMThoMTczdjNIMTV6Ii8+PGVsbGlwc2UgY3g9IjU2IiBjeT0iNDgiIGZpbGw9IiM5OTk0OGYiIHJ4PSI0OCIgcnk9IjIiLz48ZWxsaXBzZSBjeD0iNTAiIGN5PSIyOSIgZmlsbD0iIzZkNmU3MSIgcng9IjMxIiByeT0iMiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=avif&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=avif&fit=scale&q=75&w=500&h=191 500w, https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=avif&fit=scale&q=75&w=700&h=268 700w, https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=avif&fit=scale&q=75&w=900&h=344 900w, https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=avif&fit=scale&q=75&w=1100&h=421 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=webp&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=webp&fit=scale&q=75&w=500&h=191 500w, https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=webp&fit=scale&q=75&w=700&h=268 700w, https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=webp&fit=scale&q=75&w=900&h=344 900w, https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=webp&fit=scale&q=75&w=1100&h=421 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="383"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=jpg&fit=scale&q=75&w=300&h=114 300w, https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=jpg&fit=scale&q=75&w=500&h=191 500w, https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=jpg&fit=scale&q=75&w=700&h=268 700w, https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=jpg&fit=scale&q=75&w=900&h=344 900w, https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png?fm=jpg&fit=scale&q=75&w=1100&h=421 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/7h6nGY0XlTWw1fzKlsTIJX/ec7f0d1ce2655041077cfc56107ccc90/Screenshot_2026-01-13_at_12.36.43.png"
                alt="&amp;lt;button commandfor=&amp;quot;mypopover&amp;quot; command=&amp;quot;toggle-popover&amp;quot;&amp;gt; Toggle the popover &amp;lt;/button&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Big news for the declarative web: invoker commands entered the baseline! 🎉 <code>command</code> and <code>commandfor</code> now work across browsers. Huge!</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/API/Invoker_Commands_API">Invoke</a></p>
<p><em>And if you're curious about a practical example: <a href="https://www.htmhell.dev/adventcalendar/2025/7/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.htmhell.dev%2Fadventcalendar%2F2025%2F7%2F')">Aubrey shared how to control dialogs with the fancy invokers</a>.</em></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="three-valuable-projects-to-have-a-look-at" href="#three-valuable-projects-to-have-a-look-at">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="three-valuable-projects-to-have-a-look-at">Three valuable projects to have a look at</h2></div><ul>
<li><a href="https://github.com/schedule-x/schedule-x" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fschedule-x%2Fschedule-x')">schedule-x/schedule-x</a> – A JavaScript event calendar.</li>
<li><a href="https://github.com/docmost/docmost" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fdocmost%2Fdocmost')">docmost/docmost</a> – An open-source alternative to Confluence and Notion.</li>
<li><a href="https://github.com/tw93/Mole" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Ftw93%2FMole')">tw93/Mole</a> – Deep clean and optimize your Mac.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-tiny-helper" href="#a-new-tiny-helper">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-tiny-helper">A new Tiny Helper</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(203,64,42); --color2: rgb(128,111,99); --color3: rgb(232.26857142857148,157.03836734693874,145.13142857142853); --color4: rgb(196,140,148); --color5: rgb(70,42,43);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTE4Ij48cGF0aCBmaWxsPSIjNDYyYTJiIiBkPSJNMCAwaDMwMHYxMThIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxwYXRoIGZpbGw9IiNlNWUzZGUiIGQ9Ik04NSA0N2g4NnY3SDg1eiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzI1MjYyNSIgdHJhbnNmb3JtPSJtYXRyaXgoLTgxLjAxOTUyIC0xNS40NTUzIDIxLjEyNTA2IC0xMTAuNzQxNDYgMzUuNyA2NC44KSIvPjxlbGxpcHNlIGN4PSIyMDMiIGN5PSI2MiIgZmlsbD0iI2Y5ZmZmZiIgcng9IjE4MSIgcnk9IjEiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMyMTIzMjIiIHRyYW5zZm9ybT0ibWF0cml4KDU5LjQ1MTkzIC05LjkwODMgMjcuMjUxMSAxNjMuNTEyNTMgMjMwLjYgNDcpIi8+PGVsbGlwc2UgY3g9IjE1NSIgY3k9IjM1IiBmaWxsPSIjZTZlOGU4IiByeD0iMTMzIiByeT0iMSIvPjxwYXRoIGZpbGw9IiNkMDk0ODkiIGQ9Ik04NCA0NGgyOXY5SDg0eiIvPjxlbGxpcHNlIGN4PSIxNDMiIGN5PSI5MyIgZmlsbD0iIzI1MjMyMiIgcng9IjQ3IiByeT0iMzEiLz48ZWxsaXBzZSBjeD0iMTM5IiBjeT0iMTQiIGZpbGw9IiMyNTIyMjIiIHJ4PSI0MiIgcnk9IjIwIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=avif&fit=scale&q=75&w=300&h=118 300w, https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=avif&fit=scale&q=75&w=500&h=198 500w, https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=avif&fit=scale&q=75&w=700&h=277 700w, https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=avif&fit=scale&q=75&w=900&h=356 900w, https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=avif&fit=scale&q=75&w=1100&h=436 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=webp&fit=scale&q=75&w=300&h=118 300w, https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=webp&fit=scale&q=75&w=500&h=198 500w, https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=webp&fit=scale&q=75&w=700&h=277 700w, https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=webp&fit=scale&q=75&w=900&h=356 900w, https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=webp&fit=scale&q=75&w=1100&h=436 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="396"
                srcset="https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=jpg&fit=scale&q=75&w=300&h=118 300w, https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=jpg&fit=scale&q=75&w=500&h=198 500w, https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=jpg&fit=scale&q=75&w=700&h=277 700w, https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=jpg&fit=scale&q=75&w=900&h=356 900w, https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png?fm=jpg&fit=scale&q=75&w=1100&h=436 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/2foIZjwO6KfK3VD9p9emi8/47938c4e114d3a15959d7543595416fb/Screenshot_2026-01-13_at_10.52.10.png"
                alt="A button labeled &quot;De-crapulate&quot;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Checking markup semantics and accessibility can be tough when it's littered with classes, data attributes, and framework markers. The HTML De-crapulator helps out if you want to check the &quot;pure&quot; HTML.</p>
<p><a class="btn btn__small" href="https://a11y-tools.com/markup-de-crapulator/">Clean up</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more single-purpose online tools on <a href="https://tiny-helpers.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ftiny-helpers.dev%2F')">tiny-helpers.dev</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="thought-of-the-week" href="#thought-of-the-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="thought-of-the-week">Thought of the week</h2></div><p>I plugged Ibrahim's post last week already, but this line is too good not to share again. If you need to discuss &quot;work from home&quot; policies at work, <a href="https://idiallo.com/blog/do-i-leave-the-laptop-in-the-office" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fidiallo.com%2Fblog%2Fdo-i-leave-the-laptop-in-the-office')">this post includes some strong arguments</a>.</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <blockquote>
<p>If the work truly requires us to be in a specific building, then it should stay in that building.</p>
</blockquote>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="did-you-learn-something-from-this-issue%3F" href="#did-you-learn-something-from-this-issue%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="did-you-learn-something-from-this-issue%3F">Did you learn something from this issue?</h2></div><p>❤️ If so, <strong>join 33 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="this-is-all%2C-friends!" href="#this-is-all%2C-friends!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="this-is-all%2C-friends!">This is all, friends!</h2></div><p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr aria-hidden="true"><p>And with that, take care of yourself—mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Web Weekly #180">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>ARIA roles can remove their children’s semantics (#tilPost)</title>
      <link href="https://www.stefanjudis.com/today-i-learned/aria-roles-can-remove-their-childrens-semantics/"/>
      <published>2026-01-12T23:00:00+00:00</published>
      <updated>2026-01-12T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/today-i-learned/aria-roles-can-remove-their-childrens-semantics/</id>
      <category term="tilPost"></category>
        <category term="Accessibility"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>I've learned something new about ARIA today!</p>
<p>You probably know the first rule of ARIA:</p>
<blockquote>
<p>If you can use a native HTML element or attribute with the semantics and behavior you require already built in, instead of repurposing an element and adding an ARIA role, state, or property to make it accessible, then do so.</p>
</blockquote>
<p>Unfortunately, many people slap ARIA attributes on elements without really understanding what they're doing. Adding <code>role=&quot;menu&quot;</code> to navigation lists is one example that I see very often.</p>
<p>What's supposed to be a <code>menu</code>? Here's <a href="https://w3c.github.io/aria/#menu" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fw3c.github.io%2Faria%2F%23menu')">the ARIA spec</a>:</p>
<blockquote>
<p>A <code>menu</code> is a container, generally rendered as a popup or overlay, for a set of menu items that can be invoked to perform an action or function.</p>
</blockquote>
<p>Making a list of navigation entries a <code>menu</code> isn't a good idea because <strong>a menu is supposed to include menu items that invoke actions or functions</strong>. However, that's not all.</p>
<p>Today I learned that adding ARIA attributes to elements can also change the semantics of the included elements. Here's the <code>role=&quot;menu&quot;</code> example for a <code>ul</code> case.</p>
<p>[Interactive component: visit the article to see it...]</p>
<p>A &quot;normal&quot; list might be announced by a screen reader as &quot;List (3 items)&quot;. It's helpful to know how many elements are in the list, right? A <code>menu</code>, though, must include menu items. And if you're not planning to also add elements with <code>role=&quot;menuitem&quot;</code> to the menu, it'll be empty.</p>
<p>I quickly tested Chrome with VoiceOver <a href="https://codepen.io/stefanjudis/pen/ZYOBKQY" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcodepen.io%2Fstefanjudis%2Fpen%2FZYOBKQY')">on this CodePen</a>:</p>
<ul>
<li>A normal list is announced as <em>&quot;List (3 items)&quot;</em>.</li>
<li>A list with <code>role=&quot;menu&quot;</code> without included <code>menuitems</code> isn't announced at all. The list entries are read out loud.</li>
<li>A list with <code>role=&quot;menu&quot;</code> with included <code>menuitems</code> is announced as <em>&quot;Menu (3 items)&quot;</em>.</li>
</ul>
<p>Incorrect <code>role=&quot;menu&quot;</code> usage can not only be confusing but might remove the list item count and nuke the item semantics.</p>
<p>Don't mess with ARIA unless you know what you're doing.</p>
<p><a href="https://www.maxdesign.com.au/articles/aria-roles-semantics.html" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.maxdesign.com.au%2Farticles%2Faria-roles-semantics.html')">Check this post</a> if you want to dive deeper into ARIA and what other roles affect their children semantics.</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20ARIA roles can remove their children’s semantics">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Clean up your Mac with open source (#note)</title>
      <link href="https://www.stefanjudis.com/notes/clean-up-your-mac-with-open-source/"/>
      <published>2026-01-12T23:00:00+00:00</published>
      <updated>2026-01-12T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/notes/clean-up-your-mac-with-open-source/</id>
      <category term="note"></category>
        <category term="macOS"></category>
      
        <category term="Tools"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>My Mac was running out of disk space the other day, and because I wasn't in the mood to hunt for custom solutions, I reached for <a href="https://cleanmymac.com/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcleanmymac.com%2F')">Clean My Mac</a>. It's a nice tool, and I knew it would do the job just fine. It freed up 60GB in about twenty minutes. Nice! Cleaning up disk space without any hassle was worth paying for.</p>
<p>A couple of days later, Nick sent out his <a href="https://one-tip-a-week.beehiiv.com/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fone-tip-a-week.beehiiv.com%2F')">&quot;One tip a week&quot; newsletter</a>, and dang it... He shared <a href="https://github.com/tw93/Mole" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Ftw93%2FMole')">Mole — a free open source CLI tool</a> that does the same thing as Clean My Mac. Too late, Nick. Too late.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(110.11363636363635,208.63636363636363,46.36363636363638); --color2: rgb(129,126,174); --color3: rgb(179.6590909090909,230.89090909090908,146.50909090909093); --color4: rgb(235,230,221); --color5: rgb(60,84,60);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY3Ij48cGF0aCBmaWxsPSIjM2M1NDNjIiBkPSJNMCAwaDMwMHYxNjdIMHoiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmRmZGIiIGZpbGwtb3BhY2l0eT0iLjUiIHRyYW5zZm9ybT0ibWF0cml4KDE5LjMzODE4IDM3LjYyODAyIC0zNi4zNjU1NCAxOC42ODkzNSA1NSA1OS44KSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzBiMDAxOCIgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJtYXRyaXgoLTExLjg4NTIyIDEwMi43MjA5NCAtMTQzLjI1NTc2IC0xNi41NzUyNiAyNTEgNjAuNykiLz48Y2lyY2xlIHI9IjEiIGZpbGwtb3BhY2l0eT0iLjUiIHRyYW5zZm9ybT0ibWF0cml4KDguMjMzMTUgLTE3LjIzODM4IDI5LjE0NTcyIDEzLjkyMDE3IDUzLjMgNTguOCkiLz48cGF0aCBmaWxsPSIjZmZmIiBmaWxsLW9wYWNpdHk9Ii41IiBkPSJNMTAwLjkgMzkuMiA5MC4zIDU3LjVsLTUxLjctMzBMNDkgOS40ek05MiA4Mi42bC00OS4yIDEzLTI0LjYtMjEuMnoiLz48cGF0aCBmaWxsPSIjYTFiMzllIiBmaWxsLW9wYWNpdHk9Ii41IiBkPSJNMTguMiAxNDYuNXYtMzEuN2g1MS41djMxLjd6Ii8+PHBhdGggZmlsbD0iI2ZmZiIgZmlsbC1vcGFjaXR5PSIuNSIgZD0iTTIzLjIgNzIuNyAzMyA2MS41IDE3LjggMzkuM2wtNiAyM3oiLz48cGF0aCBmaWxsPSIjNDMzYjQ1IiBmaWxsLW9wYWNpdHk9Ii41IiBkPSJtMTg1LjcgMTc4LjctMTY0LTgyIDI5Ni41LTd6Ii8+PC9zdmc+');
        ">
          <a href="//images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png">
            <picture>
              <source type="image/avif"
                srcset="//images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=avif&fit=scale&q=75&w=300&h=168 300w, //images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=avif&fit=scale&q=75&w=500&h=280 500w, //images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=avif&fit=scale&q=75&w=700&h=392 700w, //images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=avif&fit=scale&q=75&w=900&h=504 900w, //images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=avif&fit=scale&q=75&w=1100&h=616 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="//images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=webp&fit=scale&q=75&w=300&h=168 300w, //images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=webp&fit=scale&q=75&w=500&h=280 500w, //images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=webp&fit=scale&q=75&w=700&h=392 700w, //images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=webp&fit=scale&q=75&w=900&h=504 900w, //images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=webp&fit=scale&q=75&w=1100&h=616 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="560"
                srcset="//images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=jpg&fit=scale&q=75&w=300&h=168 300w, //images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=jpg&fit=scale&q=75&w=500&h=280 500w, //images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=jpg&fit=scale&q=75&w=700&h=392 700w, //images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=jpg&fit=scale&q=75&w=900&h=504 900w, //images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png?fm=jpg&fit=scale&q=75&w=1100&h=616 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="//images.ctfassets.net/f20lfrunubsq/1KzqfZsAOOW23MkQGZEc4r/b683eb402d46807bbb05472d5de4a05d/Screenshot_2026-01-13_at_21.24.34.png"
                alt="Mole — clean your mac."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I haven't tried it, but I trust Nick's judgment here. You might want to give it a try if you're running low on disk space.</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Clean up your Mac with open source">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>The Trust Equation (#note)</title>
      <link href="https://www.stefanjudis.com/notes/the-trust-equation/"/>
      <published>2026-01-11T23:00:00+00:00</published>
      <updated>2026-01-11T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/notes/the-trust-equation/</id>
      <category term="note"></category>
        <category term="People"></category>
      
        <category term="Shower thoughts"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>How do you know that you can trust someone?</p>
<p>I struggle to answer this question objectively because trust feels like such a subjective matter. Some people just don't &quot;sit right with me,&quot; and that's okay. I also can't expect that I'm trusted and liked by everyone. That's okay, too.</p>
<p>But why is it so hard to explain why you trust someone or not?</p>
<p>Explaining feelings is hard for many, but I just discovered a helpful tool: <a href="https://www.designative.info/2025/06/02/book-review-trusted-advisor-david-maister-charles-green-robert-galford/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.designative.info%2F2025%2F06%2F02%2Fbook-review-trusted-advisor-david-maister-charles-green-robert-galford%2F')">the trust equation</a>. The formula is like math for feelings — yay!</p>
<p>[Interactive component: visit the article to see it...]</p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>One reason to blog about this was that I could use <a href="https://developer.mozilla.org/en-US/docs/Web/MathML" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FMathML')"><code>MathML</code></a> for the first time (check the source above). That's some funky markup isn't it?</p>
</div><p>Here's a direct quote from the post explaining what all the variables mean:</p>
<blockquote>
<p><strong>Credibility</strong>: What we say and the expertise we bring.</p>
<p><strong>Reliability</strong>: What we do consistently.</p>
<p><strong>Intimacy</strong>: How safe others feel sharing with us.</p>
<p><strong>Self-Orientation</strong>: How much we appear to be acting in our own interest (lower is better).</p>
</blockquote>
<p>Looking back at my own professional experience, this equation makes a ton of sense.</p>
<p>For me, the biggest kicker is reliability. I've worked with too many people promising the world while constantly failing to deliver. It drives me up the wall that overpromising is &quot;normal&quot; for some folks.</p>
<p>In close second place is self-orientation. I've also worked with the classic solo career climber and backstabber. It was clear that I was working with someone who had an agenda that didn't include me or the team. No fun, no trust.</p>
<p>Credibility and intimacy are also important, but not as important for me as the first two.</p>
<p>However, I guess the formula checks out, and I'll definitely come back to it when I need to evaluate why I don't trust someone.</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20The Trust Equation">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Firefox DevTools hides unreferenced CSS variables (#note)</title>
      <link href="https://www.stefanjudis.com/notes/firefox-devtools-unreferenced-css-variables/"/>
      <published>2026-01-09T23:00:00+00:00</published>
      <updated>2026-01-09T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/notes/firefox-devtools-unreferenced-css-variables/</id>
      <category term="note"></category>
        <category term="Firefox"></category>
      
        <category term="CSS"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>Here's a quick and handy addition to the Firefox DevTools.</p>
<p>Whenever you debug CSS that's full of CSS variables, it becomes annoyingly hard to parse everything going on in the DevTools because the custom properties are cluttering <code>:root</code> or <code>*</code> or whatever.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(19,126,220); --color2: rgb(112,139,170); --color3: rgb(236,160,87); --color4: rgb(211,183,155); --color5: rgb(47,62,82);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMjU3Ij48cGF0aCBmaWxsPSIjMmYzZTUyIiBkPSJNMCAwaDMwMHYyNTdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSI0MyIgY3k9Ijg2IiBmaWxsPSIjZmZmIiByeD0iMjkiIHJ5PSIxMTgiLz48ZWxsaXBzZSBjeD0iNDMiIGN5PSI5NSIgZmlsbD0iI2ZmZiIgcng9IjI4IiByeT0iODIiLz48ZWxsaXBzZSBjeD0iNTIiIGN5PSIzIiByeD0iMjU1IiByeT0iMTEiLz48cGF0aCBmaWxsPSIjMGIwZjFmIiBkPSJNMCAxNzVoMjU2djQ1SDB6Ii8+PGVsbGlwc2UgY3g9IjE2NyIgY3k9Ijk0IiBmaWxsPSIjMjkyNjIyIiByeD0iOTgiIHJ5PSIyMTkiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTYgMTE5aDU0djU1SDE2em0xLTEwNGg1M3Y2MEgxN3oiLz48ZWxsaXBzZSBjeD0iNCIgY3k9IjEwMCIgZmlsbD0iIzAwMDAwYyIgcng9IjEyIiByeT0iMTQ3Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="//images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg">
            <picture>
              <source type="image/avif"
                srcset="//images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=avif&fit=scale&q=75&w=300&h=258 300w, //images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=avif&fit=scale&q=75&w=500&h=430 500w, //images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=avif&fit=scale&q=75&w=700&h=602 700w, //images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=avif&fit=scale&q=75&w=900&h=774 900w, //images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=avif&fit=scale&q=75&w=1100&h=946 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="//images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=webp&fit=scale&q=75&w=300&h=258 300w, //images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=webp&fit=scale&q=75&w=500&h=430 500w, //images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=webp&fit=scale&q=75&w=700&h=602 700w, //images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=webp&fit=scale&q=75&w=900&h=774 900w, //images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=webp&fit=scale&q=75&w=1100&h=946 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="860"
                srcset="//images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=jpg&fit=scale&q=75&w=300&h=258 300w, //images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=jpg&fit=scale&q=75&w=500&h=430 500w, //images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=jpg&fit=scale&q=75&w=700&h=602 700w, //images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=jpg&fit=scale&q=75&w=900&h=774 900w, //images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg?fm=jpg&fit=scale&q=75&w=1100&h=946 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="//images.ctfassets.net/f20lfrunubsq/XFm9r7Z1F2TMJk6SGY8C1/827f2e4c4a2dfa344339880609808ffd/inac-css.jpg"
                alt="Chrome DevTools with open CSS panel showing tons of unused custom properties."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Firefox 145 (released Nov 11, 2025) now added a tiny adjustment that helps out massively.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(4,140,243); --color2: rgb(132,140,76); --color3: rgb(244,185,59); --color4: rgb(176,193,207); --color5: rgb(49,61,81);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMjE3Ij48cGF0aCBmaWxsPSIjMzEzZDUxIiBkPSJNMCAwaDMwMHYyMTdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSI0NCIgY3k9Ijc0IiBmaWxsPSIjZmZmIiByeD0iMzYiIHJ5PSI2NyIvPjxlbGxpcHNlIGN4PSI0NCIgY3k9Ijc0IiBmaWxsPSIjZmZmIiByeD0iMzIiIHJ5PSI2NCIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzEyMGYxMyIgdHJhbnNmb3JtPSJyb3RhdGUoLTMuNyAxNjEyLjkgLTMzMjguOCkgc2NhbGUoMTQxLjc2Njg2IDI0NS4yMjczOSkiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTMgMTFoNjN2MTI0SDEzeiIvPjxwYXRoIGZpbGw9IiMwMDAwMTUiIGQ9Im0tMTYtLjEgMjg3IC43LTExNy45IDE0LjgtMTMxLjgtMS41eiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzBjMDAwZCIgdHJhbnNmb3JtPSJtYXRyaXgoLTQwLjc4ODMyIC02Ljc2NDU0IDUuNjAxNjYgLTMzLjc3NjQ4IDQ0LjkgMTY4LjgpIi8+PGVsbGlwc2UgY3g9IjIiIGN5PSI3NCIgZmlsbD0iIzAwMDAwNSIgcng9IjEwIiByeT0iMTY3Ii8+PHBhdGggZmlsbD0iIzZmOWRlZSIgZD0iTTgwIDQwaDUxdjEzSDgweiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="//images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg">
            <picture>
              <source type="image/avif"
                srcset="//images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=avif&fit=scale&q=75&w=300&h=219 300w, //images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=avif&fit=scale&q=75&w=500&h=365 500w, //images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=avif&fit=scale&q=75&w=700&h=511 700w, //images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=avif&fit=scale&q=75&w=900&h=657 900w, //images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=avif&fit=scale&q=75&w=1100&h=803 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="//images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=webp&fit=scale&q=75&w=300&h=219 300w, //images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=webp&fit=scale&q=75&w=500&h=365 500w, //images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=webp&fit=scale&q=75&w=700&h=511 700w, //images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=webp&fit=scale&q=75&w=900&h=657 900w, //images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=webp&fit=scale&q=75&w=1100&h=803 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="730"
                srcset="//images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=jpg&fit=scale&q=75&w=300&h=219 300w, //images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=jpg&fit=scale&q=75&w=500&h=365 500w, //images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=jpg&fit=scale&q=75&w=700&h=511 700w, //images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=jpg&fit=scale&q=75&w=900&h=657 900w, //images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg?fm=jpg&fit=scale&q=75&w=1100&h=803 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="//images.ctfassets.net/f20lfrunubsq/6Xy88dfG6YI4IotLZzcAZ8/c78286b1af4b0e86e7c5a6578e34f084/ff.jpg"
                alt="Firefox DevTools hiding &quot;52 unused CSS properties&quot;."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Love it!</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Firefox DevTools hides unreferenced CSS variables">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>If you don&#39;t care, I don&#39;t care... (#note)</title>
      <link href="https://www.stefanjudis.com/notes/if-you-dont-care-i-dont-care/"/>
      <published>2026-01-06T23:00:00+00:00</published>
      <updated>2026-01-06T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/notes/if-you-dont-care-i-dont-care/</id>
      <category term="note"></category>
        <category term="Tools"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>Jim is, as always, on point.</p>
<blockquote>
<p>My desire to give you constructive feedback is in direct correlation to your effort to care — about your communications, about what you ship, even about what you don't ship.</p>
</blockquote>
<p>Shipping something unfinished, half-assed or broken to &quot;gather feedback&quot; just won't do any good. There is a certain (and often obvious) level of quality that needs to be reached before asking for feedback. If laziness shows, nobody will care...</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20If you don&#39;t care, I don&#39;t care...">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Web Weekly #179 (#blogPost)</title>
      <link href="https://www.stefanjudis.com/blog/web-weekly-179/"/>
      <published>2026-01-05T23:00:00+00:00</published>
      <updated>2026-01-05T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/blog/web-weekly-179/</id>
      <category term="blogPost"></category>
        <category term="Newsletter"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="frohes-neues!-%F0%9F%91%8B" href="#frohes-neues!-%F0%9F%91%8B">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="frohes-neues!-%F0%9F%91%8B">Frohes Neues! 👋</h2></div><p>Do you wonder what the final masonry CSS syntax will look like? Do you use the <code>dialog</code> element to its fullest potential? And are you excited about CSS <code>@scope</code> entering baseline?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <p>Mohamed listens to <a href="https://www.youtube.com/watch?v=CL1EEagmJRw" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DCL1EEagmJRw')">LAW NASYANY</a> and says:</p>
<blockquote>
<p>I listen to this song as it has a great soundtrack that makes you move your body without noticing it.</p>
</blockquote>
</div><p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>six more songs</strong> left in the queue.</p>
<hr aria-hidden="true"><p>I've mentioned a couple of times last year that a Web Weekly redesign is in the making. It only took me a year on and off to start from scratch and finally have a landing page suitable for a Frontend newsletter. <a href="https://webweekly.email/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwebweekly.email%2F')">And here it is</a>!</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(42,135,198); --color2: rgb(96,124,149); --color3: rgb(107,188,235); --color4: rgb(195,190,186); --color5: rgb(102,76,64);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTg5Ij48cGF0aCBmaWxsPSIjNjY0YzQwIiBkPSJNMCAwaDMwMHYxODlIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjExNiIgY3k9IjY5IiByPSIxNzMiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMjkiIGN5PSI3NCIgcj0iMTYxIiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTAzIiBjeT0iMjkiIHI9IjIwMiIgZmlsbD0iI2U5ZmVmZiIvPjxwYXRoIGZpbGw9IiM4NTVmNDYiIGQ9Ik0xNzYuOSAzOC4yIDE3MS43IDk1bDIyLjYtOS44TDIwNS41IDQ1eiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzAwNmJiYSIgdHJhbnNmb3JtPSJtYXRyaXgoNS44NzYxMyAxOC4wODQ4OCAtOC4zNzM0IDIuNzIwNjggMjEyLjcgMTA5LjMpIi8+PGVsbGlwc2UgY3g9IjY4IiBjeT0iNTkiIGZpbGw9IiM4NGI1ZGUiIHJ4PSI1MiIgcnk9IjIxIi8+PHBhdGggZmlsbD0iIzAwMTc4NiIgZD0iTTEwNSAxMDloMjl2OWgtMjl6Ii8+PHBhdGggZmlsbD0iIzJhN2RiNiIgZD0iTTMyIDU3aDEwMXY2SDMyeiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=avif&fit=scale&q=75&w=300&h=190 300w, https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=avif&fit=scale&q=75&w=500&h=318 500w, https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=avif&fit=scale&q=75&w=700&h=445 700w, https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=avif&fit=scale&q=75&w=900&h=572 900w, https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=avif&fit=scale&q=75&w=1100&h=700 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=webp&fit=scale&q=75&w=300&h=190 300w, https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=webp&fit=scale&q=75&w=500&h=318 500w, https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=webp&fit=scale&q=75&w=700&h=445 700w, https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=webp&fit=scale&q=75&w=900&h=572 900w, https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=webp&fit=scale&q=75&w=1100&h=700 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="636"
                srcset="https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=jpg&fit=scale&q=75&w=300&h=190 300w, https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=jpg&fit=scale&q=75&w=500&h=318 500w, https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=jpg&fit=scale&q=75&w=700&h=445 700w, https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=jpg&fit=scale&q=75&w=900&h=572 900w, https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png?fm=jpg&fit=scale&q=75&w=1100&h=700 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/3Zj8z3uBTC5bGe2B5TCwII/0949d1486b7bc8e430fc016a39234e3b/Screenshot_2026-01-06_at_20.55.28.png"
                alt="Web Weekly landing page with the usual character and big and bold headlines."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>It ships with view transitions, container queries, <code>popover</code>, <code>@starting-style</code>, <code>light-dark()</code> and many other new'ish Frontend things I share here in the newsletter. I'm no designer, but I must say I'm very pleased with the new look.</p>
<p>For the RSS folks: there are now also two new RSS feeds. One for the actual newsletter and one for quick links. Check them out!</p>
<p>A special shoutout goes to all the people who participated in the new &quot;wall of love&quot; aka the testimonials section. Thank you Louis, Eva, Wojtek, Chris, Josefine, Khaled, Max, Carlos, Jeremias, Paul, Olivier, Sébastien, Michiel, Dominic, Kristina, Dominik, Johann, Jay, Henry, Gustavo, Owen, Eric, Attila, Martin, Marcel, Gabriel, Emre, Károly, George, Thomas, Matthias, Ivan, Oliver, Tino, Barry, Tim, Stefano, Ekrem, Simon, Schalk, Andy, Patrick, Bart, Mirko, Kilian, Matt, Øystein, Paul, Den, Craig, Sachin, Andreas, Torsten, Lars, Bramus, Craig, Amr, Christian, Mohamed, Anselm. You all rock!</p>
<p>If you want to tell your friends about Web Weekly, want to give a testimonial yourself, or have any feedback on the new site, <a href="mailto:stefan@webweekly.email">let me know</a>. I'm all ears!</p>
<hr aria-hidden="true"><p>And another huge thank you and massive bag of karma points goes to <strong>Jens and Boris</strong> this week. Thank you both for covering a small fraction of the cost it takes to send Web Weekly every week! ❤️</p>
<p>If you enjoy Web Weekly, too, join 32 supporters and support indie publishing on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>. It really makes a difference for me!</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="something-that-made-me-smile-this-week" href="#something-that-made-me-smile-this-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="something-that-made-me-smile-this-week">Something that made me smile this week</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(44,147,251); --color2: rgb(129,148,171); --color3: rgb(100,180,252); --color4: rgb(181,197,216); --color5: rgb(54,54,55);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgODQiPjxwYXRoIGZpbGw9IiMzNjM2MzciIGQ9Ik0wIDBoMzAwdjg0SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxNDgiIGN5PSIzNSIgcj0iMTU2IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZDVlOWZmIiB0cmFuc2Zvcm09Im1hdHJpeCgtMTQ4LjI5NDE4IC0xNi45MzMgMTIuMjQ1MDkgLTEwNy4yMzg4OCAxMzEuNCAyOC45KSIvPjxwYXRoIGZpbGw9IiMwMDdjZmYiIGQ9Ik0yOSA5aDExN3YxNkgyOXoiLz48cGF0aCBmaWxsPSIjZjZlZWViIiBkPSJNMTQ5IDhoODF2NDZoLTgxeiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Im0xMC42LTExLjIgMjIgMjAuNCA5OC41LS43IDk5LjkgMS45eiIvPjxwYXRoIGZpbGw9IiM3NTc2NzciIGQ9Ik0xNzIgNDZoNDh2NWgtNDh6Ii8+PGVsbGlwc2UgY3g9IjE1NyIgY3k9IjMxIiBmaWxsPSIjYThhM2E0IiByeD0iMjA0IiByeT0iNCIvPjxwYXRoIGZpbGw9IiMyZDljZmYiIGQ9Ik0zNiAxMGgxMTF2MTNIMzZ6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=avif&fit=scale&q=75&w=300&h=84 300w, https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=avif&fit=scale&q=75&w=500&h=141 500w, https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=avif&fit=scale&q=75&w=700&h=198 700w, https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=avif&fit=scale&q=75&w=900&h=254 900w, https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=avif&fit=scale&q=75&w=1100&h=311 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=webp&fit=scale&q=75&w=300&h=84 300w, https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=webp&fit=scale&q=75&w=500&h=141 500w, https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=webp&fit=scale&q=75&w=700&h=198 700w, https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=webp&fit=scale&q=75&w=900&h=254 900w, https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=webp&fit=scale&q=75&w=1100&h=311 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="283"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=jpg&fit=scale&q=75&w=300&h=84 300w, https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=jpg&fit=scale&q=75&w=500&h=141 500w, https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=jpg&fit=scale&q=75&w=700&h=198 700w, https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=jpg&fit=scale&q=75&w=900&h=254 900w, https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png?fm=jpg&fit=scale&q=75&w=1100&h=311 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1QbjnkwGSdfpIV6uCiJ88t/aa6af385897c49b74c612d72d906423f/Screenshot_2026-01-06_at_16.34.09.png"
                alt="Mac OS popup dialog representing writing direction and &quot;default&quot;, &quot;right to left&quot; and &quot;left to right&quot; all have the same icon."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Picking icons is tough because they should look good, blend in nicely, convey meaning... and then there's also the question of <strong>whether and when you should use icons</strong> in the first place.</p>
<p>Tonsky's post is a long rant on the new macOS Tahoe icons and I understand that design for an operating system is challenging and that there are always trade-offs to be made, but this icon macOS dialog (👆) made me laugh out loud.</p>
<p>This UI and icon madness can't be true, or can it?</p>
<p><a class="btn btn__small" href="https://tonsky.me/blog/tahoe-icons/">Be speechless</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="no-code" href="#no-code">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="no-code">No code</h2></div><ul>
<li><a href="https://www.seangoedecke.com/bad-code-at-big-companies/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.seangoedecke.com%2Fbad-code-at-big-companies%2F')">How good engineers write bad code at big companies</a></li>
<li><a href="https://idiallo.com/blog/do-i-leave-the-laptop-in-the-office" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fidiallo.com%2Fblog%2Fdo-i-leave-the-laptop-in-the-office')">Do I Leave the Laptop at the Office? A Case Against Returning to Office</a></li>
<li><a href="https://addyosmani.com/blog/21-lessons/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Faddyosmani.com%2Fblog%2F21-lessons%2F')">21 Lessons From 14 Years at Google</a></li>
</ul>
<p>And a special somewhat &quot;no code&quot; highlight: it's wild that posts like <a href="https://simonwillison.net/2025/Dec/18/code-proven-to-work/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fsimonwillison.net%2F2025%2FDec%2F18%2Fcode-proven-to-work%2F')">Your job is to deliver code you have proven to work</a> need to be written today but yet here we are. I published <a href="https://www.stefanjudis.com/notes/simon-willison-on-delivering-ai-generated-code/">my thoughts and commentary about this post on the blog</a>, too.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="attention-to-detail-when-building-ui-components" href="#attention-to-detail-when-building-ui-components">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="attention-to-detail-when-building-ui-components">Attention to detail when building UI components</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(135.59523809523813,135.59523809523813,119.40476190476188); --color2: rgb(124,124,123); --color3: rgb(192.90952380952382,192.90952380952382,184.49047619047616); --color4: rgb(196,196,188); --color5: rgb(68,68,68);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTI3Ij48cGF0aCBmaWxsPSIjNDQ0IiBkPSJNMCAwaDMwMHYxMjdIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE3MSIgY3k9Ijk1IiByPSIxOTYiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxNTQiIGN5PSIzOSIgcj0iMTkwIiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTM4IiBjeT0iNTIiIHI9IjE2MCIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjE1MSIgY3k9IjU3IiByPSIxNjgiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxNDIiIGN5PSI1IiByPSIxNzkiIGZpbGw9IiNmZmYiLz48cGF0aCBmaWxsPSIjNzQ3NDc0IiBkPSJNNjMuNSA0OC41di0zaDU1djN6Ii8+PHBhdGggZmlsbD0iIzY0NjM2MCIgZD0iTTExNCA5OGgyNXYzaC0yNXoiLz48Y2lyY2xlIGN4PSIxOTYiIHI9IjkzIiBmaWxsPSIjZmZmIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=avif&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=avif&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=avif&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=avif&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=avif&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=webp&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=webp&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=webp&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=webp&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=webp&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="426"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=jpg&fit=scale&q=75&w=300&h=127 300w, https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=jpg&fit=scale&q=75&w=500&h=213 500w, https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=jpg&fit=scale&q=75&w=700&h=298 700w, https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=jpg&fit=scale&q=75&w=900&h=383 900w, https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png?fm=jpg&fit=scale&q=75&w=1100&h=469 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4r8eyBKUn51bTCdPNa2Qgh/6efb26cf008b915c018bbb590ad281c8/Screenshot_2026-01-06_at_17.24.57.png"
                alt="Preview of the sonner toast component which nicely stacks when there are multiple toasts."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Emil shared all the considerations going into his <code>Sonner</code> toast library and let me tell you that's some quality work. I love it!</p>
<p><a class="btn btn__small" href="https://emilkowal.ski/ui/building-a-toast-component">Consider the details</a></p>
<p>However, keep in mind that <a href="https://primer.style/accessibility/patterns/accessible-notifications-and-messages/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fprimer.style%2Faccessibility%2Fpatterns%2Faccessible-notifications-and-messages%2F')">toasts come with serious accessibility and UX issues</a> and that there are better ways to give updates.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="there's-a-new-caching-header-in-town" href="#there's-a-new-caching-header-in-town">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="there's-a-new-caching-header-in-town">There's a new caching header in town</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(28,107,242); --color2: rgb(124,140,148); --color3: rgb(129.5825,173.23000000000002,247.8175); --color4: rgb(180,180,188); --color5: rgb(50,66,84);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTE4Ij48cGF0aCBmaWxsPSIjMzI0MjU0IiBkPSJNMCAwaDMwMHYxMThIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjE1MCIgY3k9IjQ5IiByPSIxNzYiIGZpbGw9IiMwNjBjMTYiLz48cGF0aCBmaWxsPSIjNmY3OTc5IiBkPSJNMjIgMjhoMTYydjI0SDIyeiIvPjxlbGxpcHNlIGN4PSIxMDkiIGN5PSI3NiIgZmlsbD0iIzdhN2Q4YiIgcng9Ijg4IiByeT0iNCIvPjxlbGxpcHNlIGN4PSIxMTQiIGN5PSI0NCIgZmlsbD0iIzAwMDAwOSIgcng9IjE3NSIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iMTc0IiBjeT0iMzUiIGZpbGw9IiMwMDAwMDciIHJ4PSIxNzgiIHJ5PSIzIi8+PHBhdGggZmlsbD0iI2NhY2ZjYiIgZD0iTTE5MiA1MS41di01aDQwdjV6Ii8+PHBhdGggZmlsbD0iI2E5YWViMCIgZD0iTTU4IDI4aDE1MXY0SDU4eiIvPjxlbGxpcHNlIGN4PSI3NyIgY3k9Ijg4IiBmaWxsPSIjOGU4ZTliIiByeD0iNTciIHJ5PSIzIi8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=avif&fit=scale&q=75&w=300&h=118 300w, https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=avif&fit=scale&q=75&w=500&h=198 500w, https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=avif&fit=scale&q=75&w=700&h=277 700w, https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=avif&fit=scale&q=75&w=900&h=356 900w, https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=avif&fit=scale&q=75&w=1100&h=436 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=webp&fit=scale&q=75&w=300&h=118 300w, https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=webp&fit=scale&q=75&w=500&h=198 500w, https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=webp&fit=scale&q=75&w=700&h=277 700w, https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=webp&fit=scale&q=75&w=900&h=356 900w, https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=webp&fit=scale&q=75&w=1100&h=436 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="396"
                srcset="https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=jpg&fit=scale&q=75&w=300&h=118 300w, https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=jpg&fit=scale&q=75&w=500&h=198 500w, https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=jpg&fit=scale&q=75&w=700&h=277 700w, https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=jpg&fit=scale&q=75&w=900&h=356 900w, https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png?fm=jpg&fit=scale&q=75&w=1100&h=436 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/6CEvYKg0aRe7Q1UdwpyEZ1/fb6192fd3e0137f8d2ce998c7641e9e6/Screenshot_2026-01-06_at_18.33.37.png"
                alt="URLs with different query params and the subline &quot;Can I cache these URLs as one entry or are they all different?&quot;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Caching was and is one of those web dev things that are hard to get right. Especially when it comes to URL caching, things get messy very quickly because the web is full of random query parameters. How can you tell browsers and CDNs that random <code>utm</code> parameters don't matter and that the cached HTML is fine?</p>
<p>There's a new header in town (<code>No-Vary-Search</code>) and Barry explains why it'll be a big deal. It's Chrome-only for now but &quot;should&quot; be safe to use already.</p>
<p><a class="btn btn__small" href="https://calendar.perfplanet.com/2025/fixing-the-url-params-performance-penalty/">Cache all the things</a></p>
<p>Side note: <a href="https://calendar.perfplanet.com/2025/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fcalendar.perfplanet.com%2F2025%2F')">this year's Web Performance Calendar</a> was outstanding! Every other post was a banger and I'll definitely plug more posts in the upcoming weeks.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="control-the-breaks" href="#control-the-breaks">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="control-the-breaks">Control the breaks</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(154.70000000000002,100.3,100.3); --color2: rgb(140,76,76); --color3: rgb(202.844,174.556,174.556); --color4: rgb(196,164,164); --color5: rgb(60,60,60);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgNzEiPjxwYXRoIGZpbGw9IiMzYzNjM2MiIGQ9Ik0wIDBoMzAwdjcxSDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxMDMiIGN5PSIyOSIgcj0iMTY2IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iNjMiIGN5PSIzNCIgcj0iMTk5IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTM3IiByPSIxNjYiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMjEiIGN5PSIxNiIgcj0iMTQzIiBmaWxsPSIjZmZmIi8+PHBhdGggZmlsbD0iIzVmNDU0NSIgZD0iTTI1IDI5aDE5N3Y0SDI1eiIvPjxlbGxpcHNlIGN4PSIxMTQiIGN5PSIxMiIgZmlsbD0iI2ZmZiIgcng9IjI1NSIgcnk9IjE1Ii8+PGVsbGlwc2UgY3g9IjE0MCIgY3k9IjUxIiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iMTgiLz48cGF0aCBmaWxsPSIjNzU3OTc5IiBkPSJNOTYgMjhoNTJ2NEg5NnoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=avif&fit=scale&q=75&w=300&h=72 300w, https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=avif&fit=scale&q=75&w=500&h=120 500w, https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=avif&fit=scale&q=75&w=700&h=168 700w, https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=avif&fit=scale&q=75&w=900&h=216 900w, https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=avif&fit=scale&q=75&w=1100&h=264 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=webp&fit=scale&q=75&w=300&h=72 300w, https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=webp&fit=scale&q=75&w=500&h=120 500w, https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=webp&fit=scale&q=75&w=700&h=168 700w, https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=webp&fit=scale&q=75&w=900&h=216 900w, https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=webp&fit=scale&q=75&w=1100&h=264 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="240"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=jpg&fit=scale&q=75&w=300&h=72 300w, https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=jpg&fit=scale&q=75&w=500&h=120 500w, https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=jpg&fit=scale&q=75&w=700&h=168 700w, https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=jpg&fit=scale&q=75&w=900&h=216 900w, https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png?fm=jpg&fit=scale&q=75&w=1100&h=264 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4kOEjlCF5qEaU2xNd2yi3a/e4a6ea699ec53d2a09dbe80b5adc9983/Screenshot_2025-12-29_at_16.22.14.png"
                alt="anti&amp;shy;dis&amp;shy;establishmen&amp;shy;taria&amp;shy;nism"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I absolutely loved this post! If you don't know about the <code>wbr</code> element or the <code>&amp;shy;</code> character, you should definitely check it out!</p>
<p><a class="btn btn__small" href="https://htmhell.dev/adventcalendar/2025/15/">Break the words</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-fight-over-masonry-is-over%3F" href="#the-fight-over-masonry-is-over%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-fight-over-masonry-is-over%3F">The fight over masonry is over?</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(172,12,148); --color2: rgb(124,124,124); --color3: rgb(212,151,204); --color4: rgb(226,193,221); --color5: rgb(44.176056338028125,34.4788732394366,118.52112676056339);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgODAiPjxwYXRoIGZpbGw9IiMyYzIyNzYiIGQ9Ik0wIDBoMzAwdjgwSDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxMjciIGN5PSI1MyIgcj0iMTM5IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSBjeD0iMTU1IiBjeT0iMzEiIHI9IjE4MiIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjEzMSIgY3k9IjI1IiByPSIxNDQiIGZpbGw9IiNmZmYiLz48cGF0aCBmaWxsPSIjZmJmOGYzIiBkPSJNNTMuNSAwaDIzMXY2OGgtMjMxeiIvPjxlbGxpcHNlIGN4PSIxNTYiIGN5PSIzNCIgZmlsbD0iI2M5OTVjOSIgcng9IjE0NyIgcnk9IjMiLz48cGF0aCBmaWxsPSIjNzE3MjY4IiBkPSJNMTUgMTNoMzJ2NEgxNXoiLz48cGF0aCBmaWxsPSIjZDY5OGM3IiBkPSJNMjEgMjNoNjl2NUgyMXoiLz48ZWxsaXBzZSBjeD0iNzYiIGN5PSI2NCIgZmlsbD0iI2Y2ZjhmNCIgcng9IjI1NSIgcnk9IjE4Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=avif&fit=scale&q=75&w=300&h=81 300w, https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=avif&fit=scale&q=75&w=500&h=136 500w, https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=avif&fit=scale&q=75&w=700&h=191 700w, https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=avif&fit=scale&q=75&w=900&h=245 900w, https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=avif&fit=scale&q=75&w=1100&h=300 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=webp&fit=scale&q=75&w=300&h=81 300w, https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=webp&fit=scale&q=75&w=500&h=136 500w, https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=webp&fit=scale&q=75&w=700&h=191 700w, https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=webp&fit=scale&q=75&w=900&h=245 900w, https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=webp&fit=scale&q=75&w=1100&h=300 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="273"
                srcset="https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=jpg&fit=scale&q=75&w=300&h=81 300w, https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=jpg&fit=scale&q=75&w=500&h=136 500w, https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=jpg&fit=scale&q=75&w=700&h=191 700w, https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=jpg&fit=scale&q=75&w=900&h=245 900w, https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png?fm=jpg&fit=scale&q=75&w=1100&h=300 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/57yHwLhP4nTdz82RbdbqIV/d3ed821151dee532bb43a04fb574bdb1/Screenshot_2026-01-06_at_20.25.38.png"
                alt=".container {   display: grid-lanes;   grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));   gap: 16px; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>There were many discussions about how and if masonry layouts should come to CSS last year. And it seems the CSS Working Group came to a conclusion? At least, it sounds like it in the Safari release post. We can all now wait for <code>display: grid-lanes</code> to hit a stable browser release or play with Safari's Tech Preview.</p>
<p><a class="btn btn__small" href="https://webkit.org/blog/17660/introducing-css-grid-lanes/">Lay things out</a></p>
<div class="highlightBox margin-top-xl">
        <div class="cornerBubble">
          <svg aria-hidden="true">
            <use xlink:href="/sprite.svg#icon-newsletter"/>
          </svg>
        </div>
        <div class="o-headline-4 semi-bold c-blue-dark"><sparkly-text number-of-sparkles="6" style="--sparkly-text-size: 1.5em;">You're halfway through!</sparkly-text></div><p>Wowza! Would you enjoy getting <a href="https://www.webweekly.email" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.webweekly.email')">Web Weekly</a> straight to your inbox?</p>

        <form class="newsletter-nudge-grid margin-top-m" name="contact" action="/pages/success" method="post" data-netlify="true">
          <label for="newsletter-nudge-email" class="fs-875 semi-bold">Email</label>
          <input id="newsletter-nudge-email" class="input" name="email" type="email" placeholder="signme@up.com" >
          <button class="btn btn__cta">Subscribe</button>
        </form>
      </div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-wonderful-weird-web-%E2%80%93-typatone" href="#the-wonderful-weird-web-%E2%80%93-typatone">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-wonderful-weird-web-%E2%80%93-typatone">The wonderful weird web – Typatone</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(204,135,138); --color2: rgb(164,100,108); --color3: rgb(227,148,148); --color4: rgb(210,191,192); --color5: rgb(51,51,51);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTUxIj48cGF0aCBmaWxsPSIjMzMzIiBkPSJNMCAwaDMwMHYxNTFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEyMCIgY3k9IjU4IiByPSIxNTYiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KDI1MS42NzA5MiA0MS4wNzAwNCAtMTYuMTA0MTQgOTguNjgzNzMgMTM1LjMgOTYuOCkiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KC03Mi4yNTUwOCAxLjk0MDY3IC0zLjkzMTg2IC0xNDYuMzkxMjMgNjAuOCA2Mi42KSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2Y4ODI4NiIgdHJhbnNmb3JtPSJtYXRyaXgoMzMuMDM5NjUgNzIuNjMwOSAtNzcuNzM3NSAzNS4zNjI2MyAyMTQuNSAyNS4zKSIvPjxlbGxpcHNlIGN4PSI1NCIgY3k9Ijg5IiBmaWxsPSIjZmZmIiByeD0iNzgiIHJ5PSI0NyIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2QyYjRiNCIgdHJhbnNmb3JtPSJtYXRyaXgoMi45NTI2IC0zMy40MzY1NSA2OS44ODA4OCA2LjE3MDggMTk5IDkwKSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2VhOTk5YiIgdHJhbnNmb3JtPSJtYXRyaXgoNzMuMjg2MSAtOC4xMTcwOSA2LjYwMDMxIDU5LjU5MTY5IDIwNS42IDgpIi8+PGVsbGlwc2UgY3g9IjUyIiBjeT0iMzUiIGZpbGw9IiNjYmNiY2IiIHJ4PSI4NCIgcnk9IjkiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=avif&fit=scale&q=75&w=300&h=151 300w, https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=avif&fit=scale&q=75&w=500&h=253 500w, https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=avif&fit=scale&q=75&w=700&h=354 700w, https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=avif&fit=scale&q=75&w=900&h=455 900w, https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=avif&fit=scale&q=75&w=1100&h=557 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=webp&fit=scale&q=75&w=300&h=151 300w, https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=webp&fit=scale&q=75&w=500&h=253 500w, https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=webp&fit=scale&q=75&w=700&h=354 700w, https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=webp&fit=scale&q=75&w=900&h=455 900w, https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=webp&fit=scale&q=75&w=1100&h=557 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="506"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=jpg&fit=scale&q=75&w=300&h=151 300w, https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=jpg&fit=scale&q=75&w=500&h=253 500w, https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=jpg&fit=scale&q=75&w=700&h=354 700w, https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=jpg&fit=scale&q=75&w=900&h=455 900w, https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png?fm=jpg&fit=scale&q=75&w=1100&h=557 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1pH2vtGN3rceHcfcFgyHPr/163f9a0e44f2e0fd678144bd80335f59/Screenshot_2026-01-06_at_17.39.22.png"
                alt="A mobile keyboard next to written text."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you're a music nerd, you're going to love this. Typatone transforms your written words into looped tracks. Can you make a song using it? If so, I'd love to hear it!</p>
<p><a class="btn btn__small" href="https://typatone.com/">Type a tone</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til---node-can-load-%60.env%60-files" href="#til---node-can-load-%60.env%60-files">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til---node-can-load-%60.env%60-files">TIL - Node can load <code>.env</code> files</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(33,111,221); --color2: rgb(84,141,165); --color3: rgb(78,187,249); --color4: rgb(183,189,193); --color5: rgb(47,62,80);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY4Ij48cGF0aCBmaWxsPSIjMmYzZTUwIiBkPSJNMCAwaDMwMHYxNjhIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzAwMDQwZSIgdHJhbnNmb3JtPSJtYXRyaXgoLTE2OS43MDEzNCAtNzAuMDE1OTUgNTIuNDc4MDMgLTEyNy4xOTM3NiAxMTMuOCA4OS43KSIvPjxwYXRoIGZpbGw9IiNkZGRjZTMiIGQ9Im04MSAxNS4zIDg0IDEuNHY2bC04NC0xLjR6Ii8+PHBhdGggZmlsbD0iIzhkOTA5ZCIgZD0iTTI3IDEyOWgyMTZ2NkgyN3oiLz48ZWxsaXBzZSBjeD0iODQiIGN5PSI0NCIgZmlsbD0iIzU3NjE2MiIgcng9IjEzMiIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iMjExIiBjeT0iODgiIGZpbGw9IiMwNjE5MjEiIHJ4PSIxMzUiIHJ5PSI0MiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzA2MTIyNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEzMy40IDE2LjYgMTAuNCkgc2NhbGUoNDMuNDI5MTkgODcuMjE4NjYpIi8+PHBhdGggZmlsbD0iIzcyNzY4NCIgZD0iTTg0IDEzaDkxdjEwSDg0eiIvPjxlbGxpcHNlIGN4PSIxMjMiIGN5PSI2OCIgZmlsbD0iIzM0NGU1OCIgcng9IjEwOCIgcnk9IjMiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=avif&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=avif&fit=scale&q=75&w=500&h=281 500w, https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=avif&fit=scale&q=75&w=700&h=394 700w, https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=avif&fit=scale&q=75&w=900&h=506 900w, https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=avif&fit=scale&q=75&w=1100&h=619 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=webp&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=webp&fit=scale&q=75&w=500&h=281 500w, https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=webp&fit=scale&q=75&w=700&h=394 700w, https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=webp&fit=scale&q=75&w=900&h=506 900w, https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=webp&fit=scale&q=75&w=1100&h=619 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="563"
                srcset="https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=jpg&fit=scale&q=75&w=300&h=168 300w, https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=jpg&fit=scale&q=75&w=500&h=281 500w, https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=jpg&fit=scale&q=75&w=700&h=394 700w, https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=jpg&fit=scale&q=75&w=900&h=506 900w, https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png?fm=jpg&fit=scale&q=75&w=1100&h=619 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/5BZIjOtMNLvSaeJ8fJexDK/d4b0e92e5a89fad86322befa2ee2003e/Screenshot_2026-01-06_at_16.22.56.png"
                alt="Screenshot 2026-01-06 at 16.22.56import { loadEnvFile } from &apos;node:process&apos;;  // load .env file with default path (&apos;./.env&apos;) loadEnvFile(); // load .env file with a custom path loadEnvFile(&apos;../../.env&apos;);"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Every single project I've worked on included the <code>dotenv</code> dependency to load <code>.env</code> files in development. This week I learned that Node.js has had this functionality built-in and marked as stable since <code>v24</code>.</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/load-env-files-in-node-js-scripts/">Remove a dependency</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="discover-%60dialog%60" href="#discover-%60dialog%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="discover-%60dialog%60">Discover <code>dialog</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(144.92805755395682,110.0719424460432,110.0719424460432); --color2: rgb(148,76,76); --color3: rgb(197.76258992805754,179.63741007194247,179.63741007194247); --color4: rgb(195,176,176); --color5: rgb(60,60,60);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgNzgiPjxwYXRoIGZpbGw9IiMzYzNjM2MiIGQ9Ik0wIDBoMzAwdjc4SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIHI9IjEiIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0ibWF0cml4KC0xMS42MzA3IC04Ni40OTU3NSAxNzIuNzI3NzMgLTIzLjIyNTk0IDEyNS4zIDMyLjUpIi8+PGNpcmNsZSBjeD0iMTE2IiBjeT0iMzYiIHI9IjE0NSIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjEzMSIgY3k9IjYzIiByPSIxNjIiIGZpbGw9IiNmZmYiLz48ZWxsaXBzZSBjeD0iNzciIGN5PSI0NSIgZmlsbD0iIzdiNzQ3NCIgcng9IjE1MyIgcnk9IjMiLz48ZWxsaXBzZSBjeD0iNzAiIGN5PSIxOSIgZmlsbD0iIzU2NTM1MyIgcng9IjU4IiByeT0iMyIvPjxjaXJjbGUgY3g9IjIzNCIgY3k9IjQxIiByPSIxMjYiIGZpbGw9IiNmZmYiLz48cGF0aCBmaWxsPSIjOTU4MTgxIiBkPSJNMTIyIDE2aDY3djZoLTY3eiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0wIDBoMTd2NjdIMHoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=avif&fit=scale&q=75&w=300&h=78 300w, https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=avif&fit=scale&q=75&w=500&h=131 500w, https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=avif&fit=scale&q=75&w=700&h=184 700w, https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=avif&fit=scale&q=75&w=900&h=236 900w, https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=avif&fit=scale&q=75&w=1100&h=289 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=webp&fit=scale&q=75&w=300&h=78 300w, https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=webp&fit=scale&q=75&w=500&h=131 500w, https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=webp&fit=scale&q=75&w=700&h=184 700w, https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=webp&fit=scale&q=75&w=900&h=236 900w, https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=webp&fit=scale&q=75&w=1100&h=289 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="263"
                srcset="https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=jpg&fit=scale&q=75&w=300&h=78 300w, https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=jpg&fit=scale&q=75&w=500&h=131 500w, https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=jpg&fit=scale&q=75&w=700&h=184 700w, https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=jpg&fit=scale&q=75&w=900&h=236 900w, https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png?fm=jpg&fit=scale&q=75&w=1100&h=289 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/78noJMDUvuSb5JgULdek2S/37c8fa8ab7c307d5041cf7980d906eb0/Screenshot_2026-01-06_at_18.48.56.png"
                alt="document.querySelector(&quot;dialog&quot;).close(); // or document.querySelector(&quot;dialog&quot;).requestClose();"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>If you haven't used the <code>dialog</code> element yet or didn't keep up with the latest feature additions (<code>closedBy</code> or <code>requestClose</code>), Sara summarized what you need to know in one piece!</p>
<p><a class="btn btn__small" href="https://www.htmhell.dev/adventcalendar/2025/9/">Have a dialog</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="css-wrapped-2025" href="#css-wrapped-2025">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="css-wrapped-2025">CSS Wrapped 2025</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(184,129,51); --color2: rgb(98,137,174); --color3: rgb(206,180,136); --color4: rgb(121,180,184); --color5: rgb(68,59,36);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTk0Ij48cGF0aCBmaWxsPSIjNDQzYjI0IiBkPSJNMCAwaDMwMHYxOTRIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzkyYmFkZSIgdHJhbnNmb3JtPSJtYXRyaXgoLTguODMxODggLTYxLjI4OTAxIDgzLjQ2MzEyIC0xMi4wMjcyMiAxMjYgODEuNSkiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwZDQxNzUiIHRyYW5zZm9ybT0icm90YXRlKDE3NC41IDE0LjYgMzQpIHNjYWxlKDQzLjYzMjE5IDE5Ny40NTg1MykiLz48ZWxsaXBzZSBjeD0iMTMyIiBjeT0iODMiIGZpbGw9IiNjMmFiN2MiIHJ4PSIyNiIgcnk9IjQ4Ii8+PHBhdGggZmlsbD0iIzMwMjMzNyIgZD0iTTE2NCA3OGg0NXY4OGgtNDV6Ii8+PGVsbGlwc2UgY3g9IjEyOCIgY3k9IjE0MyIgZmlsbD0iIzI1NGY3OCIgcng9IjUxIiByeT0iMTQiLz48cGF0aCBmaWxsPSIjN2RhZWM3IiBkPSJNNjggMjdoODl2MjZINjh6Ii8+PHBhdGggZmlsbD0iIzE5MjUzMSIgZD0iTTEyNC42IDE0LjQtMTQuOC0uNmwyODMuNC0xLjctOTEuMyAzOS42eiIvPjxwYXRoIGZpbGw9IiNmNGJlNDkiIGQ9Im0xNjIgODEtNTkgMS0yIDI1eiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=avif&fit=scale&q=75&w=300&h=195 300w, https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=avif&fit=scale&q=75&w=500&h=325 500w, https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=avif&fit=scale&q=75&w=700&h=455 700w, https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=avif&fit=scale&q=75&w=900&h=585 900w, https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=avif&fit=scale&q=75&w=1100&h=715 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=webp&fit=scale&q=75&w=300&h=195 300w, https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=webp&fit=scale&q=75&w=500&h=325 500w, https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=webp&fit=scale&q=75&w=700&h=455 700w, https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=webp&fit=scale&q=75&w=900&h=585 900w, https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=webp&fit=scale&q=75&w=1100&h=715 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="650"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=jpg&fit=scale&q=75&w=300&h=195 300w, https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=jpg&fit=scale&q=75&w=500&h=325 500w, https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=jpg&fit=scale&q=75&w=700&h=455 700w, https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=jpg&fit=scale&q=75&w=900&h=585 900w, https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png?fm=jpg&fit=scale&q=75&w=1100&h=715 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4slrWIQLFDcDx6KmIn256c/4047f53ec251af208e056180cb1b2650/Screenshot_2026-01-06_at_19.01.54.png"
                alt="Screenshot 2026-01-06 at 19.01.54d 2025"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Be warned that many CSS features highlighted in this year's CSS wrapped aren't ready for prime time yet because they're Chrome-only, but the site is stunning work and I can't imagine all the work that has gone into building it!</p>
<p>I'll cover most of the new CSS features once they're coming closer to cross-browser support here, but if you're curious about all the countless things coming to CSS, this &quot;short&quot; summary worth a read.</p>
<p><a class="btn btn__small" href="https://chrome.dev/css-wrapped-2025/#customizable-components">Wrap it up!</a></p>
<p>However, if things aren't mission critical and you're cool with partial browser support, knock yourself out! I, for example, <a href="https://una.im/scroll-state-scrolled/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Funa.im%2Fscroll-state-scrolled%2F')">took Una's snippet to automatically hide/show my fixed headers on scroll</a> and it's already deployed on the new Web Weekly site (only visible in Chrome Canary).</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="the-outline-algorithm-is-officially-gone" href="#the-outline-algorithm-is-officially-gone">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="the-outline-algorithm-is-officially-gone">The outline algorithm is officially gone</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(56.66666666666669,84.99999999999991,198.33333333333331); --color2: rgb(124,132,140); --color3: rgb(241,243,251); --color4: rgb(180,188,194); --color5: rgb(20,28,36);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgNzUiPjxwYXRoIGZpbGw9IiMxNDFjMjQiIGQ9Ik0wIDBoMzAwdjc1SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48cGF0aCBmaWxsPSIjNTU1OTYwIiBkPSJtMjI0LjcgNTAuMy0xOTcgMy40LS40LTI4IDE5Ny0zLjR6Ii8+PHBhdGggZmlsbD0iIzk5OWRhMyIgZD0iTTExIDEyaDExNXYzSDExeiIvPjxwYXRoIGZpbGw9IiM2Zjc1N2MiIGQ9Ik03NiA0OWgxNzF2M0g3NnoiLz48ZWxsaXBzZSBjeD0iOTgiIGN5PSIyNSIgZmlsbD0iIzY4NmU3NSIgcng9Ijk2IiByeT0iMiIvPjxwYXRoIGZpbGw9IiM2MjY3NmUiIGQ9Ik0yMTkgMzdoMTd2OWgtMTd6Ii8+PHBhdGggZmlsbD0iIzczNzk4MCIgZD0iTTExIDM3aDE1MXYySDExeiIvPjxlbGxpcHNlIGN4PSI3NyIgY3k9IjM1IiBmaWxsPSIjMDEwNjBlIiByeD0iMTYxIiByeT0iMiIvPjxlbGxpcHNlIGN4PSI5NiIgY3k9IjQxIiBmaWxsPSIjMDQwOTExIiByeD0iMTYyIiByeT0iMiIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=avif&fit=scale&q=75&w=300&h=75 300w, https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=avif&fit=scale&q=75&w=500&h=126 500w, https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=avif&fit=scale&q=75&w=700&h=177 700w, https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=avif&fit=scale&q=75&w=900&h=227 900w, https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=avif&fit=scale&q=75&w=1100&h=278 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=webp&fit=scale&q=75&w=300&h=75 300w, https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=webp&fit=scale&q=75&w=500&h=126 500w, https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=webp&fit=scale&q=75&w=700&h=177 700w, https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=webp&fit=scale&q=75&w=900&h=227 900w, https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=webp&fit=scale&q=75&w=1100&h=278 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="253"
                srcset="https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=jpg&fit=scale&q=75&w=300&h=75 300w, https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=jpg&fit=scale&q=75&w=500&h=126 500w, https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=jpg&fit=scale&q=75&w=700&h=177 700w, https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=jpg&fit=scale&q=75&w=900&h=227 900w, https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png?fm=jpg&fit=scale&q=75&w=1100&h=278 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/i9B1vZxvYDfGmqP6iVzUj/ca551fe227280bf5f41e52c7138c250c/Screenshot_2026-01-06_at_17.56.45.png"
                alt="@namespace url(http://www.w3.org/1999/xhtml);  x h1 { margin-block-start: 0.83em; margin-block-end: 0.83em; font-size: 1.50em; } x x h1 { margin-block-start: 1.00em; margin-block-end: 1.00em; font-size: 1.17em; }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>Have you seen this CSS monstrosity before? These user-agent styles are the leftovers of the document outline algorithm that (unfortunately) never went anywhere. If you want to learn more about it, Martin shares all the details.</p>
<p><a class="btn btn__small" href="https://www.tempertemper.net/blog/the-final-nail-in-the-html5-document-outline-coffin">Understand the outline</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="random-mdn-%E2%80%93-%60document.images%60" href="#random-mdn-%E2%80%93-%60document.images%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="random-mdn-%E2%80%93-%60document.images%60">Random MDN – <code>document<wbr>.images</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(212,14,67); --color2: rgb(81,164,116); --color3: rgb(227,146,171); --color4: rgb(186,197,197); --color5: rgb(51,51,51);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTAxIj48cGF0aCBmaWxsPSIjMzMzIiBkPSJNMCAwaDMwMHYxMDFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2ZmZiIgdHJhbnNmb3JtPSJtYXRyaXgoLTExLjEyNTI2IDE0Mi4wNjg3NyAtMTczLjY3MTgyIC0xMy42MDAwNiAxMTIuMiA5LjYpIi8+PGVsbGlwc2UgY3g9IjEzNCIgY3k9IjQwIiBmaWxsPSIjZmZmIiByeD0iMTcwIiByeT0iODYiLz48Y2lyY2xlIGN4PSIxMzciIGN5PSIyOCIgcj0iMTYzIiBmaWxsPSIjZmZmIi8+PHBhdGggZmlsbD0iIzViNjk3NyIgZD0iTTQ1IDE3aDEyM3Y0SDQ1eiIvPjxwYXRoIGZpbGw9IiM4MjlmOTMiIGQ9Ik0zNyAyOWgxMTh2NUgzN3oiLz48ZWxsaXBzZSBjeD0iOTYiIGN5PSI0NCIgZmlsbD0iIzgyOWQ4ZSIgcng9IjY4IiByeT0iMyIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2Y0ZjZmYSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEzMi41ODM0MiA5OC4xMDY1NyAtMzAuMTMyMTMgLTQwLjcyMTIzIDIxOS42IDU3LjYpIi8+PGVsbGlwc2UgY3g9IjY2IiBjeT0iNzEiIGZpbGw9IiNmMWYzZjYiIHJ4PSIxNDYiIHJ5PSIyNCIvPjwvZz48L3N2Zz4=');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=avif&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=avif&fit=scale&q=75&w=500&h=171 500w, https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=avif&fit=scale&q=75&w=700&h=240 700w, https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=avif&fit=scale&q=75&w=900&h=308 900w, https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=avif&fit=scale&q=75&w=1100&h=377 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=webp&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=webp&fit=scale&q=75&w=500&h=171 500w, https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=webp&fit=scale&q=75&w=700&h=240 700w, https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=webp&fit=scale&q=75&w=900&h=308 900w, https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=webp&fit=scale&q=75&w=1100&h=377 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="343"
                srcset="https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=jpg&fit=scale&q=75&w=300&h=102 300w, https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=jpg&fit=scale&q=75&w=500&h=171 500w, https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=jpg&fit=scale&q=75&w=700&h=240 700w, https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=jpg&fit=scale&q=75&w=900&h=308 900w, https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png?fm=jpg&fit=scale&q=75&w=1100&h=377 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/4yc1l8nfse89dpQkB0SXrL/26ffdfd3614a77f505a2553d0ace0adf/Screenshot_2026-01-06_at_19.17.43.png"
                alt="for (const image of document.images) {   if (image.src === &quot;banner.gif&quot;) {     console.log(&quot;Found the banner&quot;);   } }"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Here's some DOM trivia; did you know that you can access loaded images via <code>document<wbr>.images</code>? Well, now you do...</p>
<p><a class="btn btn__small" href="https://developer.mozilla.org/en-US/docs/Web/API/Document/images">Inspect the images</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="til-recap-%E2%80%93-%60visibility%60-surprises" href="#til-recap-%E2%80%93-%60visibility%60-surprises">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="til-recap-%E2%80%93-%60visibility%60-surprises">TIL recap – <code>visibility</code> surprises</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(232,187,100); --color2: rgb(125,149,107); --color3: rgb(130,213,245); --color4: rgb(188,188,196); --color5: rgb(50,76,92);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgODkiPjxwYXRoIGZpbGw9IiMzMjRjNWMiIGQ9Ik0wIDBoMzAwdjg5SDB6Ii8+PGcgZmlsbC1vcGFjaXR5PSIuNSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLjYgLjYpIHNjYWxlKDEuMTcxODgpIj48Y2lyY2xlIGN4PSIxNzAiIGN5PSIxNyIgcj0iMjI3Ii8+PGNpcmNsZSByPSIxIiBmaWxsPSIjMDAxMTFiIiB0cmFuc2Zvcm09Im1hdHJpeCgxMDkuNTg5NDUgLTE2Ny44MjQ2IDgyLjc2MjY2IDU0LjA0NCAyMDYuNSA3Mi40KSIvPjxwYXRoIGZpbGw9IiM5OTgyOGEiIGQ9Ik0yOCA0MmgxMDh2NEgyOHoiLz48ZWxsaXBzZSBjeD0iMjEiIGN5PSI1IiBmaWxsPSIjMDAwZjE4IiByeD0iMTQ3IiByeT0iMTMiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiM1ZTU3NDciIHRyYW5zZm9ybT0ibWF0cml4KDU2LjEzNCAwIDAgMy4wMzQyIDYyLjYgMzIuMSkiLz48ZWxsaXBzZSBjeD0iMTgxIiBjeT0iMjAiIGZpbGw9IiM0MjVjNmEiIHJ4PSI1NSIgcnk9IjIiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMwMTExMWIiIHRyYW5zZm9ybT0ibWF0cml4KC02Ni41NDk4MyAxMC42MjgzNSAtMi4zMDY3IC0xNC40NDM1IDc5LjUgNjYuMykiLz48cGF0aCBmaWxsPSIjN2U0YzU3IiBkPSJNMjIgNTNoMzd2NUgyMnoiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=avif&fit=scale&q=75&w=300&h=90 300w, https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=avif&fit=scale&q=75&w=500&h=150 500w, https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=avif&fit=scale&q=75&w=700&h=210 700w, https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=avif&fit=scale&q=75&w=900&h=270 900w, https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=avif&fit=scale&q=75&w=1100&h=330 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=webp&fit=scale&q=75&w=300&h=90 300w, https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=webp&fit=scale&q=75&w=500&h=150 500w, https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=webp&fit=scale&q=75&w=700&h=210 700w, https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=webp&fit=scale&q=75&w=900&h=270 900w, https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=webp&fit=scale&q=75&w=1100&h=330 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="300"
                srcset="https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=jpg&fit=scale&q=75&w=300&h=90 300w, https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=jpg&fit=scale&q=75&w=500&h=150 500w, https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=jpg&fit=scale&q=75&w=700&h=210 700w, https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=jpg&fit=scale&q=75&w=900&h=270 900w, https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png?fm=jpg&fit=scale&q=75&w=1100&h=330 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/7H72fELugBBN7pZ2WpYzsA/6235699599de1b41ef45aaa309c88d7b/Screenshot_2026-01-06_at_20.11.22.png"
                alt="&amp;lt;!-- Hide the button but still show the span --&amp;gt; &amp;lt;button type=&amp;quot;button&amp;quot;&amp;gt;   &amp;lt;span&amp;gt;Do something&amp;lt;/span&amp;gt; &amp;lt;/button&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>What happens if you nest elements with different CSS <code>visibility</code>? Can elements be visible while being inside elements with <code>visibility: hidden;</code>? Yes, they can.</p>
<p>I think this is terribly confusing and you can learn more about it on the blog.</p>
<p><a class="btn btn__small" href="https://www.stefanjudis.com/today-i-learned/elements-can-be-visible-even-though-their-parent-has-set-visibility-hidden/">Be confused</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="new-on-baseline---%60%40scope%60" href="#new-on-baseline---%60%40scope%60">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="new-on-baseline---%60%40scope%60">New on baseline - <code>@scope</code></h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(202,76,24); --color2: rgb(164,141,97); --color3: rgb(251,251,179); --color4: rgb(201,201,142); --color5: rgb(84,84,60);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTY0Ij48cGF0aCBmaWxsPSIjNTQ1NDNjIiBkPSJNMCAwaDMwMHYxNjRIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjEzMiIgY3k9Ijk4IiByPSIxODUiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMzMiIGN5PSI3NiIgcj0iMTU5IiBmaWxsPSIjZmZmIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmIiB0cmFuc2Zvcm09Im1hdHJpeCgxODcuOTgxNzEgLTI4Ljc2NTI0IDIxLjA5MjIgMTM3LjgzODEyIDE1Ni4zIDYwLjUpIi8+PGNpcmNsZSByPSIxIiBmaWxsPSIjZmZmZmZkIiB0cmFuc2Zvcm09InJvdGF0ZSgzMC44IC0xMTkgMzMwLjgpIHNjYWxlKDE5MS4yOTc2NyAxNzcuMTM0NTUpIi8+PGVsbGlwc2UgY3g9Ijc3IiBjeT0iMjgiIGZpbGw9IiNmOGY4OTIiIHJ4PSIxMTgiIHJ5PSI1Ii8+PGVsbGlwc2UgY3g9IjExMiIgY3k9IjgzIiBmaWxsPSIjYjQ5YWE1IiByeD0iNzQiIHJ5PSIyIi8+PHBhdGggZmlsbD0iIzcxNzEzZSIgZD0iTTI2IDI3aDIxdjVIMjZ6Ii8+PHBhdGggZmlsbD0iI2NkY2RkMCIgZD0ibTQyLjkgNjMuNiA2NC0xLjIuMiAxNC02NCAxLjJ6Ii8+PC9nPjwvc3ZnPg==');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=avif&fit=scale&q=75&w=300&h=165 300w, https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=avif&fit=scale&q=75&w=500&h=275 500w, https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=avif&fit=scale&q=75&w=700&h=385 700w, https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=avif&fit=scale&q=75&w=900&h=495 900w, https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=avif&fit=scale&q=75&w=1100&h=605 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=webp&fit=scale&q=75&w=300&h=165 300w, https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=webp&fit=scale&q=75&w=500&h=275 500w, https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=webp&fit=scale&q=75&w=700&h=385 700w, https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=webp&fit=scale&q=75&w=900&h=495 900w, https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=webp&fit=scale&q=75&w=1100&h=605 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="550"
                srcset="https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=jpg&fit=scale&q=75&w=300&h=165 300w, https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=jpg&fit=scale&q=75&w=500&h=275 500w, https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=jpg&fit=scale&q=75&w=700&h=385 700w, https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=jpg&fit=scale&q=75&w=900&h=495 900w, https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png?fm=jpg&fit=scale&q=75&w=1100&h=605 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/37aT6dv1jRPLOeXTsjkarx/0086aa8c230e5139345489441a62ca95/Screenshot_2026-01-06_at_19.44.43.png"
                alt="&amp;lt;main&amp;gt;   &amp;lt;style&amp;gt; @scope { /* Scope root */ :scope { /* Selects the &amp;lt;main&amp;gt; */ /* &amp;lt;header&amp;gt;/&amp;lt;footer&amp;gt; within scope root */ header, footer { background: rgb(from green r g b / 30%); } } } &amp;lt;/style&amp;gt; &amp;lt;/main&amp;gt;"
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>With Firefox 146 (released Dec 9), <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@scope" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FCSS%2FReference%2FAt-rules%2F%40scope')"><code>@scope</code></a> made it into baseline. It's a very complex topic and I can't say I totally get it all, but I'm extremely excited about the ability to use inline <code>style</code> elements to scope component styles (👆).</p>
<p>Daniel gives a good overview of what you need to know.</p>
<p><a class="btn btn__small" href="https://frontendmasters.com/blog/how-to-scope-css-now-that-its-baseline/">Scope your styles</a></p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="three-valuable-projects-to-have-a-look-at" href="#three-valuable-projects-to-have-a-look-at">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="three-valuable-projects-to-have-a-look-at">Three valuable projects to have a look at</h2></div><ul>
<li><a href="https://github.com/gibbok/typescript-book" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fgibbok%2Ftypescript-book')">gibbok/typescript-book</a> – A free and concise TypeScript book.</li>
<li><a href="https://github.com/Epistates/treemd" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2FEpistates%2Ftreemd')">Epistates/treemd</a> – A (TUI/CLI) markdown navigator.</li>
<li><a href="https://github.com/karol-broda/snitch" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fkarol-broda%2Fsnitch')">karol-broda/snitch</a> – A prettier way to inspect network connections.</li>
</ul>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="a-new-tiny-helper" href="#a-new-tiny-helper">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="a-new-tiny-helper">A new Tiny Helper</h2></div><p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(127.5,127.5,127.5); --color2: rgb(129,129,129); --color3: rgb(188.7,188.7,188.7); --color4: rgb(190,190,190); --color5: rgb(68,68,68);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTgxIj48cGF0aCBmaWxsPSIjNDQ0IiBkPSJNMCAwaDMwMHYxODFIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxjaXJjbGUgY3g9IjIyNiIgY3k9IjgyIiByPSI0MiIgZmlsbD0iI2Q2ZDZkNiIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iI2JiYiIgdHJhbnNmb3JtPSJtYXRyaXgoLTUxLjAwMzcxIDI3LjI2NjM4IC0xNS4xOTA1NiAtMjguNDE1MDMgODcgOTcuNCkiLz48Y2lyY2xlIHI9IjEiIHRyYW5zZm9ybT0ibWF0cml4KDEyNC4zNTAzNSAtMy4yMDgyNiAuNjM1MDEgMjQuNjEyNyAxNTMgMTU0KSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzAzMDMwMyIgdHJhbnNmb3JtPSJtYXRyaXgoNy43MTgwNyAtNDIuNTcyNjIgMTQuNTAxNSAyLjYyOSAxNjQuMyA3Ny4zKSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzdmN2Y3ZiIgdHJhbnNmb3JtPSJtYXRyaXgoLTMyLjY5NDA0IC0zLjg3ODg3IDQuNTgzNzEgLTM4LjYzNDk3IDQ5LjYgODkuNSkiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiMxMzEzMTMiIHRyYW5zZm9ybT0ibWF0cml4KDEzMS4wMzcyOSAtNTEuNzE1OSAxMS42NTQwOCAyOS41MjkgNjggMCkiLz48Y2lyY2xlIHI9IjEiIGZpbGw9IiNiZGJkYmQiIHRyYW5zZm9ybT0ibWF0cml4KDM2LjQyNTMzIC0xNy42MDA2MSA1Ljg3NCAxMi4xNTY1MyA5Ni41IDEwNy42KSIvPjxjaXJjbGUgcj0iMSIgZmlsbD0iIzUxNTE1MSIgdHJhbnNmb3JtPSJtYXRyaXgoNDMuMDY0MSAtMjUuMDIyODYgMTEuMTI0MjQgMTkuMTQ0NyAxMTUgNTQuMSkiLz48L2c+PC9zdmc+');
        ">
          <a href="https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png">
            <picture>
              <source type="image/avif"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=avif&fit=scale&q=75&w=300&h=181 300w, https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=avif&fit=scale&q=75&w=500&h=303 500w, https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=avif&fit=scale&q=75&w=700&h=424 700w, https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=avif&fit=scale&q=75&w=900&h=545 900w, https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=avif&fit=scale&q=75&w=1100&h=667 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=webp&fit=scale&q=75&w=300&h=181 300w, https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=webp&fit=scale&q=75&w=500&h=303 500w, https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=webp&fit=scale&q=75&w=700&h=424 700w, https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=webp&fit=scale&q=75&w=900&h=545 900w, https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=webp&fit=scale&q=75&w=1100&h=667 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="606"
                srcset="https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=jpg&fit=scale&q=75&w=300&h=181 300w, https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=jpg&fit=scale&q=75&w=500&h=303 500w, https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=jpg&fit=scale&q=75&w=700&h=424 700w, https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=jpg&fit=scale&q=75&w=900&h=545 900w, https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png?fm=jpg&fit=scale&q=75&w=1100&h=667 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="https://images.ctfassets.net/f20lfrunubsq/1J02rr1w8VzutIvcLa0UjO/97916da07cf4d27bae1fa4a932347e19/Screenshot_2026-01-06_at_19.38.13.png"
                alt="A dithered image of a knight."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>I just realized that I'm super into dithered images and I might check if I can bring them into the new Web Weekly site somehow. With this week's helper, you can create these image effects without opening Photoshop or the like.</p>
<p><a class="btn btn__small" href="https://ditherimage.online">Make your images fancy</a></p>
<div class="highlightBox info margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-info"/>
            </svg>
          </div>
        

      
      <p>Find more single-purpose online tools on <a href="https://tiny-helpers.dev/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Ftiny-helpers.dev%2F')">tiny-helpers.dev</a>.</p>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="thought-of-the-week" href="#thought-of-the-week">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="thought-of-the-week">Thought of the week</h2></div><p>I'm more of an AI skeptic because I value human work. I value people who put in the work. And I'm worried. Scratch that, I'm scared. Wherever we're heading and whatever &quot;AI&quot; will mean for us, our jobs, or the world, I'm terrified. And I keep thinking about <a href="https://joshcollinsworth.com/blog/sloptimism" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fjoshcollinsworth.com%2Fblog%2Fsloptimism')">the well-phrased points Josh makes on his blog</a>.</p>
<p>Today's AI excitement is a matter of privilege.</p>
<div class="highlightBox quote margin-top-xl margin-bottom-xl">
      
          <div class="cornerBubble">
            <svg aria-hidden="true">
              <use xlink:href="/sprite.svg#icon-quote"/>
            </svg>
          </div>
        

      
      <blockquote>
<p>AI optimism requires you to see yourself and your loved ones as safe from AI.</p>
</blockquote>
</div><div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="did-you-learn-something-from-this-issue%3F" href="#did-you-learn-something-from-this-issue%3F">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="did-you-learn-something-from-this-issue%3F">Did you learn something from this issue?</h2></div><p>❤️ If so, <strong>join 32 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.patreon.com%2Fstefanjudis')">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgithub.com%2Fsponsors%2Fstefanjudis%2F')">GitHub Sponsors</a>.</p>
<div class="heading-wrapper">
      <a class="margin-left-s text-no-underline" aria-label="Link to heading" aria-describedby="this-is-all%2C-friends!" href="#this-is-all%2C-friends!">
        <svg class="icon" aria-hidden="true">
          <use xlink:href="/sprite.svg#icon-link"/>
        </svg>
      </a>
      <h2 id="this-is-all%2C-friends!">This is all, friends!</h2></div><p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr aria-hidden="true"><p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Web Weekly #179">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>Automatically load .env files in Node.js scripts (#tilPost)</title>
      <link href="https://www.stefanjudis.com/today-i-learned/load-env-files-in-node-js-scripts/"/>
      <published>2026-01-05T23:00:00+00:00</published>
      <updated>2026-01-05T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/today-i-learned/load-env-files-in-node-js-scripts/</id>
      <category term="tilPost"></category>
        <category term="NodeJS"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>Node.js continues to follow the lead of competing runtimes and implements more and more userland features. Loading <code>.env</code> files was one of these features that's been solved in userland (<a href="https://www.npmjs.com/package/dotenv" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.npmjs.com%2Fpackage%2Fdotenv')">dotenv has 46m weekly downloads</a>) since I started writing Node.js code almost 15 years ago.</p>
<p>Today I learned that Node.js not only added support for loading environment files from the command line with the <a href="https://nodejs.org/api/cli.html#--env-filefile" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fnodejs.org%2Fapi%2Fcli.html%23--env-filefile')"><code>--env-file</code></a> and <a href="https://nodejs.org/api/cli.html#--env-file-if-existsfile" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fnodejs.org%2Fapi%2Fcli.html%23--env-file-if-existsfile')"><code>--env-file-if-exists</code></a> flags, but also added a <a href="https://nodejs.org/api/process.html#processloadenvfilepath" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fnodejs.org%2Fapi%2Fprocess.html%23processloadenvfilepath')">new <code>loadEnvFile()</code> method</a> to load <code>.env</code> files right in your scripts, similar to how <code>dotenv</code> does it. The new method is marked stable since Node.js v24.</p>
<pre class="language-javascript"><code class="language-javascript"><span class="token keyword">import</span> <span class="token punctuation">{</span> loadEnvFile <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'node:process'</span><span class="token punctuation">;</span>

<span class="token comment">// load .env file with default path ('./.env')</span>
<span class="token function">loadEnvFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// load .env file with a custom path</span>
<span class="token function">loadEnvFile</span><span class="token punctuation">(</span><span class="token string">'../../.env'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre>
<p>One thing to watch out for, though, is that <code>loadEnvFile()</code> throws if the <code>.env</code> file doesn't exist, which is usually the case in production environments. But that's no problem, and I wrapped it into a small utility when I was removing <code>dotenv</code> from one of my projects.</p>
<pre class="language-javascript"><code class="language-javascript"><span class="token keyword">import</span> <span class="token punctuation">{</span> loadEnvFile <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">'node:process'</span><span class="token punctuation">;</span>

<span class="token keyword">export</span> <span class="token keyword">function</span> <span class="token function">safeLoadEnvFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token keyword">void</span> <span class="token punctuation">{</span>
  <span class="token keyword">try</span> <span class="token punctuation">{</span>
    <span class="token function">loadEnvFile</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span>error<span class="token punctuation">)</span> <span class="token punctuation">{</span>
    <span class="token comment">// In prod environments there's usually no `.env` file.</span>
    <span class="token comment">// Ignore the error thrown if the file doesn't exist.</span>
  <span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre>
<p>I love seeing Node.js moving forward!</p>
<p>Edit: If you're looking for a more advanced snippet to bring into your projects, <a href="https://gist.github.com/franky47/9ce6eaf80b4c74b63988370b7c39fd23" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fgist.github.com%2Ffranky47%2F9ce6eaf80b4c74b63988370b7c39fd23')">François shared an environment-aware way to load <code>.env</code> files</a>.</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20Automatically load .env files in Node.js scripts">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
    
    <entry>
      <title>A ready-to-use diff component (#note)</title>
      <link href="https://www.stefanjudis.com/notes/a-ready-to-use-diff-component/"/>
      <published>2026-01-02T23:00:00+00:00</published>
      <updated>2026-01-02T23:00:00+00:00</updated>
      <id>https://www.stefanjudis.com/notes/a-ready-to-use-diff-component/</id>
      <category term="note"></category>
        <category term="Tools"></category>
      
      <content type="html">
        <![CDATA[
          <div class="markdown"><p>I just stumbled over this package: <a href="https://www.npmjs.com/package/@pierre/diffs" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fwww.npmjs.com%2Fpackage%2F%40pierre%2Fdiffs')"><code>@pierre/diffs</code></a>.</p>
<blockquote>
<p><code>@pierre/diffs</code> is an open source diff and code rendering library. It's built on Shiki for syntax highlighting and theming, is super customizable, and comes packed with features.</p>
</blockquote>
<p>The package just hit <code>v1</code> and seems to be pretty new. <a href="https://diffs.com" style="--image-url: url('https://avatar.stefanjudis.com/https%3A%2F%2Fdiffs.com')">The docs</a> live on <code>diffs<wbr>.com</code> (no idea how one could snatch this domain in 2026) and it looks amazing.</p>
<p>
      <div class="sqip-container margin-top-l margin-bottom-l">
        <figure class="sqip-image" style="
          --color1: rgb(243,164,100); --color2: rgb(173,122,79); --color3: rgb(158,106,235); --color4: rgb(150,191,209); --color5: rgb(52,47,80);
          --sqip-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMDAgMTg4Ij48cGF0aCBmaWxsPSIjMzQyZjUwIiBkPSJNMCAwaDMwMHYxODhIMHoiLz48ZyBmaWxsLW9wYWNpdHk9Ii41IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSguNiAuNikgc2NhbGUoMS4xNzE4OCkiPjxlbGxpcHNlIGN4PSIxMjUiIGN5PSI4IiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iMTYiLz48ZWxsaXBzZSBjeD0iMTMzIiBjeT0iMTU3IiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iNyIvPjxlbGxpcHNlIGN4PSIyIiBjeT0iNjIiIGZpbGw9IiNmZmYiIHJ4PSI5IiByeT0iMTYwIi8+PGVsbGlwc2UgY3g9IjI1MiIgY3k9IjgwIiBmaWxsPSIjZmZmIiByeD0iNyIgcnk9IjE1NyIvPjxlbGxpcHNlIGN4PSIxMTEiIGN5PSI5IiBmaWxsPSIjZmZmIiByeD0iMjU1IiByeT0iMTQiLz48Y2lyY2xlIHI9IjEiIHRyYW5zZm9ybT0ibWF0cml4KC03NC40MTg2MyAtMzUuMDE4NzUgMjMuNTgyNTcgLTUwLjExNTUyIDg3LjcgODMuNikiLz48cGF0aCBmaWxsPSIjMDAwYzAwIiBkPSJtMTYxLjMgMjUgODItMi45IDMuNCA5Ny04MiAyLjh6Ii8+PGVsbGlwc2UgY3g9IjExNiIgY3k9IjE1OCIgZmlsbD0iI2ZmZiIgcng9IjI1NSIgcnk9IjgiLz48L2c+PC9zdmc+');
        ">
          <a href="//images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png">
            <picture>
              <source type="image/avif"
                srcset="//images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=avif&fit=scale&q=75&w=300&h=189 300w, //images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=avif&fit=scale&q=75&w=500&h=315 500w, //images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=avif&fit=scale&q=75&w=700&h=441 700w, //images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=avif&fit=scale&q=75&w=900&h=567 900w, //images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=avif&fit=scale&q=75&w=1100&h=693 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <source type="image/webp"
                srcset="//images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=webp&fit=scale&q=75&w=300&h=189 300w, //images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=webp&fit=scale&q=75&w=500&h=315 500w, //images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=webp&fit=scale&q=75&w=700&h=441 700w, //images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=webp&fit=scale&q=75&w=900&h=567 900w, //images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=webp&fit=scale&q=75&w=1100&h=693 1100w"
                sizes="(max-width: 50em) 98vw, 700px">
              <img width="1000" height="630"
                srcset="//images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=jpg&fit=scale&q=75&w=300&h=189 300w, //images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=jpg&fit=scale&q=75&w=500&h=315 500w, //images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=jpg&fit=scale&q=75&w=700&h=441 700w, //images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=jpg&fit=scale&q=75&w=900&h=567 900w, //images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png?fm=jpg&fit=scale&q=75&w=1100&h=693 1100w"
                sizes="(max-width: 50em) 98vw, 700px"
                src="//images.ctfassets.net/f20lfrunubsq/4R5BUqZIMxOniy7LOh7uqJ/0fd1f7771fe1b7b90743e05bec331026/Screenshot_2026-01-03_at_12.08.00.png"
                alt="Diff interface with several controls."
                loading="lazy"
                onload="this.classList.add('kf-fade-in')">
            </picture>
          </a>
        </figure>
      </div>
    </p>
<p>It comes as a React and Vanilla JS component, supports server-side rendering, and the configuration options look solid.</p>
<p>Disclaimer: I haven't tried <code>diffs</code> but I can imagine that I will take it as a starter for this blog eventually.</p>
</div>

          <hr>
          <a href="mailto:stefanjudis@gmail.com?subject=Re%3A%20A ready-to-use diff component">
            Reply to Stefan
          </a>
        ]]>

      </content>
    </entry>
</feed>
