<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="https://umn7fc98gj7rc.julianrbryant.com/dc/elements/1.1/" xmlns:content="https://umn7fc98gj7rc.julianrbryant.com/rss/1.0/modules/content/" xmlns:atom="https://umn0mtkzgkj46tygt32g.julianrbryant.com/2005/Atom" version="2.0" xmlns:media="https://umn18u57gkvbkvxr3w.julianrbryant.com/mrss/">
    <channel>
        <title><![CDATA[Adam Argyle]]></title>
        <description><![CDATA[RSS Feed for Adam Argyle: Web design & development tips & tricks: CSS, JS, HTML, Design, & UX.]]></description>
        <link>https://un5w0at6q75xee8.julianrbryant.com</link>
        <image>
            <url>https://un5w0at6q75xee8.julianrbryant.com/rss-icon.png</url>
            <title>Adam Argyle</title>
            <link>https://un5w0at6q75xee8.julianrbryant.com</link>
        </image>
        <generator>RSS for Node</generator>
        <lastBuildDate>Sat, 04 Apr 2026 22:58:13 GMT</lastBuildDate>
        <atom:link href="https://un5w0at6q75xee8.julianrbryant.com/rss.xml" rel="self" type="application/rss+xml"/>
        <copyright><![CDATA[2026 Adam Argyle]]></copyright>
        <language><![CDATA[en]]></language>
        <webMaster><![CDATA[adam.is@nerdy.dev (Adam Argyle)]]></webMaster>
        <ttl>60</ttl>
        <category><![CDATA[CSS]]></category>
        <category><![CDATA[HTML]]></category>
        <category><![CDATA[JavaScript]]></category>
        <category><![CDATA[Front-End]]></category>
        <category><![CDATA[Design]]></category>
        <icon>https://un5w0at6q75xee8.julianrbryant.com/rss-icon.png</icon>
        <logo>https://un5w0at6q75xee8.julianrbryant.com/skull-card.png</logo>
        <item>
            <title><![CDATA[Migration To Fresh 2 And Denos Latest Console Complete]]></title>
            <description><![CDATA[<p><a href="https://un5n629cgk7gna8.julianrbryant.com">dash.deno.com</a> → <a href="https://un5kxttrqq5xfru3.julianrbryant.com">console.deno.com</a><br>Fresh → <a href="https://un5pe1hmz35xfrygh29g.julianrbryant.com">Fresh 2</a></p>
<p>This was a large chunk of work 😅</p>
<p><small>Please report any regressions.</small></p>
]]></description>
            <link>https://un5w0at6q75xee8.julianrbryant.com/migration-to-fresh-2-and-denos-latest-console-complete?utm_source=rss</link>
            <guid isPermaLink="true">https://un5w0at6q75xee8.julianrbryant.com/migration-to-fresh-2-and-denos-latest-console-complete?utm_source=rss</guid>
            <category><![CDATA[note]]></category>
            <dc:creator><![CDATA[webmaster@admin]]></dc:creator>
            <pubDate>Fri, 03 Apr 2026 19:16:36 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[WWW Ep238 Nextjs Is Dead Long Live Nextjs (Presented By Warp)]]></title>
            <description><![CDATA[
          <img style="display: none" src="https://un5w0at6q75xee8.julianrbryant.com/media/www-ep238.jpg" alt="Whiskey web and whatnot episode 237" height="1000" width="1000" />
        <p><span class="Tag">Ep #238</span><br>
<strong>NextJS is Dead, Long Live NextJS (presented by <a href="https://un5mvz2gg340.julianrbryant.com/">Warp</a>)</strong></p>
<p>🏭 <a href="https://un5gmtkzgjyueqpwvvvand8.julianrbryant.com/blog/2026/01/the-five-levels-from-spicy-autocomplete-to-the-software-factory/">Dark Factories</a><br>🤖 YOLO mode<br>❌ T shape vs X shape<br>🦞 <a href="https://un5mvxyucfjd6m5p.julianrbryant.com/">OpenClaw</a><br>💀 Death of SaaS<br>🥃 <a href="https://un5pmfvzxjhxeyc2xbfjwgqm1u6ckn8.julianrbryant.com/whiskey/pipe-dream-bourbon/">Redwood Empire</a> &amp; whatnot  </p>
<p>⤷ <a href="https://un5vrbe0g6kywemjtw.julianrbryant.com/nextjs-is-dead-long-live-nextjs-presented-by-warp">whiskey.fm</a> · <a href="https://un5gmtkzgkvecnwrqr1g.julianrbryant.com/watch?v=GKGsvg9NOVg">youtube</a> · <a href="https://un5mvxtqgjqr32xptupj8.julianrbryant.com/episode/5alMvPgO8Uu1AGgPBrEKrL">spotify</a> · <a href="https://un5qe896yu5vwqpgwv1ea7zq.julianrbryant.com/us/podcast/next-js-is-dead-long-live-next-js-presented-by-warp/id1552776603?i=1000758802193">apple</a></p>
]]></description>
            <link>https://un5w0at6q75xee8.julianrbryant.com/www-ep238-nextjs-is-dead-long-live-nextjs-(presented-by-Warp)?utm_source=rss</link>
            <guid isPermaLink="true">https://un5w0at6q75xee8.julianrbryant.com/www-ep238-nextjs-is-dead-long-live-nextjs-(presented-by-Warp)?utm_source=rss</guid>
            <category><![CDATA[note]]></category>
            <category><![CDATA[shows]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[adam@whiskey.fm]]></dc:creator>
            <pubDate>Thu, 02 Apr 2026 16:10:02 GMT</pubDate>
            <enclosure url="https://un5w0at6q75xee8.julianrbryant.com/media/www-ep238.jpg" length="0" type="image/jpeg"/>
            <media:thumbnail url="https://un5w0at6q75xee8.julianrbryant.com/media/www-ep238.jpg"/>
        </item>
        <item>
            <title><![CDATA[WWW Ep237 Using AI Wrong With Leon Noel And Danny Thompson]]></title>
            <description><![CDATA[
          <img style="display: none" src="https://un5w0at6q75xee8.julianrbryant.com/media/www-ep237.jpg" alt="Whiskey web and whatnot episode 237" height="1000" width="1000" />
        <p><span class="Tag">Ep #237</span><br>
<strong>The Transactional Trap:</strong><br>How 97% of Developers Are Using AI Wrong<br>- with <a href="https://un5gmtkzggtb9apnm3rj8.julianrbryant.com/in/leonnoel/">Leon Noel</a> &amp; <a href="https://un5gmtkzggtb9apnm3rj8.julianrbryant.com/in/dthompsondev/">Danny Thompson</a></p>
<p>🤖 agentic dev<br>💬 prompt engineering<br>🦞 <a href="https://un5mvxyucfjd6m5p.julianrbryant.com/">OpenClaw</a><br>🎼 orchestration, harnesses, and models<br>💀 leet code interviews<br>🕹️ <a href="https://un5gmtkzgjcvqapnw39wcwrck0.julianrbryant.com/">Pokemon Go</a><br>🥃 whiskey &amp; whatnot  </p>
<p>⤷ <a href="https://un5vrbe0g6kywemjtw.julianrbryant.com/the-transactional-trap-how-97-of-developers-are-using-ai-wrong-w-leon-noel-danny-thompson">whiskey.fm</a> · <a href="https://un5gmtkzgkvecnwrqr1g.julianrbryant.com/watch?v=HJG8xd8hJHI">youtube</a> · <a href="https://un5mvxtqgjqr32xptupj8.julianrbryant.com/episode/0sFGjayW1AtsvYXPaFBJUI">spotify</a> · <a href="https://un5qe896yu5vwqpgwv1ea7zq.julianrbryant.com/us/podcast/the-transactional-trap-how-97-of-developers-are-using/id1552776603?i=1000757444483">apple</a></p>
]]></description>
            <link>https://un5w0at6q75xee8.julianrbryant.com/www-ep237-using-AI-wrong-with-Leon-Noel-and-Danny-Thompson?utm_source=rss</link>
            <guid isPermaLink="true">https://un5w0at6q75xee8.julianrbryant.com/www-ep237-using-AI-wrong-with-Leon-Noel-and-Danny-Thompson?utm_source=rss</guid>
            <category><![CDATA[note]]></category>
            <category><![CDATA[shows]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[adam@whiskey.fm]]></dc:creator>
            <pubDate>Thu, 26 Mar 2026 15:49:22 GMT</pubDate>
            <enclosure url="https://un5w0at6q75xee8.julianrbryant.com/media/www-ep237.jpg" length="0" type="image/jpeg"/>
            <media:thumbnail url="https://un5w0at6q75xee8.julianrbryant.com/media/www-ep237.jpg"/>
        </item>
        <item>
            <title><![CDATA[Rfc Latest Color Input Concept]]></title>
            <description><![CDATA[
          <img style="display: none" src="https://un5w0at6q75xee8.julianrbryant.com/media/color-input-concept-1.jpg" alt="color input concept 1" height="988" width="828" />
        <p><a href="https://deploy-preview-50--color-input.netlify.app/api/">Try the latest <code>&lt;color-input&gt;</code> concept</a><br><small>(I think it&#39;s hella rad)</small></p>
<p>⚓️ <code>anchor()</code> progressive enhancement<br>🤖 workers for color compute<br>🙈 new animations &amp; interactions<br>🎨 gamut boundaries, mapping, stretching<br>☯️ contrast scores<br>&amp; much more  </p>
<p>QA and <a href="https://github.com/argyleink/css-color-component/pull/50">comment on GitHub if you may.</a></p>
]]></description>
            <link>https://un5w0at6q75xee8.julianrbryant.com/rfc-latest-color-input-concept?utm_source=rss</link>
            <guid isPermaLink="true">https://un5w0at6q75xee8.julianrbryant.com/rfc-latest-color-input-concept?utm_source=rss</guid>
            <category><![CDATA[note]]></category>
            <category><![CDATA[css]]></category>
            <category><![CDATA[oss]]></category>
            <category><![CDATA[tools]]></category>
            <dc:creator><![CDATA[atom@argyleink]]></dc:creator>
            <pubDate>Mon, 23 Mar 2026 05:03:51 GMT</pubDate>
            <enclosure url="https://un5w0at6q75xee8.julianrbryant.com/media/color-input-concept-1.jpg" length="0" type="image/jpeg"/>
            <media:thumbnail url="https://un5w0at6q75xee8.julianrbryant.com/media/color-input-concept-1.jpg"/>
        </item>
        <item>
            <title><![CDATA[4 Seconds Faster]]></title>
            <description><![CDATA[<p>Page load improvements deployed.</p>
]]></description>
            <link>https://un5w0at6q75xee8.julianrbryant.com/4-seconds-faster?utm_source=rss</link>
            <guid isPermaLink="true">https://un5w0at6q75xee8.julianrbryant.com/4-seconds-faster?utm_source=rss</guid>
            <category><![CDATA[note]]></category>
            <dc:creator><![CDATA[webmaster@admin]]></dc:creator>
            <pubDate>Thu, 19 Mar 2026 22:53:29 GMT</pubDate>
        </item>
        <item>
            <title><![CDATA[WWW Ep236 The Manager Has Become The Managed (Presented By Warp)]]></title>
            <description><![CDATA[
          <img style="display: none" src="https://un5w0at6q75xee8.julianrbryant.com/media/www-236.jpg" alt="Whiskey web and whatnot episode 236" height="1000" width="1000" />
        <p><span class="Tag">Ep #236</span><br>
<strong>The Manager Has Become The Managed</strong><br>(Presented by <a href="https://un5mvz2gg340.julianrbryant.com/">Warp</a>)</p>
<p><a href="https://un5kgzb4wakvt0m5d7tbe8k7.julianrbryant.com">Robbie</a> and I chat with guest <a href="https://un5tu93vwfwv3bdj3w.julianrbryant.com/">Amelia Wattenberger</a> about:</p>
<p>📄 Why <a href="https://github.com/github/spec-kit/blob/main/spec-driven.md">specs</a> still aren&#39;t taking off<br>🤖 Being managed by your own bots<br>🛠️ Amelia&#39;s rad project <a href="https://un5gmtkzgjgtpvu2w65v7d8.julianrbryant.com/product/intent">Intent</a><br>🦆 <a href="https://un5me0b4pumuawn23jav64hcbuuxtn8.julianrbryant.com/">Rubber duck debugging</a> with <a href="https://un5kwkagyrp9pfj3.julianrbryant.com/docs/en/overview">Claude</a><br>🥃 A little <a href="https://un5vrbe0g6kyxapmp710vd8.julianrbryant.com/">whiskey</a> &amp; whatnot</p>
<p>⤷ <a href="https://un5vrbe0g6kywemjtw.julianrbryant.com/the-manager-has-become-the-managed-presented-by-warp">whiskey.fm</a> · <a href="https://un5gmtkzgkvecnwrqr1g.julianrbryant.com/watch?v=adxq2ONj2TU">youtube</a> · <a href="https://un5mvxtqgjqr32xptupj8.julianrbryant.com/episode/2zfigw4DzSJXzTQKUEz8TO">spotify</a> · <a href="https://un5qe896yu5vwqpgwv1ea7zq.julianrbryant.com/us/podcast/the-manager-has-become-the-managed-presented-by-warp/id1552776603?i=1000756096986">apple</a></p>
]]></description>
            <link>https://un5w0at6q75xee8.julianrbryant.com/www-ep236-the-manager-has-become-the-managed-(presented-by-Warp)?utm_source=rss</link>
            <guid isPermaLink="true">https://un5w0at6q75xee8.julianrbryant.com/www-ep236-the-manager-has-become-the-managed-(presented-by-Warp)?utm_source=rss</guid>
            <category><![CDATA[note]]></category>
            <category><![CDATA[shows]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[adam@whiskey.fm]]></dc:creator>
            <pubDate>Thu, 19 Mar 2026 18:33:27 GMT</pubDate>
            <enclosure url="https://un5w0at6q75xee8.julianrbryant.com/media/www-236.jpg" length="0" type="image/jpeg"/>
            <media:thumbnail url="https://un5w0at6q75xee8.julianrbryant.com/media/www-236.jpg"/>
        </item>
        <item>
            <title><![CDATA[Everything You Need To Know About Customizing Scroll Ux With CSS From CSS Day 2025]]></title>
            <description><![CDATA[
          <img style="display: none" src="https://un5w0at6q75xee8.julianrbryant.com/media/ultimate-scroller.jpg" alt="CSS Day 2025 The Ultimate Scroller" height="1534" width="2954" />
        <p>My <a href="https://un5nf096xvvd6qd8.julianrbryant.com/2025">CSS Day 2025</a> talk is out! </p>
<p>📼 <a href="https://un5gmtkzgkvecnwrqr1g.julianrbryant.com/watch?v=vPb7d28RFNE">youtube.com/watch?v=vPb7d28RFNE</a></p>
<p>Slides, demo links, &amp; more <a href="/cssday-2025">here</a>.</p>
]]></description>
            <link>https://un5w0at6q75xee8.julianrbryant.com/everything-you-need-to-know-about-customizing-scroll-ux-with-CSS-from-css-day-2025?utm_source=rss</link>
            <guid isPermaLink="true">https://un5w0at6q75xee8.julianrbryant.com/everything-you-need-to-know-about-customizing-scroll-ux-with-CSS-from-css-day-2025?utm_source=rss</guid>
            <category><![CDATA[note]]></category>
            <category><![CDATA[css]]></category>
            <category><![CDATA[talks]]></category>
            <dc:creator><![CDATA[atom@argyleink]]></dc:creator>
            <pubDate>Wed, 18 Mar 2026 14:54:36 GMT</pubDate>
            <enclosure url="https://un5w0at6q75xee8.julianrbryant.com/media/ultimate-scroller.jpg" length="0" type="image/jpeg"/>
            <media:thumbnail url="https://un5w0at6q75xee8.julianrbryant.com/media/ultimate-scroller.jpg"/>
        </item>
        <item>
            <title><![CDATA[St Paddys Day With Shoptalk Show]]></title>
            <description><![CDATA[
          <img style="display: none" src="https://un5w0at6q75xee8.julianrbryant.com/media/www-st-paddys-2026.jpg" alt="Leprachauns podcasting" height="768" width="1408" />
        <p>Join us tonight at 5pm<sup>PT</sup> for a 🍀 <strong>St. Patrick&#39;s Day</strong> 🍀 live collab with the <a href="https://un5m37024atm6fxmb6zj8.julianrbryant.com/">ShopTalk Show</a> folks!</p>
<p><a href="https://un5gmtkzgjkfryt7hkyv8.julianrbryant.com/whiskeywebandwhatnot">Twitch</a> · <a href="https://un5gmtkzgkvecnwrqr1g.julianrbryant.com/@WhiskeyWebAndWhatnot/featured">YouTube</a></p>
]]></description>
            <link>https://un5w0at6q75xee8.julianrbryant.com/st-paddys-day-with-shoptalk-show?utm_source=rss</link>
            <guid isPermaLink="true">https://un5w0at6q75xee8.julianrbryant.com/st-paddys-day-with-shoptalk-show?utm_source=rss</guid>
            <category><![CDATA[note]]></category>
            <category><![CDATA[shows]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[adam@whiskey.fm]]></dc:creator>
            <pubDate>Tue, 17 Mar 2026 15:10:53 GMT</pubDate>
            <enclosure url="https://un5w0at6q75xee8.julianrbryant.com/media/www-st-paddys-2026.jpg" length="0" type="image/jpeg"/>
            <media:thumbnail url="https://un5w0at6q75xee8.julianrbryant.com/media/www-st-paddys-2026.jpg"/>
        </item>
        <item>
            <title><![CDATA[Hot Pockets Pro Max]]></title>
            <description><![CDATA[
          <img style="display: none" src="https://un5w0at6q75xee8.julianrbryant.com/media/www-235.jpg" alt="Hot Pockets as an Apple ad" height="600" width="600" />
        <p><span class="Tag">Ep #235</span><br>
<strong>Hot Pockets Pro Max (presented by <a href="https://un5mvz2gg340.julianrbryant.com/">Warp</a>)</strong></p>
<p><a href="https://un5kgzb4wakvt0m5d7tbe8k7.julianrbryant.com">Robbie</a> and I chat <a href="https://un5mvxyucfjd6m5p.julianrbryant.com/">OpenClaw</a>, token optimizations, liberating data from walled gardens, burn windows, and of course some whiskey and some whatnot.</p>
<p>⤷ <a href="https://un5vrbe0g6kywemjtw.julianrbryant.com/hot-pockets-pro-max-presented-by-warp">whiskey.fm</a> · <a href="https://un5gmtkzgkvecnwrqr1g.julianrbryant.com/watch?v=_yiwlSeYA3k">youtube</a> · <a href="https://un5mvxtqgjqr32xptupj8.julianrbryant.com/episode/6PYeZ47VMLG4U7vDmorqjR">spotify</a> · <a href="https://un5qe896yu5vwqpgwv1ea7zq.julianrbryant.com/us/podcast/hot-pockets-pro-max-presented-by-warp/id1552776603?i=1000754785070">apple</a></p>
]]></description>
            <link>https://un5w0at6q75xee8.julianrbryant.com/hot-pockets-pro-max?utm_source=rss</link>
            <guid isPermaLink="true">https://un5w0at6q75xee8.julianrbryant.com/hot-pockets-pro-max?utm_source=rss</guid>
            <category><![CDATA[note]]></category>
            <category><![CDATA[shows]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[adam@whiskey.fm]]></dc:creator>
            <pubDate>Thu, 12 Mar 2026 22:21:14 GMT</pubDate>
            <enclosure url="https://un5w0at6q75xee8.julianrbryant.com/media/www-235.jpg" length="0" type="image/jpeg"/>
            <media:thumbnail url="https://un5w0at6q75xee8.julianrbryant.com/media/www-235.jpg"/>
        </item>
        <item>
            <title><![CDATA[View Transitions can swoop‽]]></title>
            <description><![CDATA[
          <img style="display: none" src="https://un5w0at6q75xee8.julianrbryant.com/media/vt-can-swoop-hero.jpg" alt="Two ghosts, one flying in a straight line and one on a curve" height="873" width="1600" />
        <p>Like Zoolander who can&#39;t turn right, I thought View Transitions couldn&#39;t swoop. </p>
<p>I had been under the impression that they couldn&#39;t curve towards the destination, and it was one of those things that you like <strong>can&#39;t unsee</strong>. All view transitions going in straight lines…</p>
<figure>

<p><video 
          src="/media/vt-straight-lines.mp4" 
          width="1282" 
          height="846"
          alt=""
          preload="none"
          poster="/media/vt-straight-lines.avif"
          controls 
          loop
          muted 
          playsinline 
          allowFullScreen
        /></p>
<figcaption>

<p><a href="https://un5kwkfewf5ju.julianrbryant.com/argyleink/pen/NWOEvro">CodePen</a></p>
</figcaption>

</figure>

<p>All my prior attempts had failed, til now.</p>

        <h2>
          The way of the swoop
          <a name="the-way-of-the-swoop" href="#the-way-of-the-swoop">#</a>
        </h2>
       <p>When you give something a <a href="https://un5j2j18xhuv2emkwgjjkgb49yug.julianrbryant.com/en-US/docs/Web/CSS/Reference/Properties/view-transition-name"><code>view-transition-name</code></a> like:</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-function)">#ball1</span><span style="color:var(--shiki-foreground)"> { </span></span>
<span class="line"><span style="color:var(--shiki-token-constant)">  view-transition-name</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> view-transition-ball</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<p>The browser creates keyframes with a predictable naming pattern:</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-keyword)">@keyframes</span><span style="color:var(--shiki-foreground)"> -ua-view-transition-group-anim-view-transition-ball {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  …</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<p>If you pause a view transition, you can see the keyframes and the keyframe name applied to the pseudo elements:</p>
<figure style="margin-inline: auto">

<p><picture>
            <source srcset="/media/vt-paused-keyframes.avif" type="image/avif">
            <source srcset="/media/vt-paused-keyframes.webp" type="image/webp">
            <img 
              loading="lazy" 
              src="/media/vt-paused-keyframes.jpg" 
              alt="" 
              title="Title " 
              decoding="async"
              width="355" 
              height="378"
            />
          </picture></p>
</figure>

<p><em>Anticipating that</em> naming consistency, add a comma to the <code>::view-transition-group()</code> element and include some keyframes of our own:</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-foreground)">::view-transition-group(</span><span style="color:var(--shiki-token-string-expression)">view-transition-ball</span><span style="color:var(--shiki-foreground)">) {</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)">  animation</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-foreground)"> </span></span>
<span class="line"><span style="color:var(--shiki-token-constant)">    -ua-view-transition-group-anim-view-transition-ball 2</span><span style="color:var(--shiki-token-keyword)">s</span><span style="color:var(--shiki-token-constant)"> ease-in-out</span><span style="color:var(--shiki-token-punctuation)">,</span><span style="color:var(--shiki-token-constant)"> </span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">/* 👉*/</span><span style="color:var(--shiki-token-constant)"> swoop 2</span><span style="color:var(--shiki-token-keyword)">s</span><span style="color:var(--shiki-token-constant)"> ease-in-out</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<p>The special sauce, the THING THAT TOOK FOREVER TO FIND, is that you can <strong>only use individual transforms, NO <code>transform</code> shorthand</strong>:</p>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-keyword)">@keyframes</span><span style="color:var(--shiki-foreground)"> swoop {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  50% {</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">/* ❌ */</span><span style="color:var(--shiki-token-constant)"> transform</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-function)"> translateY</span><span style="color:var(--shiki-token-constant)">(50</span><span style="color:var(--shiki-token-keyword)">px</span><span style="color:var(--shiki-token-constant)">)</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">/* ✅ */</span><span style="color:var(--shiki-token-constant)"> translate</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-constant)"> 0 50</span><span style="color:var(--shiki-token-keyword)">px</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">  }</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<p>If you try to change the transform, things fail. And if you try to add <code>animation-composition</code>, things fail harder (don&#39;t know why).</p>
<p>BUT, using individual transforms, and just like that, you can blend a scale, translate, or whatever in combination with the browser native transition. </p>
<p><strong>The trick also shows you how you can add a blur to a view transition.</strong></p>
<figure>

<p><video 
          src="/media/vt-curved-lines.mp4" 
          width="1282" 
          height="846"
          alt=""
          preload="none"
          poster="/media/vt-curved-lines.avif"
          controls 
          loop
          muted 
          playsinline 
          allowFullScreen
        /></p>
<figcaption>

<p><a href="https://un5kwkfewf5ju.julianrbryant.com/argyleink/pen/VYKjPgx">CodePen</a></p>
</figcaption>

</figure>

<p><q class="info">The key to the unlock was individual transforms.</q></p>
<p>Below is a demo you can try that makes a simple wiggling view transition. </p>
<p>The green ball uses custom keyframes and animation composition, and the pink ball uses view transitions. They dont perfectly match either, which is interesting (exaggerated with a scale added). There&#39;s a perspective difference at play I don&#39;t fully understand.</p>
<p>
          <iframe 
            class="codepen-embed" 
            scrolling="no" 
            title="null" 
            src="https://un5kwkfewf5ju.julianrbryant.com/argyleink/embed/preview/gbMmPQg?default-tab=result&editable=true&theme-id=43079" 
            frameborder="no" 
            loading="lazy" 
            allowtransparency="true" 
            allowfullscreen="true"
          >
            See the Pen <a href="https://un5kwkfewf5ju.julianrbryant.com/argyleink/embed/preview/gbMmPQg"> by Adam Argyle (<a href="https://un5kwkfewf5ju.julianrbryant.com/argyleink">@argyleink</a>)
            on <a href="https://un5kwkfewf5ju.julianrbryant.com">CodePen</a>.
          </iframe>
        </p>
<p>You can stop reading here if you want, but I&#39;m about to rant about how this was lame as crap to discover.</p>

        <h2>
          The limits
          <a name="the-limits" href="#the-limits">#</a>
        </h2>
       <p>While I&#39;m glad there&#39;s a little bit of a way for it to work, there&#39;s plenty to still want.</p>
<ul>
<li>No access to the dynamic values that the browser calculates for view transitions</li>
<li>The solution is clunky and requires static <code>view-transition-names</code> (no <code>match-element</code> support), it breaks if the browsers name their keyframes something else or if I&#39;m assigning names with JS</li>
<li>No support for <code>animation-composition: add</code></li>
<li>No way to control the easing of the x vs the y axis separately, or separate durations</li>
</ul>
<p>I really just wanted to change the <code>X</code> easing to be <code>ease-out</code> and the <code>Y</code> easing to be <code>ease-in</code>. That would give a nice swoop. Or even add a slight delay the <code>X</code> and not the <code>Y</code>, another way to create a swoop.</p>
<picture>
  <source srcset="https://un5textmgjff16n23w.julianrbryant.com/s/e/notoemoji/latest/1f62c/512.webp" type="image/webp">
  <img src="https://un5textmgjff16n23w.julianrbryant.com/s/e/notoemoji/latest/1f62c/512.gif" alt="😬" width="150" height="150">
</picture>

<p>None of these more normal and better ergonomic ways are available. Just this narrow case with individual transforms and trying to piggy back on a browser keyframe naming convention. </p>
<p>But hey, now we can add swoops to a native view transition and we learned a trick that can make motion blur view transitions. That&#39;s coo.</p>
]]></description>
            <link>https://un5w0at6q75xee8.julianrbryant.com/swoop-there-it-is?utm_source=rss</link>
            <guid isPermaLink="true">https://un5w0at6q75xee8.julianrbryant.com/swoop-there-it-is?utm_source=rss</guid>
            <category><![CDATA[blog]]></category>
            <category><![CDATA[css]]></category>
            <dc:creator><![CDATA[atom@argyleink]]></dc:creator>
            <pubDate>Sat, 07 Mar 2026 05:32:21 GMT</pubDate>
            <enclosure url="https://un5w0at6q75xee8.julianrbryant.com/media/vt-can-swoop-hero.jpg" length="0" type="image/jpeg"/>
            <media:thumbnail url="https://un5w0at6q75xee8.julianrbryant.com/media/vt-can-swoop-hero.jpg"/>
        </item>
    </channel>
</rss>