<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Components on Retro Dispatch</title><link>https://phantompixeldev.github.io/hugo-theme-retrocss/categories/components/</link><description>Recent content in Components on Retro Dispatch</description><generator>Hugo</generator><language>en-us</language><copyright>© 2026 Retro Dispatch</copyright><lastBuildDate>Fri, 28 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://phantompixeldev.github.io/hugo-theme-retrocss/categories/components/index.xml" rel="self" type="application/rss+xml"/><item><title>Building a component that is square on purpose</title><link>https://phantompixeldev.github.io/hugo-theme-retrocss/posts/square-on-purpose/</link><pubDate>Fri, 28 Aug 2026 00:00:00 +0000</pubDate><guid>https://phantompixeldev.github.io/hugo-theme-retrocss/posts/square-on-purpose/</guid><description>&lt;h2 id="one-token"&gt;
 One token
 &lt;a class="heading-anchor" href="#one-token" aria-label="Link to One token"&gt;&lt;span aria-hidden="true"&gt;#&lt;/span&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Every component routes its corners through &lt;code&gt;--retro-border-radius&lt;/code&gt;, so one
declaration rounds the whole framework.&lt;/p&gt;
&lt;h2 id="the-exceptions"&gt;
 The exceptions
 &lt;a class="heading-anchor" href="#the-exceptions" aria-label="Link to The exceptions"&gt;&lt;span aria-hidden="true"&gt;#&lt;/span&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Pills are named for their shape, and tables ignore &lt;code&gt;border-radius&lt;/code&gt; outright
because &lt;code&gt;border-collapse: collapse&lt;/code&gt; merges their cell borders.&lt;/p&gt;</description></item><item><title>Sign-in forms that behave when the network does not</title><link>https://phantompixeldev.github.io/hugo-theme-retrocss/posts/auth-forms-that-behave/</link><pubDate>Sat, 18 Jul 2026 00:00:00 +0000</pubDate><guid>https://phantompixeldev.github.io/hugo-theme-retrocss/posts/auth-forms-that-behave/</guid><description>&lt;p&gt;The happy path of a sign-in form is four elements. Everything else is the
interesting part.&lt;/p&gt;
&lt;h2 id="the-states-worth-building"&gt;
 The states worth building
 &lt;a class="heading-anchor" href="#the-states-worth-building" aria-label="Link to The states worth building"&gt;&lt;span aria-hidden="true"&gt;#&lt;/span&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pending&lt;/strong&gt; — the button is busy, not disabled-and-silent.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rejected&lt;/strong&gt; — the message is next to the field, not in a toast that vanished.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rate-limited&lt;/strong&gt; — say how long, not &amp;ldquo;try again later&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Offline&lt;/strong&gt; — the form should still hold what was typed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-password-toggle"&gt;
 The password toggle
 &lt;a class="heading-anchor" href="#the-password-toggle" aria-label="Link to The password toggle"&gt;&lt;span aria-hidden="true"&gt;#&lt;/span&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Make it a real &lt;code&gt;button&lt;/code&gt; with &lt;code&gt;aria-pressed&lt;/code&gt;, keep the field type in sync, and
never place it where it covers the text it reveals.&lt;/p&gt;</description></item></channel></rss>