<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="pretty-atom-feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  
  <title>Blog Awesome</title>
  <subtitle>News and information from Font Awesome – the internet’s favorite icon set; mixed with musings and nerdery from the team behind it.</subtitle>
  <link href="https://blog.fontawesome.com/feed/feed.xml" rel="self" />
  <link href="https://blog.fontawesome.com/" />
  <updated>2026-09-22T14:00:00Z</updated>
  <id>https://blog.fontawesome.com/</id>
  <author>
    <name>Font Awesome</name>
  </author>
  <entry>
    <title>Random Content, On Purpose</title>
    <link href="https://blog.fontawesome.com/web-awesome-random-content/" />
    <updated>2026-09-22T14:00:00Z</updated>
    <id>https://blog.fontawesome.com/web-awesome-random-content/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;We built ten small demos with one Web Awesome component and a lot of dumb greeting copy. Some of them we&#39;d ship tomorrow. A couple we&#39;d argue about first.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;wa-random-content&amp;gt;&lt;/code&gt; is one of the smaller components in Web Awesome, and one of our favorites. You give it some children, it shows one at random. That&#39;s the whole thing. No script, no array of strings hiding in your component logic.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;wa-random-content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Nice work.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;That&#39;s the one.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Look at you go.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;wa-random-content&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We kept wanting to use it everywhere, which is the wrong instinct. So before the list, the one rule we landed on: only randomize stuff that can change without changing what it means. A greeting can say something different every morning. A status line can&#39;t. The task count, the button labels, the numbers, all of that stays put.&lt;/p&gt;
&lt;p&gt;Here are the ten we built.&lt;/p&gt;
&lt;h2 id=&quot;greetings&quot;&gt;Greetings&lt;/h2&gt;
&lt;p&gt;Every app we&#39;ve ever used says &amp;quot;Welcome back.&amp;quot; Every time. Forever. It takes about five minutes to create, which is kind of the point.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;360&quot; data-pen-title=&quot;Web Awesome&#39;s Random Content: Greetings&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;gbgqBNV&quot; data-user=&quot;webawesome&quot; style=&quot;height: 360px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fd409-c6e3-7480-a9df-fe32caa6629e&quot;&gt;
  Web Awesome&#39;s Random Content: Greetings&lt;/a&gt; by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;Look at what doesn&#39;t move: the &amp;quot;3 unexplained cases&amp;quot; line under the greeting. Randomize the hello, not the number. We&#39;ll keep saying that.&lt;/p&gt;
&lt;h2 id=&quot;empty-states&quot;&gt;Empty States&lt;/h2&gt;
&lt;p&gt;A brand new user lands on an empty project list and has no idea what to do. Give them a nudge that&#39;s a little different each time.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;560&quot; data-pen-title=&quot;Web Awesome&#39;s Random Content: Empty States&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;BypMGBN&quot; data-user=&quot;webawesome&quot; style=&quot;height: 560px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fd410-a0c1-76ab-ade3-dea6a7543f1f&quot;&gt;
  Web Awesome&#39;s Random Content: Empty States&lt;/a&gt; by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;The suggestion rotates, but the buttons don&#39;t, because if someone hits back and the button they clicked is gone, that&#39;s a bug as far as they&#39;re concerned. So the rotation only touches the text.&lt;/p&gt;
&lt;h2 id=&quot;success-confirmations&quot;&gt;Success Confirmations&lt;/h2&gt;
&lt;p&gt;Somebody just finished something. &amp;quot;Saved!&amp;quot; is fine. It&#39;s also a missed chance to be a little fun.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;330&quot; data-pen-title=&quot;Web Awesome&#39;s Random Content: Success Confirmations&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;gbgqQOY&quot; data-user=&quot;webawesome&quot; style=&quot;height: 330px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fd413-cd77-71f9-b03d-950d3bf99a34&quot;&gt;
  Web Awesome&#39;s Random Content: Success Confirmations&lt;/a&gt; by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;The celebration goes above the real status line, not instead of it. It gets to be playful because nobody needs it for anything.&lt;/p&gt;
&lt;h2 id=&quot;loading-messages&quot;&gt;Loading Messages&lt;/h2&gt;
&lt;p&gt;This is the one we&#39;d push for hardest. Long tasks have to show something while they run, and that&#39;s dead air. Might as well put some personality in it.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;370&quot; data-pen-title=&quot;Web Awesome&#39;s Random Content: Loading Messages&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;XJpOyWV&quot; data-user=&quot;webawesome&quot; style=&quot;height: 370px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fd416-dfc9-76d0-9221-c6970a64b024&quot;&gt;
  Web Awesome&#39;s Random Content: Loading Messages&lt;/a&gt; by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;One thing we were careful about here. The jokes are &lt;code&gt;aria-hidden&lt;/code&gt;, and there&#39;s a separate status element that says &amp;quot;Generating your report. This may take a moment.&amp;quot; A screen reader hears that once and moves on, instead of getting a new joke read out every few seconds. That would be awful.&lt;/p&gt;
&lt;h2 id=&quot;rotating-artwork&quot;&gt;Rotating Artwork&lt;/h2&gt;
&lt;p&gt;Any place with one decorative image (sign-up page, 404, the hero on a long article) can rotate through a few instead. Same page, slightly different look each visit. Small thing. People notice.&lt;/p&gt;
&lt;p&gt;In our pen each image carries a color name, and the card border and button pick it up. So the whole panel shifts with the image, not just the picture.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;620&quot; data-pen-title=&quot;Web Awesome&#39;s Random Content: Rotating Artwork&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;RNKvqwm&quot; data-user=&quot;webawesome&quot; style=&quot;height: 620px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fd418-85c1-728c-b1af-7b50bec78a8f&quot;&gt;
  Web Awesome&#39;s Random Content: Rotating Artwork&lt;/a&gt; by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;Two gotchas. &lt;code&gt;mode=&amp;quot;sequence&amp;quot;&lt;/code&gt; loads the first image first, which avoids a flash on initial render. And the images you can&#39;t see still download unless you put &lt;code&gt;loading=&amp;quot;lazy&amp;quot;&lt;/code&gt; on them. Lazy loading means a brief blank the first time each one shows up, in exchange for not downloading five images to display one. We&#39;d take that trade.&lt;/p&gt;
&lt;h2 id=&quot;logo-spotlight&quot;&gt;Logo Spotlight&lt;/h2&gt;
&lt;p&gt;Every marketing site has a customer logo strip. There are always more logos than fit, so somebody picks a permanent six, and the other twenty never get seen by anyone.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;items=&amp;quot;6&amp;quot;&lt;/code&gt; pulls six from the full set. &lt;code&gt;autoplay&lt;/code&gt; swaps them every few seconds. Everybody gets some airtime.&lt;/p&gt;
&lt;p&gt;This is one of the two we&#39;d argue about. Not because the component is wrong for it, but because &lt;code&gt;autoplay&lt;/code&gt; comes with homework most teams skip.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;400&quot; data-pen-title=&quot;Web Awesome&#39;s Random Content: Logo Spotlight&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;BypMGyN&quot; data-user=&quot;webawesome&quot; style=&quot;height: 400px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fd419-da4c-715e-b4ce-1b9a09b2bea6&quot;&gt;
  Web Awesome&#39;s Random Content: Logo Spotlight&lt;/a&gt; by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;If you use &lt;code&gt;autoplay&lt;/code&gt;, put a visible pause button next to it. The component already pauses on hover and focus, but the logos themselves aren&#39;t focusable, so a keyboard user has nothing to land on. We also hid the rotating logos from screen readers and listed the full client set as plain text, so assistive tech gets every name at once instead of six at a time.&lt;/p&gt;
&lt;h2 id=&quot;next-reads&quot;&gt;Next Reads&lt;/h2&gt;
&lt;p&gt;Same trick, different content. Show a few articles from a bigger pool at the bottom of every post.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;540&quot; data-pen-title=&quot;Web Awesome&#39;s Random Content: Next Reads + Links&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;ogBmQgJ&quot; data-user=&quot;webawesome&quot; style=&quot;height: 540px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fd41c-63e1-758a-88e2-16b686974b37&quot;&gt;
  Web Awesome&#39;s Random Content: Next Reads + Links&lt;/a&gt; by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;Honest take: if your CMS already recommends posts by tag or popularity, use that. It&#39;s smarter than random. But random beats the hand-picked &amp;quot;related posts&amp;quot; list somebody made a year ago and never touched again. We&#39;ve all got one of those.&lt;/p&gt;
&lt;h2 id=&quot;grids&quot;&gt;Grids&lt;/h2&gt;
&lt;p&gt;Up to here it&#39;s been one &lt;code&gt;&amp;lt;wa-random-content&amp;gt;&lt;/code&gt; per example. Nothing says you can&#39;t run forty.&lt;/p&gt;
&lt;p&gt;This is the other one we&#39;d argue about. It&#39;s a narrow case. But it shows something the single examples don&#39;t, so it stayed.&lt;/p&gt;
&lt;p&gt;An asset library waiting on thumbnails is a wall of the same placeholder. Give each tile its own random content and the wall starts looking like actual items.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;560&quot; data-pen-title=&quot;Web Awesome&#39;s Random Content: Grids&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;GgrzwJK&quot; data-user=&quot;webawesome&quot; style=&quot;height: 560px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fd41d-70c3-77e8-8843-7c2156cb4319&quot;&gt;
  Web Awesome&#39;s Random Content: Grids&lt;/a&gt; by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;One catch. Each tile picks on its own, so two neighbors can land on the same option. With a big pool that reads as coincidence. With a small pool it reads as a bug. Give it enough options that it doesn&#39;t happen much.&lt;/p&gt;
&lt;h2 id=&quot;name-generator&quot;&gt;Name Generator&lt;/h2&gt;
&lt;p&gt;Everything above randomizes on its own. The user never asked. This one flips it: the randomness is the feature.&lt;/p&gt;
&lt;p&gt;Naming things is hard, so people skip it during onboarding and you end up with &amp;quot;Untitled Project (4)&amp;quot;. A generate button beats a blank field.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;360&quot; data-pen-title=&quot;Web Awesome&#39;s Random Content: Name Generator&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;jEydQPy&quot; data-user=&quot;webawesome&quot; style=&quot;height: 360px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fd41e-9d65-729a-8ba6-487b92c7a414&quot;&gt;
  Web Awesome&#39;s Random Content: Name Generator&lt;/a&gt; by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;The trick is where the randomizer lives: inside one stable button. Same rule as the greeting: the name changes, the button doesn&#39;t.&lt;/p&gt;
&lt;p&gt;Which brings up something to watch for. If the rotating content has buttons or links inside it, a shuffle can yank focus somewhere unexpected. Keep the shuffle control outside the rotating area, and skip auto-rotation entirely when there&#39;s anything interactive in the pool.&lt;/p&gt;
&lt;h2 id=&quot;surprise-me&quot;&gt;Surprise Me&lt;/h2&gt;
&lt;p&gt;Point a few of them at the same button. Our pen builds a character: one &lt;code&gt;&amp;lt;wa-random-content&amp;gt;&lt;/code&gt; picks a class, one picks what they&#39;re carrying, one picks a quirk. Six options each. That&#39;s 216 characters from eighteen lines of copy, and every line was written by a person.&lt;/p&gt;
&lt;p&gt;That&#39;s the part we like. The pool is small enough to write and edit by hand, and the output is big enough that nobody sees the bottom of it. &lt;code&gt;mode=&amp;quot;unique&amp;quot;&lt;/code&gt; on each one means you won&#39;t get the same Necromancer twice in a row.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;450&quot; data-pen-title=&quot;Web Awesome&#39;s Random Content: Surprise Me&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;bNgzQpe&quot; data-user=&quot;webawesome&quot; style=&quot;height: 450px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fd42c-6b7b-71c7-b7a4-1caa52d42aed&quot;&gt;
  Web Awesome&#39;s Random Content: Surprise Me&lt;/a&gt; by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;script async=&quot;&quot; src=&quot;https://public.codepenassets.com/embed/index.js&quot;&gt;&lt;/script&gt;
&lt;h2 id=&quot;start-with-one&quot;&gt;Start With One&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;wa-random-content&amp;gt;&lt;/code&gt; ships with Web Awesome Core. Pick one spot. A greeting is the easiest, and nobody will complain if it&#39;s bad.&lt;/p&gt;
&lt;p&gt;
  &lt;a class=&quot;ba-button&quot; href=&quot;https://webawesome.com/docs/components/random-content/&quot;&gt;View Random Content Docs&lt;/a&gt;
&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Good News: Your AI Assistant Already Knows Your Icon Kit</title>
    <link href="https://blog.fontawesome.com/font-awesome-ai-agent-tools/" />
    <updated>2026-09-11T19:48:30Z</updated>
    <id>https://blog.fontawesome.com/font-awesome-ai-agent-tools/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;I know…&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Your coding agent can spin up a component, write the copy, and wire up your API call without breaking a sweat. But ask it to drop in the right icon, and things get janky fast. Maybe it guesses at a class name, or suggests an icon that’s not even in your Kit. Or, maybe it just taps out and tells you to go find one yourself. (Thanks?) Now there’s no more guessing. No more hallucinating.&lt;/p&gt;
&lt;p&gt;That’s the one place this kind of workflow used to break. But no more!&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/EYai9oDndK-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/EYai9oDndK-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/EYai9oDndK-1440.png&quot; alt=&quot;4 Font Awesome icons on a navy background: icon cluster, robot head, command line, briefcase&quot; width=&quot;1440&quot; height=&quot;372&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Font Awesome now has real, authenticated tools built for agents. Not just a search box they can scrape. No more scraping. Whatever you’re using, from Claude Code and Cursor to Copilot, Windsurf, or (if you’re feeling nostalgic) Clippy, your agent can ask Font Awesome directly (we gave it a line to call us on) get an answer based on your actual account instead of a best guess from training data, and act on it. It’s not making new icons. It’s fetching the ones you already have access to, correctly, the first time. (Thanks, Clippy. You’re the best.)&lt;/p&gt;
&lt;p&gt;Here’s how it’s built, from the ground up, and what each layer means for you.&lt;/p&gt;
&lt;h2 id=&quot;it-starts-with-the-api&quot;&gt;It Starts With the API&lt;/h2&gt;
&lt;p&gt;Font Awesome’s GraphQL API now provides a lot more about your icons and your account than it used to. Your agent can finally know what you know about what icons your account has access to, and which icons are available in each Kit’s subset. And because GraphQL APIs are self-documenting, so you can just point an agent at api.fontawesome.com and it works out on its own how to pull icon families, styles, and releases: whatever it needs, no hand-crafted query docs required.&lt;/p&gt;
&lt;p&gt;A lot of metadata about Font Awesome icons, like which icons are available in which styles for any given release, are publicly available from the API—no login required.&lt;/p&gt;
&lt;p&gt;Anything tied to your account (your Kits, your custom icons) needs an access token. That’s where the CLI comes in.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://docs.fontawesome.com/apis/graphql/&quot;&gt;GraphQL API&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-fa-cli-wraps-it-all-up&quot;&gt;The fa CLI Wraps It All Up&lt;/h2&gt;
&lt;p&gt;The fa CLI is a convenient wrapper around that API, providing subcommands for common queries. It also handles authorization for any queries that access your Kits. The CLI is handy all by itself: every command returns clean JSON, which makes it a natural fit for build scripts. When used with your AI agent, it levels up the agent’s ability to work with &lt;em&gt;your&lt;/em&gt; icons from &lt;em&gt;your&lt;/em&gt; Kits within your projects. &lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fa login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Once you’re logged in, a few things come free:&lt;/p&gt;
&lt;h3 id=&quot;kit-aware-search&quot;&gt;Kit-aware search&lt;/h3&gt;
&lt;p&gt;Scope a search to a Kit token, and you only get icons that are actually in that Kit’s subset, custom icons included.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fa search --kit-token 8812e4e21d --query &#39;coffee&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;You can search your Kit’s custom icons too:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fa search --kit-token 8812e4e21d --query &#39;coffee&#39; --custom
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;svg-data-and-self-hosting&quot;&gt;SVG data and self-hosting&lt;/h3&gt;
&lt;p&gt;Pull real SVG data for official or custom icons, or download and unzip a full Kit for self-hosting. No manual download, no hunting for the right zip file.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;fa kits --kit-token 8812e4e21d --download web --unzip --output kit
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Want to hand-craft your own GraphQL query instead of using a built-in command? The CLI can run it for you, using your logged-in credentials, stored in your OS keychain, on supported platforms. So your agent can access your account, without handing it a plaintext token.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://docs.fontawesome.com/web/use-with/fa-cli&quot;&gt;fa CLI&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;agent-tools-pick-up-from-there&quot;&gt;Agent Tools Pick Up From There&lt;/h3&gt;
&lt;p&gt;Font Awesome’s official Skills (&lt;code&gt;/setup-fa&lt;/code&gt;, &lt;code&gt;/suggest-icon&lt;/code&gt;, &lt;code&gt;/add-icon&lt;/code&gt;, and &lt;code&gt;/fa-help&lt;/code&gt;) install straight into your coding agent and work across Claude Code, Cursor, GitHub Copilot, Windsurf, and more. Four commands. Zero context-switching.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Install them:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;npx skills add FortAwesome/fontawesome-agent-tools&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then just ask. No docs tab, no copy-pasting a class name from a search result:&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;/add-icon add a shopping cart icon in the Regular style to the checkout button in src/components/Header.tsx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Here’s the peanut-butter-and-jelly part: Agent Tools automatically look for fa in your PATH. If it’s there, and you’re logged in, your agent instantly inherits everything the CLI can do: Kit-subset search, your custom icons, self-hosting setup, all of it. The two are built separately, but designed to work together.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href=&quot;https://docs.fontawesome.com/web/use-with/ai-agent-tools&quot;&gt;AI Agent Tools&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;try-it&quot;&gt;Try It&lt;/h2&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/ksmuI_Qbd3-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/ksmuI_Qbd3-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/ksmuI_Qbd3-1440.png&quot; alt=&quot;4 Font Awesome icons on a navy background: download, screwdriver  wrench, running to portal, question comment&quot; width=&quot;1440&quot; height=&quot;372&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Install the CLI. Install the agent tools. Log in once. Then ask your agent for an icon. It already knows where to look.&lt;/p&gt;
&lt;p&gt;&lt;a class=&quot;c-button c-button--primary&quot; href=&quot;https://docs.fontawesome.com/web/use-with/ai-agent-tools&quot;&gt;&lt;svg class=&quot;c-button__icon fa11ty-icon svg-inline--fa&quot; viewBox=&quot;0 0 512 512&quot;&gt;&lt;use href=&quot;#fas-fa-arrow-right&quot; xlink:href=&quot;#fas-fa-arrow-right&quot;&gt;&lt;/use&gt;&lt;/svg&gt;Get Your Agent Kit-Ready&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Your Design System Should Style Your Words, Too</title>
    <link href="https://blog.fontawesome.com/web-awesome-docs-prose/" />
    <updated>2026-09-08T14:00:00Z</updated>
    <id>https://blog.fontawesome.com/web-awesome-docs-prose/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Most design systems stop where the article starts. Web Awesome keeps going: one class styles a whole block of content, a type scale is there when you need to place text by hand, and CSS &lt;code&gt;@scope&lt;/code&gt; keeps all of it out of your components.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;Nearly every product has a blog. Most have docs and a changelog too. And somehow every team ends up styling that content from scratch, with a typography stylesheet somebody wrote two years ago and nobody wants to open. We&#39;ve written that stylesheet. More than once.&lt;/p&gt;
&lt;p&gt;It exists because most design systems stop at components. Buttons, cards, inputs, all covered. Then a Markdown file shows up and you&#39;re on your own.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/Up-YmpC22l-3840.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/Up-YmpC22l-3840.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/Up-YmpC22l-3840.png&quot; alt=&quot;4 Font Awesome icons on a navy background: text size, block quote, newspaper, anxious face&quot; width=&quot;3840&quot; height=&quot;992&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;We didn&#39;t want that gap in Web Awesome, so it has three things for flowing text. &lt;code&gt;wa-prose&lt;/code&gt; styles a whole block of content at once. A type scale you can apply by hand anywhere. And a few text utilities for alignment and casing. That&#39;s enough for a blog post or a docs page without a typography stylesheet.&lt;/p&gt;
&lt;h2 id=&quot;the-one-class-route-with-prose&quot;&gt;The One-Class Route with &lt;a href=&quot;https://webawesome.com/docs/utilities/prose&quot;&gt;Prose&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Put &lt;code&gt;wa-prose&lt;/code&gt; on the wrapper and everything inside picks up spacing, sizing, and rhythm from your theme.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wa-prose&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Release Notes: v3.2&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		This release includes improvements to form validation, a new color picker
		component, and performance fixes across the board.
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;What&#39;s New&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Color picker with alpha channel support&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Form validation messages now animate in&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;li&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;ul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;blockquote&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&quot;The best component library update is the one you don&#39;t have to migrate.&quot;
			— nobody, but it should be everyone
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;blockquote&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;pre&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;code&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;npm install @aspect/core@3.2&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;code&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;pre&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That&#39;s it. Headings land on the scale, paragraphs get a readable line height, lists indent the same way every time. Blockquotes get a left border. Code blocks get spacing (the colors and fonts come from Native Styles, Web Awesome&#39;s &lt;a href=&quot;https://webawesome.com/docs/utilities/native&quot;&gt;base layer for standard HTML elements&lt;/a&gt;). All of it hangs off one token, &lt;code&gt;--wa-space-scale&lt;/code&gt;, so if you swap themes the prose follows.&lt;/p&gt;
&lt;p&gt;The whole point is that you don&#39;t think about it. CMS output, rendered Markdown, hand-written HTML. Drop it in and it reads fine. No class on every element.&lt;/p&gt;
&lt;h3 id=&quot;see-it-in-action-holodeck-incident-47225-7-entry&quot;&gt;See it in Action: &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fa93f-8a5e-7638-a4dc-55e6a9536dc8&quot;&gt;Holodeck Incident 47225.7 Entry&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A Star Trek captain&#39;s log with one &lt;code&gt;wa-prose&lt;/code&gt; class on the wrapper and nothing else. Headings, lists, blockquotes, a table, figures, a code block. Zero interior classes. Prose makes it so.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;640&quot; data-pen-title=&quot;Web Awesome&#39;s Word Styling: Prose Example&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;azpRXVQ&quot; data-user=&quot;webawesome&quot; style=&quot;height: 640px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
	&lt;span&gt;See the Pen
		&lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fa93f-8a5e-7638-a4dc-55e6a9536dc8&quot;&gt;
			Web Awesome&#39;s Word Styling: Prose Example&lt;/a&gt;
		by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;) on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 id=&quot;prose-that-stays-in-its-lane&quot;&gt;Prose That Stays in Its Lane&lt;/h2&gt;
&lt;p&gt;Styling everything inside a container only works if it really is only inside. The moment your article&#39;s &lt;code&gt;h2&lt;/code&gt; styles land on a card you embedded mid-post, you&#39;re writing overrides again. Different file, same problem.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;wa-prose&lt;/code&gt; is built on &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@scope&quot;&gt;CSS &lt;code&gt;@scope&lt;/code&gt;&lt;/a&gt;. Styles flow down from a root and stop at a boundary you set. So you can drop a component into the middle of an article and its headings stay the component&#39;s.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wa-prose&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;This heading gets prose styles&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;So does this paragraph.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wa-not-prose&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Everything in here is untouched by prose styles --&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;wa-card&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
			&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;This heading is the card&#39;s business&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
		&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;wa-card&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Back to prose styles here.&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;One class opts in, one opts out. No specificity fights, no &lt;code&gt;!important&lt;/code&gt;. This is what lets &lt;code&gt;wa-prose&lt;/code&gt; be aggressive about headings and tables in the first place. Styles that opinionated without an exit would be a liability.&lt;/p&gt;
&lt;h2 id=&quot;picking-sizes-by-hand&quot;&gt;Picking Sizes by Hand&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;wa-prose&lt;/code&gt; is for when you control the container. A lot of text doesn&#39;t live in one. A hero headline. A card title. The caption under a product shot. Those want the same scale without the whole prose treatment.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/t-kpdhEDYm-3840.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/t-kpdhEDYm-3840.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/t-kpdhEDYm-3840.png&quot; alt=&quot;4 Font Awesome icons on a navy background: text height, H2, outdent, message caption&quot; width=&quot;3840&quot; height=&quot;992&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;That&#39;s what the standalone type classes are for. Three families. Each comes bare (style, no forced size) or with a size from &lt;code&gt;3xs&lt;/code&gt; to &lt;code&gt;5xl&lt;/code&gt;, and all three share the same range, so you&#39;re never juggling two scales.&lt;/p&gt;
&lt;h3 id=&quot;headings&quot;&gt;Headings&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;wa-heading&lt;/code&gt; for the default treatment, or &lt;code&gt;wa-heading-3xs&lt;/code&gt; through &lt;code&gt;wa-heading-5xl&lt;/code&gt; for a specific size.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Hero headline: not inside wa-prose, but on the same scale --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h1&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wa-heading-4xl&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	Build with components.
	&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;br&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
	Ship real products.
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Card title: just needs heading treatment, default size --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h3&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wa-heading&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Latest from the blog&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;body&quot;&gt;Body&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;wa-body&lt;/code&gt; for body copy, sized variants for when the default is wrong.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Sidebar description: slightly smaller than default body --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;p&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wa-body-s&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	Updated weekly with framework guides, release notes, and community highlights.
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;p&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;captions&quot;&gt;Captions&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;wa-caption&lt;/code&gt; for the small stuff: image credits, metadata, timestamps.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Image caption --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;figcaption&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wa-caption&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	Fig 3. Component rendering benchmark: Lit vs React vs Svelte
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;figcaption&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Metadata line --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wa-caption&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Published Mar 14, 2025 · 8 min read&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This isn&#39;t a second system. &lt;code&gt;wa-prose&lt;/code&gt; and the manual classes read the same tokens, so a &lt;code&gt;wa-heading-2xl&lt;/code&gt; on a card and an &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt; inside a prose block come out identical. We care about that more than it probably sounds like. Two scales that almost match is how a site ends up with nine slightly different heading sizes.&lt;/p&gt;
&lt;h3 id=&quot;see-it-in-action-ratatouille-was-right-article&quot;&gt;See it in Action: &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fa9a5-d05c-7d31-9aea-352815584ac3&quot;&gt;Ratatouille Was Right Article&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A food essay. The body is &lt;code&gt;wa-prose&lt;/code&gt;, nothing around it is. The eyebrow, the metadata line, the author card, the footnotes, the suggestion cards: all placed by hand on the same scale.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;640&quot; data-pen-title=&quot;Web Awesome&#39;s Word Styling: Type Sizing Example&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;vEgVMLR&quot; data-user=&quot;webawesome&quot; style=&quot;height: 640px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fa9a5-d05c-7d31-9aea-352815584ac3&quot;&gt;
  Web Awesome&#39;s Word Styling: Type Sizing Example&lt;/a&gt; by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 id=&quot;nudging-alignment-and-case&quot;&gt;Nudging Alignment and Case&lt;/h2&gt;
&lt;p&gt;The type classes set the size. The text utilities do the two other things you keep needing: alignment and casing. They stack on &lt;code&gt;wa-prose&lt;/code&gt; or the manual classes, so a centered pull quote or an uppercase eyebrow doesn&#39;t need a CSS file.&lt;/p&gt;
&lt;h3 id=&quot;alignment&quot;&gt;Alignment&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;wa-text-start&lt;/code&gt;, &lt;code&gt;wa-text-center&lt;/code&gt;, &lt;code&gt;wa-text-end&lt;/code&gt;, &lt;code&gt;wa-text-justify&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Logical properties (&lt;code&gt;start&lt;/code&gt;/&lt;code&gt;end&lt;/code&gt;, not &lt;code&gt;left&lt;/code&gt;/&lt;code&gt;right&lt;/code&gt;), so they flip in RTL without you doing anything.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Centered pull quote --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;blockquote&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wa-text-center wa-heading-l&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;
	Design systems should have opinions about typography. Most don&#39;t.
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;blockquote&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Justified body copy for a print-style article (use sparingly in narrow columns) --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;div&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wa-prose wa-text-justify&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;...&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;div&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;That second one works because &lt;code&gt;wa-prose&lt;/code&gt; never sets &lt;code&gt;text-align&lt;/code&gt;. That&#39;s on purpose. Put both classes on the same element and they get along.&lt;/p&gt;
&lt;h3 id=&quot;casing&quot;&gt;Casing&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;wa-text-uppercase&lt;/code&gt;, &lt;code&gt;wa-text-lowercase&lt;/code&gt;, &lt;code&gt;wa-text-capitalize&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Eyebrow label above a section --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;span&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wa-caption wa-text-uppercase&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;Case Study&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;span&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Normalize user-entered headings --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;h2&lt;/span&gt; &lt;span class=&quot;token attr-name&quot;&gt;class&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;wa-heading-xl wa-text-capitalize&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;h2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;see-it-in-action-thneed-changelog&quot;&gt;See it in Action: &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fa9df-f213-728d-9c73-100cfde79f19&quot;&gt;Thneed Changelog&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A made-up product changelog with no &lt;code&gt;wa-prose&lt;/code&gt; at all. Every piece of text is placed by hand: &lt;code&gt;wa-heading-4xl&lt;/code&gt; for the title, &lt;code&gt;wa-caption wa-text-uppercase&lt;/code&gt; for the category labels, &lt;code&gt;wa-body-s&lt;/code&gt; for the entries. More work than the prose route, and the right call for a page that&#39;s mostly small labeled chunks instead of flowing text.&lt;/p&gt;
&lt;p class=&quot;codepen&quot; data-height=&quot;640&quot; data-pen-title=&quot;Web Awesome&#39;s Word Styling: Text Utilities Example&quot; data-default-tab=&quot;result&quot; data-slug-hash=&quot;QwdZPgL&quot; data-user=&quot;webawesome&quot; style=&quot;height: 640px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&quot;&gt;
  &lt;span&gt;See the Pen &lt;a href=&quot;https://codepen.io/editor/team/webawesome/pen/019fa9df-f213-728d-9c73-100cfde79f19&quot;&gt;
  Web Awesome&#39;s Word Styling: Text Utilities Example&lt;/a&gt; by Web Awesome (&lt;a href=&quot;https://codepen.io/team/webawesome&quot;&gt;@webawesome&lt;/a&gt;)
  on &lt;a href=&quot;https://codepen.io&quot;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;script async=&quot;&quot; src=&quot;https://public.codepenassets.com/embed/index.js&quot;&gt;&lt;/script&gt;
&lt;h2 id=&quot;get-started&quot;&gt;Get Started&lt;/h2&gt;
&lt;p&gt;Check your &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; before anything else. Everything in this post lives in &lt;code&gt;utilities.css&lt;/code&gt;, and the styling underneath prose comes from &lt;code&gt;native.css&lt;/code&gt;. The install docs call &lt;code&gt;native.css&lt;/code&gt; optional. For prose it isn&#39;t, and it&#39;s an easy thing to miss. Without it, &lt;code&gt;wa-prose&lt;/code&gt; gets you spacing and sizes but no colors, fonts, or borders on the elements themselves, and the page looks half-finished.&lt;/p&gt;
&lt;pre class=&quot;language-html&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-html&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Required: default theme + autoloader --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt;
	&lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://ka-f.webawesome.com/webawesome@3.12.0/styles/themes/default.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;script&lt;/span&gt;
	&lt;span class=&quot;token attr-name&quot;&gt;type&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;module&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token attr-name&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://ka-f.webawesome.com/webawesome@3.12.0/webawesome.loader.js&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token script&quot;&gt;&lt;/span&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;/&lt;/span&gt;script&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Utility classes: wa-prose, the type scale, the text utilities --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt;
	&lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://ka-f.webawesome.com/webawesome@3.12.0/styles/utilities.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;&amp;lt;!-- Native Styles: color, fonts, and borders for the elements inside your prose --&gt;&lt;/span&gt;
&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token tag&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;link&lt;/span&gt;
	&lt;span class=&quot;token attr-name&quot;&gt;rel&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;stylesheet&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
	&lt;span class=&quot;token attr-name&quot;&gt;href&lt;/span&gt;&lt;span class=&quot;token attr-value&quot;&gt;&lt;span class=&quot;token punctuation attr-equals&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;https://ka-f.webawesome.com/webawesome@3.12.0/styles/native.css&lt;span class=&quot;token punctuation&quot;&gt;&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Want one line? &lt;code&gt;styles/webawesome.css&lt;/code&gt; pulls in all three.&lt;/p&gt;
&lt;p&gt;Then put &lt;code&gt;wa-prose&lt;/code&gt; on your content container and see how far it gets you. Our bet is most of the way. When you need to step outside it (a hero &lt;a href=&quot;https://webawesome.com/docs/utilities/text/#headings&quot;&gt;heading&lt;/a&gt;, a &lt;a href=&quot;https://webawesome.com/docs/utilities/text/#captions&quot;&gt;caption&lt;/a&gt;), reach for the type scale classes.&lt;/p&gt;
&lt;h3 id=&quot;dig-into-the-docs&quot;&gt;Dig Into the Docs&lt;/h3&gt;
&lt;p&gt;
  &lt;a class=&quot;ba-button&quot; href=&quot;https://webawesome.com/docs/utilities/prose/&quot;&gt;Prose Docs&lt;/a&gt;
  &lt;a class=&quot;ba-button&quot; href=&quot;https://webawesome.com/docs/utilities/text/&quot;&gt;Text Utilities Docs&lt;/a&gt;
  &lt;a class=&quot;ba-button&quot; href=&quot;https://webawesome.com/docs/tokens/typography/&quot;&gt;Typography Tokens&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;One thing Web Awesome doesn&#39;t do: syntax highlighting. Bring your own Prism, Shiki, or highlight.js.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The Art of Iconography and How to Future-Proof Your Design System [Part IV]</title>
    <link href="https://blog.fontawesome.com/art-of-iconography-future-proof-design-system-part-4/" />
    <updated>2026-08-27T13:18:00Z</updated>
    <id>https://blog.fontawesome.com/art-of-iconography-future-proof-design-system-part-4/</id>
    <content type="html">&lt;p&gt;Icons may look like the smallest pieces of a design system, but they do some of the heaviest lifting. A well-built icon library communicates faster than words, scales across every surface, and — when done right — becomes one of the most recognizable parts of your brand. (We might be a little biased on this one.) Here’s how to get them right.&lt;/p&gt;
&lt;h2 id=&quot;the-role-of-icons-in-visual-identity&quot;&gt;&lt;strong&gt;The Role of Icons in Visual Identity&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/kipChhWcip-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/kipChhWcip-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/kipChhWcip-1440.png&quot; alt=&quot;Row of four flat icons on a dark navy background: a white house with a red roof, a blue magnifying glass, a person outline in white and green, and a purple shopping bag.&quot; width=&quot;1440&quot; height=&quot;372&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Icons are powerful tools in visual design. They enhance user understanding and navigation while reinforcing your brand’s values and aesthetics.&lt;/p&gt;
&lt;p&gt;Icons help make designs better in many ways. When used intentionally, they quickly show ideas without using words, reducing cognitive load to make your content easier to understand. And since icons don’t take up much space on screens, they help designs look cleaner and more interesting.&lt;/p&gt;
&lt;p&gt;Icons also help people find their way around websites or apps by giving clear hints about where to go. Finally, people from different countries often understand these small pictures even if they don’t speak the same language, making icons great for talking to people all over the world.&lt;/p&gt;
&lt;h2 id=&quot;build-your-icon-catalog&quot;&gt;&lt;strong&gt;Build Your Icon Catalog&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;A well-curated icon library is key. Select icons that are versatile and scalable, ensuring they fit seamlessly into various contexts without losing their impact.&lt;/p&gt;
&lt;p&gt;Building an icon catalog involves several important steps.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Define icon categories (e.g., actions, objects, navigation)&lt;/li&gt;
&lt;li&gt;Choose between custom and standard icons&lt;/li&gt;
&lt;li&gt;Establish icon grid and sizing guidelines&lt;/li&gt;
&lt;li&gt;Create or select a core set of frequently used icons&lt;/li&gt;
&lt;li&gt;Develop a system for naming and organizing icons&lt;/li&gt;
&lt;li&gt;Plan out a system for version control for your icon library&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;iconography-best-practices&quot;&gt;&lt;strong&gt;Iconography Best Practices&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Consistency in icon design is crucial. Maintain uniformity in style, size, and alignment to help your users learn how to read and understand your icons. Incorporate icons into your design system thoughtfully to enhance usability without overwhelming the user.&lt;/p&gt;
&lt;p&gt;When it comes to iconography best practices, there are several key points to consider.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keep consistent line weights and corner radii&lt;/li&gt;
&lt;li&gt;Make sure icons are recognizable at various sizes&lt;/li&gt;
&lt;li&gt;Use icons to complement rather than replace text&lt;/li&gt;
&lt;li&gt;Provide text labels or tooltips for clarity&lt;/li&gt;
&lt;li&gt;Consider cultural context and potential misinterpretations&lt;/li&gt;
&lt;li&gt;Test icon comprehension with user research&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In an unexpected twist, similar to the “Von Restorff effect,” research has shown that incorporating slight imperfections or “wabi-sabi” elements in iconography can actually increase user trust and perceived authenticity of a brand. This Japanese aesthetic principle, when applied subtly to digital design, can make interfaces feel more human and relatable, challenging the notion that perfection is always the goal in visual design systems.&lt;/p&gt;
&lt;p&gt;(Wabi-Sabi. Now that’s a great band name!)&lt;/p&gt;
&lt;h2 id=&quot;strategies-for-implementing-your-design-system&quot;&gt;&lt;strong&gt;Strategies for Implementing Your Design System&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/FQzde7D6SZ-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/FQzde7D6SZ-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/FQzde7D6SZ-1440.png&quot; alt=&quot;Row of four flat icons on a dark navy background: a yellow-and-white handshake, a purple hammer and paintbrush, a pink robot face, and a pair of white and pink/red socks.&quot; width=&quot;1440&quot; height=&quot;372&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Create a Collaborative Design Culture&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Work hard at creating a professional ecosystem between design and development teams that’s more Avengers assembling than Batman brooding. Integrate feedback loops early on in your projects to continuously refine and improve your design system, ensuring it evolves with your needs.&lt;/p&gt;
&lt;p&gt;To foster better collaboration, consider implementing several strategies:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hold regular cross-functional meetings&lt;/li&gt;
&lt;li&gt;Share design and development tools&lt;/li&gt;
&lt;li&gt;Run design system workshops and training sessions&lt;/li&gt;
&lt;li&gt;Collaborate on documentation processes&lt;/li&gt;
&lt;li&gt;Get both designers and developers involved in user testing&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;tools-for-design-system-management&quot;&gt;&lt;strong&gt;Tools for Design System Management&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Tap into design system tools for efficient collaboration. Apply version control and maintenance strategies to keep your system up-to-date and cohesive.&lt;/p&gt;
&lt;p&gt;Recommended tools and practices to consider:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Design tools:&lt;/strong&gt; Figma, Sketch, Adobe XD&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Version control:&lt;/strong&gt; Git, Abstract&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documentation:&lt;/strong&gt; Storybook, Zeroheight&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Collaboration:&lt;/strong&gt; InVision, Miro&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code management:&lt;/strong&gt; GitHub, GitLab&lt;/li&gt;
&lt;li&gt;Regular audits and updates to the design system&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;future-proofing-your-visual-design-system&quot;&gt;&lt;strong&gt;Future-Proofing Your Visual Design System&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Stay ahead and adapt to tech advances by incorporating responsive design principles. Prepare for emerging design trends and technologies to ensure your design system remains relevant and effective.&lt;/p&gt;
&lt;p&gt;Keep an eye on emerging tech such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Voice user interfaces (VUI)&lt;/li&gt;
&lt;li&gt;Augmented and virtual reality (AR/VR)&lt;/li&gt;
&lt;li&gt;Artificial intelligence and machine learning integration&lt;/li&gt;
&lt;li&gt;Dark mode and other user preferences&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lastly, keep an eye on emerging display technologies, such as foldable screens, which may require adaptations to your design system.&lt;/p&gt;
&lt;h2 id=&quot;evolving-with-your-brand&quot;&gt;&lt;strong&gt;Evolving with Your Brand&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Your brand will evolve, and your design system should too. Regularly update and refine your visual elements to stay in tune with your brand’s growth and the ever-changing tech landscape.&lt;/p&gt;
&lt;p&gt;Here’s some tips for keeping your design system up to date:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Check it yearly to see if it’s working well.&lt;/li&gt;
&lt;li&gt;Ask users what they think about it regularly.&lt;/li&gt;
&lt;li&gt;Keep an eye on what’s new in your industry and what your competitors are doing.&lt;/li&gt;
&lt;li&gt;Make small, frequent updates instead of big changes all at once.&lt;/li&gt;
&lt;li&gt;Try to keep things familiar for users while still making needed improvements.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;recap-of-key-concepts&quot;&gt;&lt;strong&gt;Recap of Key Concepts&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;A well-executed visual design system is transformative. It empowers your brand, ensures consistency, and enhances user experience. By investing in a strong design system, you set your brand up for sustained success in the digital era.&lt;/p&gt;
&lt;p&gt;Final thoughts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A design system is a living entity that requires ongoing care and attention&lt;/li&gt;
&lt;li&gt;It’s a powerful tool for aligning teams and streamlining workflows&lt;/li&gt;
&lt;li&gt;The benefits of a robust design system extend far beyond aesthetics, impacting user satisfaction, brand perception, and overall business success&lt;/li&gt;
&lt;li&gt;As technology evolves, your design system should adapt while maintaining its core principles&lt;/li&gt;
&lt;li&gt;Remember that the ultimate goal is to create meaningful, cohesive experiences for your users&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, there you have it. Your design system isn’t merely a library full of pretty components — it’s the backbone of your brand’s digital presence. It’s your secret weapon for creating knockout user experiences and keeping your team on the same page.&lt;/p&gt;
&lt;p&gt;But remember, you can’t just set it and forget it. Your design system needs love and attention to stay fresh and relevant. Keep an eye on what’s happening in your industry, listen to your users, and don’t be afraid to make tweaks along the way.&lt;/p&gt;
&lt;p&gt;It’s all about your users. Every decision you make should be geared towards giving them a smooth, enjoyable experience. Building a design system isn’t for the faint of heart, but if you can stick with it and stay consistent, your brand (and your future self) will be much better off in the long run.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>WA 3.12: Figma Design Kit 3.0, Dropdown Links, Plus Tooltip Fixes</title>
    <link href="https://blog.fontawesome.com/web-awesome-3-12/" />
    <updated>2026-08-21T23:03:27Z</updated>
    <id>https://blog.fontawesome.com/web-awesome-3-12/</id>
    <content type="html">&lt;p&gt;🎨 &lt;strong&gt;Figma Design Kit 3.0&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The Official Figma Design Kit has hit its 3.0 version. We’ve added ten new components, closing the gap between Figma and the library:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Accordion&lt;/li&gt;
&lt;li&gt;Checkbox Group&lt;/li&gt;
&lt;li&gt;Date Input&lt;/li&gt;
&lt;li&gt;Date Picker&lt;/li&gt;
&lt;li&gt;File Input&lt;/li&gt;
&lt;li&gt;Known Date&lt;/li&gt;
&lt;li&gt;OTP Input&lt;/li&gt;
&lt;li&gt;Time Input&lt;/li&gt;
&lt;li&gt;Toast&lt;/li&gt;
&lt;li&gt;Video&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Additional variables, slots, and sizing options have been added as well. The full list of updates can be found &lt;a href=&quot;https://webawesome.com/docs/resources/figma#version-history&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;🔗 &lt;strong&gt;Links in &amp;lt;wa-dropdown-item&amp;gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;wa-dropdown-item&amp;gt;&lt;/code&gt; now accepts &lt;code&gt;href&lt;/code&gt;, &lt;code&gt;target&lt;/code&gt;, &lt;code&gt;rel&lt;/code&gt;, and &lt;code&gt;download&lt;/code&gt;, which gives it the ability to act like a real link. &lt;code&gt;⌘/Ctrl&lt;/code&gt; will still open the link in a new tab (except in Safari). Items with a submenu ignore &lt;code&gt;href&lt;/code&gt;, there’s also a new &lt;code&gt;link&lt;/code&gt; custom state.&lt;/p&gt;
&lt;p&gt;💬 &lt;strong&gt;Tooltip Fixes&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;wa-tooltip&amp;gt;&lt;/code&gt; now respects a canceled &lt;code&gt;wa-hide&lt;/code&gt; event and stays open. Tooltips with trigger=”email” will no longer close on Escape.&lt;/p&gt;
&lt;p&gt;🧰 &lt;strong&gt;There’s Always More&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;There’s also a bunch fixes, namely focus ring on &lt;code&gt;&amp;lt;wa-switch&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;wa-select&amp;gt;&lt;/code&gt;‘s clear button click target, &lt;code&gt;&amp;lt;wa-input&amp;gt;&lt;/code&gt; password toggle, &lt;code&gt;&amp;lt;wa-dropdown&amp;gt;&lt;/code&gt;‘s &lt;code&gt;aria-posinset/aria-setsize&lt;/code&gt;, &lt;code&gt;&amp;lt;wa-data-grid&amp;gt;&lt;/code&gt; filtering and layout and more.&lt;/p&gt;
&lt;p&gt;The full list of fixes can be found on the &lt;a href=&quot;https://webawesome.com/docs/resources/changelog&quot;&gt;changelog&lt;/a&gt;.&lt;a href=&quot;https://app.basecamp.com/4301850/buckets/33321158/boosts/new?boost%5Bboostable_gid%5D=Z2lkOi8vYmMzL1JlY29yZGluZy8xMDIyNTMzMjMzMQ&quot;&gt;&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How Does Web Awesome Stack Up Against Shoelace?</title>
    <link href="https://blog.fontawesome.com/how-does-web-awesome-stack-up-against-shoelace/" />
    <updated>2026-08-17T16:37:18Z</updated>
    <id>https://blog.fontawesome.com/how-does-web-awesome-stack-up-against-shoelace/</id>
    <content type="html">&lt;p&gt;The latest release of Shoelace shipped on March 11, 2025. It’s still on npm, it’s still two lines away from any HTML page, and it still works as well today as it did the day it went out.&lt;/p&gt;
&lt;p&gt;It’s also the last Shoelace release there’s ever going to be.&lt;/p&gt;
&lt;p&gt;None of that is news. &lt;a href=&quot;https://blog.fontawesome.com/web-awesome-component-library/&quot;&gt;We launched Web Awesome back in October&lt;/a&gt;, and the banner has been sitting on the Shoelace docs ever since. So I’m not here to tell you it happened. I’m here to answer the question everyone keeps asking:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Why should I switch to Web Awesome?&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;video height=&quot;720&quot; style=&quot;aspect-ratio: 1280 / 720;&quot; width=&quot;1280&quot; autoplay=&quot;&quot; loop=&quot;&quot; muted=&quot;&quot; src=&quot;https://blog.fontawesome.com/how-does-web-awesome-stack-up-against-shoelace/what-is-wa-sC1xfnCTCorp.mp4&quot; playsinline=&quot;&quot;&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;“Because it’s the successor” doesn’t cut it when you’ve got an app full of &lt;code&gt;sl-&lt;/code&gt; tags and a manager asking why you want to spend a week on this.&lt;/p&gt;
&lt;p&gt;So let’s put them side by side. Nothing breaks tomorrow if you stay put, but the case is better than most folks realize, and it’s a lot more than a rename.&lt;/p&gt;
&lt;h2 id=&quot;what-actually-changed&quot;&gt;What Actually Changed&lt;/h2&gt;
&lt;p&gt;Shoelace was a component library. Web Awesome is a design system.&lt;/p&gt;
&lt;p&gt;That sounds like something a marketing page says, so let me be specific. Shoelace gave you 58 components, a set of &lt;code&gt;--sl-*&lt;/code&gt; tokens, and a light and dark theme. Everything else was your problem: layout, typography, spacing, the styling of your plain old &lt;code&gt;&amp;lt;table&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;h2&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;video height=&quot;720&quot; style=&quot;aspect-ratio: 1152 / 720;&quot; width=&quot;1152&quot; autoplay=&quot;&quot; loop=&quot;&quot; muted=&quot;&quot; src=&quot;https://blog.fontawesome.com/how-does-web-awesome-stack-up-against-shoelace/wa-components-v7N0ahBwgoHW.mp4&quot; playsinline=&quot;&quot;&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Web Awesome 3.11 gives you 70 free components &lt;em&gt;plus&lt;/em&gt; the rest of the page. Native element styles. Layout and typography utilities. Eleven themes. Nine color palettes. A theming API that goes deeper than swapping two stylesheets.&lt;/p&gt;
&lt;p&gt;And it’s still free and open source under the MIT license. That part was never negotiable.&lt;/p&gt;
&lt;h2 id=&quot;what-folks-probably-care-about-the-most&quot;&gt;What Folks (Probably) Care About the Most&lt;/h2&gt;
&lt;p&gt;There are components you couldn’t build with Shoelace without writing your own. &lt;code&gt;&amp;lt;wa-callout&amp;gt;&lt;/code&gt; for inline messaging. &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/popover/&quot;&gt;&amp;lt;wa-popover&amp;gt;&lt;/a&gt;&lt;/code&gt; for anchored content that isn’t a tooltip and isn’t a dropdown. &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/scroller/&quot;&gt;&amp;lt;wa-scroller&amp;gt;&lt;/a&gt;&lt;/code&gt; for overflow containers with real scroll affordances. Then &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/accordion/&quot;&gt;&amp;lt;wa-accordion&amp;gt;&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/page/&quot;&gt;&amp;lt;wa-page&amp;gt;&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/number-input/&quot;&gt;&amp;lt;wa-number-input&amp;gt;&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/time-input/&quot;&gt;&amp;lt;wa-time-input&amp;gt;&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/zoomable-frame/&quot;&gt;&amp;lt;wa-zoomable-frame&amp;gt;&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/intersection-observer/&quot;&gt;&amp;lt;wa-intersection-observer&amp;gt;&lt;/a&gt;&lt;/code&gt;, and more.&lt;/p&gt;
&lt;p&gt;Your plain HTML gets styled, too. Web Awesome ships a &lt;code&gt;native.css&lt;/code&gt; layer that styles real elements: headings, tables, form controls, &lt;code&gt;&amp;lt;figcaption&amp;gt;&lt;/code&gt;, the works. If you were around for the &lt;a href=&quot;https://www.abeautifulsite.net/posts/shoelacecss-a-back-to-the-basics-css-starter-kit/&quot;&gt;original Shoelace&lt;/a&gt; in 2017, that might feel a little familiar. That project was a CSS starter kit before it was ever a component library. It took me about nine years, but the idea made it back in&lt;/p&gt;
&lt;p&gt;You get CSS utilities, too. Layout primitives like &lt;code&gt;wa-stack&lt;/code&gt;, &lt;code&gt;wa-cluster&lt;/code&gt;, and &lt;code&gt;wa-split&lt;/code&gt;. Gap, alignment, border radius, and text utilities. A &lt;code&gt;wa-prose&lt;/code&gt; class for long-form content. Nothing resembling a build step.&lt;/p&gt;
&lt;p&gt;Component styles live in &lt;code&gt;@layer wa-component&lt;/code&gt;, which means your unlayered CSS wins by default. Go delete your &lt;code&gt;!important&lt;/code&gt; declarations. I’ll wait.&lt;/p&gt;
&lt;p&gt;Icons are Font Awesome by default instead of Bootstrap Icons, and if you have a Font Awesome Pro Kit, that works too.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/5Vlc6D12ua-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/5Vlc6D12ua-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/5Vlc6D12ua-1440.png&quot; alt=&quot;4 Font Awesome icons on a navy background: shoe, right arrow, Web Awesome crown, smiley face with sunglasses&quot; width=&quot;1440&quot; height=&quot;372&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;There’s server-side rendering. As of 3.8, components render on the server via Declarative Shadow DOM and hydrate when your JavaScript arrives. Less layout shift, better first paint. It’s experimental, but it’s real and people are using it.&lt;/p&gt;
&lt;p&gt;And there’s a theme called Shoelace. There’s a built-in &lt;code&gt;shoelace&lt;/code&gt; theme and a matching &lt;code&gt;shoelace&lt;/code&gt; color palette, so you can migrate the markup without explaining to your designer why every button looks different on Monday.&lt;/p&gt;
&lt;p&gt;&lt;video height=&quot;920&quot; style=&quot;aspect-ratio: 1920 / 920;&quot; width=&quot;1920&quot; autoplay=&quot;&quot; loop=&quot;&quot; muted=&quot;&quot; src=&quot;https://blog.fontawesome.com/how-does-web-awesome-stack-up-against-shoelace/shoelace-theme-yiqONypzNLgt.mp4&quot; playsinline=&quot;&quot;&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;It installs the way it always has. Paste a stylesheet and a module script into your &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt;, served from our own CDN, and start writing tags. Or &lt;code&gt;npm install @awesome.me/webawesome&lt;/code&gt; and bundle it like anything else. No framework, no wrapper, no build step you weren’t already running.&lt;/p&gt;
&lt;h2 id=&quot;side-by-side&quot;&gt;Side by Side&lt;/h2&gt;
&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Shoelace 2&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Web Awesome Core&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Web Awesome Pro&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Status&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Sunset, 2.20.1, March 2025&lt;/td&gt;&lt;td&gt;Active, 3.10.0, June 2026&lt;/td&gt;&lt;td&gt;Active&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;License&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;MIT&lt;/td&gt;&lt;td&gt;MIT&lt;/td&gt;&lt;td&gt;Commercial, alongside the MIT core&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Components&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;66&lt;/td&gt;&lt;td&gt;Everything free, plus the list below&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Icons&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Bootstrap Icons&lt;/td&gt;&lt;td&gt;Font Awesome Free&lt;/td&gt;&lt;td&gt;Font Awesome Pro via Kit&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Themes&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Light + dark&lt;/td&gt;&lt;td&gt;Default, Awesome, Shoelace&lt;/td&gt;&lt;td&gt;8 more (Active, Brutalist, Glossy, Matter, Mellow, Playful, Premium, Tailspin)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Color palettes&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Native element styles&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;CSS utilities&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Cascade layers&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;&lt;span style=&quot;font-family: -webkit-standard; white-space: normal;&quot;&gt;✅&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Server-side rendering&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Theme Builder&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Pattern library&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Hosted projects + CDN&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Figma design kit&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;–&lt;/td&gt;&lt;td&gt;✅&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Support&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Community&lt;/td&gt;&lt;td&gt;Community + us&lt;/td&gt;&lt;td&gt;Priority support&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Price&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Free&lt;/td&gt;&lt;td&gt;Free&lt;/td&gt;&lt;td&gt;&lt;a href=&quot;https://webawesome.com/purchase&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Commercial license&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Pro components, for the record: &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/combobox/&quot;&gt;&amp;lt;wa-combobox&amp;gt;&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/file-input/&quot;&gt;&amp;lt;wa-file-input&amp;gt;&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/date-picker/&quot;&gt;&amp;lt;wa-date-picker&amp;gt;&lt;/a&gt;&lt;/code&gt;, &lt;a href=&quot;https://webawesome.com/docs/components/date-input/&quot;&gt;&lt;code&gt;&amp;lt;wa-date-input&amp;gt;&lt;/code&gt;,&lt;/a&gt; &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/video/&quot;&gt;&amp;lt;wa-video&amp;gt;&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/video-playlist/&quot;&gt;&amp;lt;wa-video-playlist&amp;gt;&lt;/a&gt;&lt;/code&gt;, &lt;code&gt;&lt;a href=&quot;https://webawesome.com/docs/components/sparkline/&quot;&gt;&amp;lt;wa-sparkline&amp;gt;&lt;/a&gt;&lt;/code&gt;, and the Chart.js-backed chart family (bar, line, pie, doughnut, bubble, radar, scatter, and polar area). A data grid is on the way.&lt;/p&gt;
&lt;h2 id=&quot;a-word-about-pro&quot;&gt;A Word About Pro&lt;/h2&gt;
&lt;p&gt;I’d rather you hear this from me than figure it out halfway through a migration.&lt;/p&gt;
&lt;p&gt;Web Awesome Pro exists so Web Awesome Core can keep existing. Every subscription pays for the bug fixes and the new components that everyone gets, free users included. Pro just moves you to the front of the line when you need a hand. Over 7,000 people backed the Kickstarter to make that model work, and I’m still a bit stunned by it.&lt;/p&gt;
&lt;p&gt;Almost none of your migration touches Pro. The components you built your Shoelace app with are in Core, and that’s where they’re staying. The one place Pro comes up is if you had a second library bolted onto Shoelace for charts, comboboxes, or the like. Those live in Pro now, and moving to a first-party version is optional, not required.&lt;/p&gt;
&lt;h2 id=&quot;how-hard-is-this-really&quot;&gt;How Hard Is This, Really?&lt;/h2&gt;
&lt;p&gt;Less hard than you’re expecting.&lt;/p&gt;
&lt;p&gt;Most components migrate on a &lt;code&gt;sl-&lt;/code&gt; to &lt;code&gt;wa-&lt;/code&gt; rename and nothing else, which covers roughly two thirds of the library. Tokens go from &lt;code&gt;--sl-*&lt;/code&gt; to &lt;code&gt;--wa-*&lt;/code&gt;. &lt;code&gt;variant=&amp;quot;primary&amp;quot;&lt;/code&gt; becomes &lt;code&gt;variant=&amp;quot;brand&amp;quot;&lt;/code&gt;. The &lt;code&gt;outline&lt;/code&gt; and &lt;code&gt;filled&lt;/code&gt; booleans became &lt;code&gt;appearance=&amp;quot;outlined&amp;quot;&lt;/code&gt;and &lt;code&gt;appearance=&amp;quot;filled&amp;quot;&lt;/code&gt;. Slots named &lt;code&gt;prefix&lt;/code&gt; and &lt;code&gt;suffix&lt;/code&gt; are now &lt;code&gt;start&lt;/code&gt; and &lt;code&gt;end&lt;/code&gt;. &lt;code&gt;help-text&lt;/code&gt; is now &lt;code&gt;hint&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;A handful of things changed shape rather than name. &lt;code&gt;&amp;lt;sl-menu&amp;gt;&lt;/code&gt; became &lt;code&gt;&amp;lt;wa-dropdown&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;sl-range&amp;gt;&lt;/code&gt; became &lt;code&gt;&amp;lt;wa-slider&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;sl-image-comparer&amp;gt;&lt;/code&gt; became &lt;code&gt;&amp;lt;wa-comparison&amp;gt;&lt;/code&gt;, and &lt;code&gt;&amp;lt;sl-visually-hidden&amp;gt;&lt;/code&gt; is now a &lt;code&gt;wa-visually-hidden&lt;/code&gt; utility class you can put on anything.&lt;/p&gt;
&lt;p&gt;The parts that bite quietly are event listener strings, &lt;code&gt;::part()&lt;/code&gt; selectors, and icon names. None of those throw an error. They just stop doing what you expected. Color scales also inverted, so &lt;code&gt;--sl-color-primary-600&lt;/code&gt; doesn’t map to the number you’d guess.&lt;/p&gt;
&lt;p&gt;All of it is written down in the &lt;a href=&quot;https://webawesome.com/docs/resources/migrating-from-shoelace/&quot;&gt;migration guide&lt;/a&gt;, along with a &lt;a href=&quot;https://webawesome.com/docs/resources/migration-checklist&quot;&gt;checklist&lt;/a&gt; you can work through file by file. The guide also includes a prompt you can hand to a coding agent, and it’ll do most of the mechanical work for you. I was skeptical about including that. Then I watched it migrate a real project in an afternoon.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/xiFOU83X3A-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/xiFOU83X3A-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/xiFOU83X3A-1440.png&quot; alt=&quot;Screenshot of the intro paragraph of the interactive Shoelace migration checklist&quot; width=&quot;1440&quot; height=&quot;690&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;should-you-migrate&quot;&gt;Should You Migrate?&lt;/h2&gt;
&lt;p&gt;If your Shoelace app is stable and shipped and you’re not touching it, no, you don’t need to do anything this week. It’ll keep working.&lt;/p&gt;
&lt;p&gt;But there won’t be another Shoelace release. No new components, no fixes, no answers on the issue tracker. Every hour of work is going into Web Awesome now. If you’re actively building on Shoelace, every new feature you ship is more code you’ll eventually have to migrate. The sooner you switch, the less of it there is.&lt;/p&gt;
&lt;p&gt;&lt;video height=&quot;720&quot; style=&quot;aspect-ratio: 1280 / 720;&quot; width=&quot;1280&quot; autoplay=&quot;&quot; loop=&quot;&quot; muted=&quot;&quot; src=&quot;https://blog.fontawesome.com/how-does-web-awesome-stack-up-against-shoelace/you-want-more-caption-aRNTM3624AwK.mp4&quot; playsinline=&quot;&quot;&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Start with the &lt;a href=&quot;https://webawesome.com/docs/resources/migrating-from-shoelace/&quot;&gt;migration guide&lt;/a&gt;. Pick one page. Rename one prefix. It’s usually much easier than it sounds.&lt;/p&gt;
&lt;h2 id=&quot;thank-you&quot;&gt;Thank You&lt;/h2&gt;
&lt;p&gt;More than a year after the last release, Shoelace is still serving &lt;a href=&quot;https://www.jsdelivr.com/package/npm/@shoelace-style/shoelace&quot;&gt;over two million requests a month&lt;/a&gt; on jsDelivr alone. That’s all of you, still building things. Every issue, every PR, every “hey, this is broken” in Discord got the project further than I could have taken it alone, and Web Awesome is that same project with more people and more hours behind it.&lt;/p&gt;
&lt;p&gt;Come see what we’ve built. And keep building awesome stuff!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How to Build and Style Your Visual Design System [Part III]</title>
    <link href="https://blog.fontawesome.com/how-to-build-a-visual-design-system/" />
    <updated>2026-08-13T20:41:46Z</updated>
    <id>https://blog.fontawesome.com/how-to-build-a-visual-design-system/</id>
    <content type="html">&lt;p&gt;If &lt;a href=&quot;https://blog.fontawesome.com/visual-cohesion-design-systems/&quot;&gt;Part 1&lt;/a&gt; was the pitch and &lt;a href=&quot;https://blog.fontawesome.com/design-system-components/&quot;&gt;Part 2&lt;/a&gt; was the parts list, this is your build guide. We’re getting hands-on — auditing what you’ve got, defining what you need, and laying the groundwork for a system that actually scales.&lt;/p&gt;
&lt;h2 id=&quot;conduct-a-visual-audit&quot;&gt;&lt;strong&gt;Conduct a Visual Audit&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;First, start with a visual audit. Assess your current design elements to see what’s working, what’s not, and where there’s room for improvement. This step is crucial for aligning your visuals with your brand’s goals.&lt;/p&gt;
&lt;p&gt;To check your company’s visual style, follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First, make a list of all the pictures, colors, and designs you use. This helps you see what you have.&lt;/li&gt;
&lt;li&gt;Then, look at how these elements appear on different devices so you can spot differences. Figure out what looks good and what needs work in your brand’s style. Ask for opinions from non-design folks in your company to hear different views. Look at what other companies in your field are doing to see how you compare.&lt;/li&gt;
&lt;li&gt;Lastly, use what you’ve learned to set clear goals for making your visual style better and better over time. With your visual audit complete, you’ll need to define the core elements of your design system.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;define-core-elements&quot;&gt;&lt;strong&gt;Define Core Elements&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Next, choose a color palette that speaks to your brand and choose fonts that convey the right personality. These choices lay the foundation for your visual language.&lt;/p&gt;
&lt;h3 id=&quot;color&quot;&gt;Color&lt;/h3&gt;
&lt;p&gt;Keep accessibility in mind from the outset. Colors are hardly effective if they can’t support readable, meaningful pairings. Anticipate which colors may be used together and prepare to check their contrast ratios and adjust as necessary. Grab your favorite contrast tool, like WebAIM’s WCAG 2.1 contrast checker, and set forth!&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/WSLtoslM7o-720.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/WSLtoslM7o-720.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/WSLtoslM7o-720.png&quot; alt=&quot;Color palette swatches in two rows: a top row of three large blocks in light gray, slate blue, and tan/gold; a bottom row of ten smaller swatches in off-white, light gray, warm taupe gray, dark charcoal brown, near-black, black, pale blue-gray, muted medium blue, dark navy, and light beige.&quot; width=&quot;720&quot; height=&quot;186&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Choose a primary brand color. This is the essential color that defines your brand’s personality and promotes brand awareness, like Netflix’s red or Home Depot’s orange. From this color, derive a few lighter tints and darker shades so that you have the flexibility to pair your brand color with other colors while ensuring readable contrast.&lt;/p&gt;
&lt;p&gt;Choose a neutral color to serve as a sort of canvas for your product, again with a few different tints and shades. Generally, these colors will be largely unsaturated and gray, but different products and audiences might warrant something bolder! Taking cues from the 60-30-10 rule of interior design, these colors account for 60%, or a large majority of, your web application, allowing your branded or semantic colors to grab attention. The tints and shades of your neutrals should always offer good contrast with other colors in your product.&lt;/p&gt;
&lt;p&gt;Choose any necessary semantic colors. These colors convey specific meaning to your users, such as red for error states, green for success, and yellow or orange for warning. Depending on your needs, it’s generally a good idea to have tints and shades of each semantic color that can be used for backgrounds, icons, and text against your neutral colors.&lt;/p&gt;
&lt;p&gt;Choose any number of accent colors for your brand. How many and what kind depends on the tone and attitude you want your product to have. Many products stick with just one brand color and their semantic colors, which allows the product to focus on clarity and usability. Other products employ a rainbow’s worth of accent colors, which can create high visual interest (though be careful not to hinder readability). Additional subtle, analogous colors can make your brand feel refined or pastoral, whereas louder, complementary or triadic colors can make your brand feel dynamic and exciting. Different strokes for different folks!&lt;/p&gt;
&lt;p&gt;Circle back to accessibility. Falling in love with a color only to learn that it doesn’t offer great contrast is a unique kind of disappointment. (Believe me, it’s brutal.) But that doesn’t mean you have to kick it to the curb. Take stock of all of the colors in the palette you’ve created and decide on how they should be used in your product. One pairing might work well as paragraph text on a tinted background, while a lower contrast pairing may be well suited for a flashy, bold background with large text.&lt;/p&gt;
&lt;h3 id=&quot;typography&quot;&gt;Typography&lt;/h3&gt;
&lt;p&gt;Choose a font (or two) that conveys the tone of your brand. If your brand’s font is especially unique, consider reserving this font for headings or other eye-catching text. For your body text, you’ll want a highly legible font for easy reading.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/VEOvZMXFI_-717.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/VEOvZMXFI_-717.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/VEOvZMXFI_-717.png&quot; alt=&quot;Typography specimen comparing two typefaces. On the left, a bold serif &#39;AaBbCc&#39; above an italic serif &#39;AaBbCc&#39;. On the right, separated by a vertical divider, a sans-serif typeface showing the full uppercase alphabet with numbers on one line and the full lowercase alphabet with numbers below it.&quot; width=&quot;717&quot; height=&quot;246&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Choose font weights. Loading every possible weight from thin to black won’t make your site very performant. Decide on a few, distinct font weights that you can use to give different emphasis to your text. Variable fonts can make managing font weights especially easy: these fonts combine multiple weights into a single file, reducing its file size and making it a cinch to choose different font weights later if you change your mind.&lt;/p&gt;
&lt;p&gt;Choose font sizes. Typography is key to establishing hierarchy in your content. Font size, in addition to font weight, plays a huge role in this hierarchy. You’ll want enough font sizes to cover different heading levels, body text, and supplementary details. Choosing a consistent ratio between font sizes, otherwise known as a typographic scale, can help ensure there’s enough variation in font sizes so that they’re easy to distinguish, all while maintaining a pleasing visual rhythm.&lt;/p&gt;
&lt;h3 id=&quot;spacing-and-layout&quot;&gt;Spacing and Layout&lt;/h3&gt;
&lt;p&gt;Consider information density. Think about how folks use your product. Do they often need to scan or compare a lot of data? Do they read a page linearly with the goal of absorbing and retaining information? Your users’ goals should inform how densely you pack information on screen. A sales dashboard or an email application, for example, might warrant higher density than marketing materials or an onboarding flow. Once you determine how dense your product should generally be, the spacing rules in your design system should follow suit.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/EGzrDZvRRe-720.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/EGzrDZvRRe-720.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/EGzrDZvRRe-720.png&quot; alt=&quot;Two UI card mockup wireframes side by side, each with dashed guide lines marking padding and spacing. The left card is a product listing for &#39;R2-series Astromech Droid&#39; with a description, a $3,049.99 price, a 4.5-star rating, a &#39;More Details&#39; button, and a cart icon button. The right card is a restaurant listing for &#39;Withywindle Pub and Eatery&#39; in large serif type, with a 4.5-star rating (419 reviews) and three tag pills: &#39;Gastropub,&#39; &#39;Cocktails,&#39; and &#39;Vegetarian.&#39;&quot; width=&quot;720&quot; height=&quot;216&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Choose a spacing scale. There isn’t a right or wrong way to codify spacing in your design system. Whether you like a linear scale (8, 16, 24, 32, etc.) or a geometric progression (8, 16, 32, 64, etc.), it’s all good! What’s important is that your scale is consistent, easy to design with, and creates a pleasing rhythm that works well for your users’ needs. Here’s a tip: Don’t have so many spacing values that it’s impossible to choose between them. Choosing whether there should be 8px or 16px between elements is much easier than choosing between 8px and 10px.&lt;/p&gt;
&lt;p&gt;Establish responsive layout principles. Your product should be able to adapt to any device and screen size. Media breakpoints, grid systems, and intrinsic sizing are all options for supporting usage on anything from a smartphone to a television. Just promise us you won’t remove functionality on mobile; for many people, smartphones are their sole means to access the web.&lt;/p&gt;
&lt;h2 id=&quot;craft-a-visual-language&quot;&gt;&lt;strong&gt;Craft a Visual Language&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Crafting a visual language involves creating guidelines for imagery and graphics. These guidelines ensure cohesive storytelling across all platforms, reinforcing your brand’s identity at every touchpoint.&lt;/p&gt;
&lt;p&gt;Examples of a visual language may include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Illustration guidelines&lt;/li&gt;
&lt;li&gt;Photography style guide&lt;/li&gt;
&lt;li&gt;Data visualization standards&lt;/li&gt;
&lt;li&gt;Animation principles&lt;/li&gt;
&lt;li&gt;UI component design rules&lt;/li&gt;
&lt;li&gt;Brand voice and tone guidelines&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lastly, even though it’s not about looks, include rules for how your brand should sound in writing. This helps unify your content by giving everything the same voice.&lt;/p&gt;
&lt;p&gt;Fun fact: Studies have shown that incorporating elements of controlled chaos or asymmetry in visual design systems can actually increase user engagement and brand recall. This phenomenon, known as the “Von Restorff effect,” hints at the idea that slightly breaking visual patterns in strategic ways can make certain elements more memorable, adding a dynamic edge to your design system without compromising overall consistency.&lt;/p&gt;
&lt;p&gt;With your color palette locked, your type scale set, and your spacing rules established, you’ve got the bones of a real design system. But there’s one component that deserves its own conversation — one that’s deceptively simple on the surface and surprisingly deep once you get into it. We’re talking about icons. See you in Part 4.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The New Icon Wizard: Build an Icon Nobody’s Ever Made</title>
    <link href="https://blog.fontawesome.com/the-new-icon-wizard-build-an-icon/" />
    <updated>2026-08-04T15:09:54Z</updated>
    <id>https://blog.fontawesome.com/the-new-icon-wizard-build-an-icon/</id>
    <content type="html">&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;A wizard is never late, nor is he early. He arrives precisely when he means to.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;p&gt;The new Icon Wizard just arrived, and it hands you a brand-new toolbox and thousands upon thousands of icons to raid for parts. Stack them, shape them, combine them, resize them, and nudge them. So the next question is: what are you going to build?&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/hOjT8S8_J9-720.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/hOjT8S8_J9-720.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/hOjT8S8_J9-720.png&quot; alt=&quot;The Icon Wizard beta interface. A truck icon with a heart-shaped cutout sits on the canvas, built by combining Font Awesome&#39;s truck and heart icons. Panels show an icon picker on the left, layer and transform controls on the right, and a Save to Kit button below a custom name field reading truck-heart.&quot; width=&quot;720&quot; height=&quot;441&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No prompts, no AI.&lt;/strong&gt; Just you, the tools, and however many layers it takes to get your creation juuuust right.&lt;/p&gt;
&lt;p&gt;Anyone can experiment with the Wizard for free. And if you’ve got a Pro account, you can download your custom creation or save it to a Kit and use it anywhere Font Awesome works.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://fontawesome.com/icons/wizard?medium=social&amp;amp;src=blog&amp;amp;series=icon-wizard-launch&amp;amp;topic=launch&quot; class=&quot;c-button c-button--primary&quot;&gt;&lt;svg class=&quot;c-button__icon fa11ty-icon svg-inline--fa&quot; viewBox=&quot;0 0 576 512&quot;&gt;&lt;use href=&quot;#fas-fa-hand-holding-magic&quot; xlink:href=&quot;#fas-fa-hand-holding-magic&quot;&gt;&lt;/use&gt;&lt;/svg&gt;Conjure an Icon&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;And one more thing: the Wizard is shipping as a beta. So, if something breaks or gets wonky, tell us. That’s what helps make it &lt;s&gt;gooder&lt;/s&gt; better.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;enter-the-conjuring-contest&quot;&gt;Enter the Conjuring Contest!&lt;/h2&gt;
&lt;p&gt;Now onto the fun stuff. Welcome to the Icon Wizard icon-building contest extravaganza (or something like that)! Entry is open to anyone with an active Pro subscription. That’s what lets you save your creation to a Kit and enter it into the running.&lt;/p&gt;
&lt;h3 id=&quot;how-it-works&quot;&gt;How it Works&lt;/h3&gt;
&lt;p&gt;Build something unique with the Wizard, submit it to &lt;a href=&quot;https://fontawesome.com/icons/gallery&quot;&gt;the Gallery&lt;/a&gt; and enter for the chance to win a free year of Font Awesome or some awesome swag. That’s all there is to it! Entries are open &lt;strong&gt;August 3, 2026&lt;/strong&gt; through &lt;strong&gt;September 7, 2026&lt;/strong&gt; and capped at &lt;strong&gt;5 submissions&lt;/strong&gt;, so don’t wait until the last minute. Approved entries typically go live in the gallery within a few business days of review.&lt;/p&gt;
&lt;h3 id=&quot;icon-categories&quot;&gt;Icon Categories&lt;/h3&gt;
&lt;p&gt;We’re judging in four categories, so there’s more than one way to win. You can create an icon that’s…&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Most Useful&lt;/strong&gt; — the icon you’d actually reach for in a real project&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Most Creative&lt;/strong&gt; — the “how did you even think of that?” entries&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Best Remix&lt;/strong&gt; — an existing Font Awesome icon, transformed into something new&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Funniest&lt;/strong&gt; — the one that hits the fa-team’s funny bone sweet spot&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;what-you-get&quot;&gt;What You Get&lt;/h3&gt;
&lt;p&gt;The top prize is a free year of Pro. Category winners get a featured spot in the contest gallery. PLUS a shoutout in a blog post, newsletter, and on social media. Honorable mentions walk away with swag. And if we REALLY like your submission, we may even feature it in a future Font Awesome release.&lt;/p&gt;
&lt;p&gt;Approved entries land in the Icon Wizard Gallery, and it’s not just for browsing. If you see something you like, you can save it straight to one of your own Kits.&lt;/p&gt;
&lt;p&gt;So, go make something awesome. We’d love to see it!&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>WA 3.11: Data Grid, New Components, Plus Free Toast</title>
    <link href="https://blog.fontawesome.com/wa-3-11/" />
    <updated>2026-07-30T18:41:24Z</updated>
    <id>https://blog.fontawesome.com/wa-3-11/</id>
    <content type="html">&lt;p&gt;&lt;em&gt;Everything in its place. 3.11 is about giving rows, pages, characters and parts the structure they’ve been missing.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;📊 &lt;strong&gt;A Place for Your Data&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://webawesome.com/docs/components/data-grid&quot;&gt;&lt;code&gt;&amp;lt;wa-data-grid&amp;gt;&lt;/code&gt;&lt;/a&gt; has arrived as experimental for Pro users. Sort, filter, search, select, reorder, resize and paginate; every row and column falls into place. Large datasets are virtualized automatically, only the rows on screen ever hit the DOM, so scrolling stays smooth whether you’ve got 50 rows or 50,000.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/LNXKd5Nkkk-400.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/LNXKd5Nkkk-400.gif&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;481&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Set &lt;code&gt;data&lt;/code&gt; and &lt;code&gt;columns&lt;/code&gt;, use the features you need, and let the grid do the heavy lifting.&lt;/p&gt;
&lt;p&gt;Don’t have Pro? &lt;a href=&quot;https://webawesome.com/purchase&quot;&gt;Get it here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🔢 &lt;strong&gt;A Place for Every Page , and A Place for Every Character&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Two new experimental components have been added to core, each one giving content some structure:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://webawesome.com/docs/components/pagination&quot;&gt;&amp;lt;wa-pagination&amp;gt;&lt;/a&gt; – set &lt;code&gt;total&lt;/code&gt; and &lt;code&gt;page-size&lt;/code&gt;, and watch long lists get carved into clean, numbered pages with previous/next controls, ready to sync via the &lt;code&gt;wa-page-change&lt;/code&gt; event. Pairs naturally &lt;code&gt;wa-data-grid&lt;/code&gt;, but works anywhere you’re paging through results.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/iFvVupBQMV-400.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/iFvVupBQMV-400.gif&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;75&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://webawesome.com/docs/components/otp-input&quot;&gt;&amp;lt;wa-otp-input&amp;gt;&lt;/a&gt; – a proper segmented input that gives verification code exactly as many slots as you need. With paste handling and keyboard navigation built in, set &lt;code&gt;length&lt;/code&gt; and your’e off.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/7nxsuYO-AZ-400.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/7nxsuYO-AZ-400.gif&quot; alt=&quot;&quot; width=&quot;400&quot; height=&quot;138&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;🍞 Toast Finds a New Home in Core&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://webawesome.com/docs/components/otp-input&quot;&gt;&lt;code&gt;&amp;lt;wa-toast&amp;gt;&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://webawesome.com/docs/components/toast-item&quot;&gt;&lt;code&gt;&amp;lt;wa-toast-item&amp;gt;&lt;/code&gt;&lt;/a&gt; moved from Pro to Core. Now everyone gets stackable, top layer notifications for success messages, errors, and status updates right out of the box. No upgrade required.&lt;/p&gt;
&lt;p&gt;Drop a single &lt;code&gt;&amp;lt;wa-toast&amp;gt;&lt;/code&gt; on your page and call &lt;code&gt;.create()&lt;/code&gt; whenever you need to say something.&lt;/p&gt;
&lt;p&gt;🎠 &lt;strong&gt;Carousels Slides Fall in Line&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://webawesome.com/docs/components/carousel&quot;&gt;&lt;code&gt;&amp;lt;wa-carousel&amp;gt;&lt;/code&gt;&lt;/a&gt; now has &lt;code&gt;addSlide()&lt;/code&gt; and &lt;code&gt;removeSlide()&lt;/code&gt; methods. So you can rearrange slides in and out on the fly, even with loop enabled. Perfect for carousels that use live data instead of a fixed set of slots.&lt;/p&gt;
&lt;p&gt;🧩 &lt;strong&gt;Every Part Gets a Proper Name&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Every component that renders a wrapper element now exposes a CSS part named after the component itself (button, details, carousel, etc.) alongside the current &lt;code&gt;base&lt;/code&gt; part. Same goes for form control labels, which now expose &lt;code&gt;form-control-label&lt;/code&gt;. &lt;code&gt;base&lt;/code&gt; is softly deprecated, it’s not going anywhere for now. This update simply gives you a clearer name to reach for going forward.&lt;/p&gt;
&lt;p&gt;🧰 &lt;strong&gt;Loose Ends? Tidied Up&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;As always, WA 3.11 ships with a bunch of fixes, color picker alpha handling, tree keyboard navigation, dialogs staying open when ad blockers hide them, and much more. Full details in the &lt;a href=&quot;https://webawesome.com/docs/resources/changelog#wa_3110&quot;&gt;changelog&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Until next time! ✌️&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>The Building Blocks of a Visual Design System [Part II]</title>
    <link href="https://blog.fontawesome.com/design-system-components/" />
    <updated>2026-07-23T15:52:06Z</updated>
    <id>https://blog.fontawesome.com/design-system-components/</id>
    <content type="html">&lt;p&gt;Welcome back. &lt;a href=&quot;https://blog.fontawesome.com/visual-cohesion-design-systems/&quot;&gt;In Part 1&lt;/a&gt;, we made the case for why a visual design system is worth caring about. Now it’s time to get into the actual stuff — the design system components that give your system its look, feel, and staying power.&lt;/p&gt;
&lt;p&gt;So. Onto the design system components that make up the ingredients of a design system.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/tGz3ep2GYm-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/tGz3ep2GYm-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/tGz3ep2GYm-1440.png&quot; alt=&quot;four icons on navy background): Four colorful app icons on a navy background: a mint-green color swatch with a diagonal design tool icon, a purple-and-white Aa typography icon, a heart-music-camera-lightning bolt icon in blue, and a two-column layout icon in white and yellow.&quot; width=&quot;1440&quot; height=&quot;372&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;The key design system components include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Color Palette:&lt;/strong&gt; Primary, secondary, and accent colors&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Typography:&lt;/strong&gt; Font families, sizes, and hierarchies&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iconography:&lt;/strong&gt; Style, usage guidelines, and custom icons&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Imagery:&lt;/strong&gt; Photography style, illustration guidelines&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Layout:&lt;/strong&gt; Grid systems, spacing rules, and responsive design principles&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UI Components:&lt;/strong&gt; Buttons, forms, cards, and other reusable elements&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Once you have the basics of a design system nailed down, it’s important to maintain consistency across your entire brand.&lt;/p&gt;
&lt;h2 id=&quot;the-power-of-consistency&quot;&gt;&lt;strong&gt;The Power of Consistency&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Think about the most successful companies; their visual identities are instantly recognizable. Here’s a little anecdote to underscore the point.&lt;/p&gt;
&lt;p&gt;I have a loveable — but not particularly smart — Shi-tzu. And he loses his ever loving mind for pup-uccinos at Starbucks (a tiny cup of whipped cream). I’ve noticed on more than a few occasions that when we walk by a Starbucks, he wags his tail so hard that I start getting anxious that a doggie chiropractor bill may be in my future.&lt;/p&gt;
&lt;p&gt;Now keep in mind, I wasn’t exclaiming to my dog that a pup-uccino was coming his way. But he either sees the sign or smells the coffee and he knows something good is imminent. I’d venture to guess that my dog has a nose for Starbucks and the cue probably isn’t the visual logo. But the point is, brand consistency ensures that every interaction with your brand is familiar and trustworthy. And if a dog can be trained on the consistency of experience, so can people.&lt;/p&gt;
&lt;p&gt;This amusing anecdote illustrates a crucial point about the power of consistent branding. Let’s delve into the advantages of a consistent brand identity and see how it translates to the digital realm.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/oVGUewiKvT-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/oVGUewiKvT-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/oVGUewiKvT-1440.png&quot; alt=&quot;(four-panel UI mockup grid with Approved paw-print stamp overlay): Four design mockup panels stamped Approved: a green text style card with Aa and sample text lines, a color palette and icon panel showing coffee-brand icons overlaid with a red circular Approved stamp featuring a paw print, and a settings/form panel with toggles, star ratings, and a progress ring.&quot; width=&quot;1440&quot; height=&quot;484&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;A consistent brand identity offers lots of pluses in the digital realm. It reduces cognitive load for users, making it easier for them to navigate and interact with your digital products. Consistency also increases brand recall and loyalty, as users become more familiar with your visual language. It also improves user interface learnability, allowing users to quickly understand and navigate your digital platforms. Ultimately, these factors contribute to enhanced overall user satisfaction.&lt;/p&gt;
&lt;h2 id=&quot;why-visual-design-systems-matter&quot;&gt;&lt;strong&gt;Why Visual Design Systems Matter&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;There are many different types and sizes of digital devices. A good design system works well on all of them, making sure users can easily understand and use the product no matter what device they’re on.&lt;/p&gt;
&lt;p&gt;When creating design systems, tech companies need to solve several problems related to making their products work on multiple devices. These include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Making sure the content looks good on all screen sizes&lt;/li&gt;
&lt;li&gt;Accounting for device interaction (like touching a screen vs. using a mouse)&lt;/li&gt;
&lt;li&gt;Making the product run smoothly on devices with different capabilities&lt;/li&gt;
&lt;li&gt;Ensuring the product is usable for people with disabilities across all devices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Solving these problems is important to give users a similar, high-quality experience no matter what device they use. Beyond the nuts and bolts of responsive design lies the art of visual storytelling.&lt;/p&gt;
&lt;h2 id=&quot;branding-beyond-words&quot;&gt;&lt;strong&gt;Branding Beyond Words&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;Visual elements communicate brand values in ways words alone cannot. Believe it or not, visual elements can evoke the feels — subtle though they may be — create connections, and make your brand memorable. A strong visual design system ensures these elements are always aligned with your brand’s message.&lt;/p&gt;
&lt;p&gt;When designing to make people feel something, there are lots of considerations. Colors can affect how people experience your brand. Where some colors might make people feel calm, others might make them feel excited. Using pictures, symbols, or icons that represent ideas can help explain things quickly in a way people will remember.&lt;/p&gt;
&lt;p&gt;When your customer engages with your product, maybe you’ve included small, fun details that show off your brand’s personality and make the experience more enjoyable, and keep users interested.&lt;/p&gt;
&lt;p&gt;You’ve got the design system components in hand Now let’s talk about what to actually &lt;em&gt;do&lt;/em&gt; with them. In Part 3, we walk through a step-by-step process for auditing your current visuals, defining your core elements, and building a system that holds together under real-world pressure.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Pixel This! A Web Awesome Short-Guide to Visual Cohesion in Design Systems </title>
    <link href="https://blog.fontawesome.com/visual-cohesion-design-systems/" />
    <updated>2026-07-09T19:13:16Z</updated>
    <id>https://blog.fontawesome.com/visual-cohesion-design-systems/</id>
    <content type="html">&lt;h2 id=&quot;part-1-why-your-brand-needs-a-visual-design-system&quot;&gt;&lt;strong&gt;Part 1: Why Your Brand Needs a Visual Design System&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;In today’s online landscape, a website’s visual identity plays a critical role because everyone knows a great looking site is more than just aesthetics; it’s about creating a good experience for the user. And this is where a design system comes in. A well-crafted design system can be a transformative tool, ensuring consistency, enhancing usability, and anchoring your brand’s presence across all digital touch points.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/GswTzb2c2Q-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/GswTzb2c2Q-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/GswTzb2c2Q-1440.png&quot; alt=&quot;Four flat icons on navy background: lighthouse, waving hand, speedometer, and expand arrows. &quot; width=&quot;1440&quot; height=&quot;372&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Here’s why it matters&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;User Experience: A cohesive visual system guides users intuitively through your product.&lt;/li&gt;
&lt;li&gt;Brand Recognition: Consistent visuals build trust and familiarity with your audience.&lt;/li&gt;
&lt;li&gt;Efficiency: A design system streamlines the development process, saving time and resources.&lt;/li&gt;
&lt;li&gt;Scalability: As your product grows, a robust system ensures seamless expansion.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;A few more words about user experience and efficiency&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;From the Web Awesome point of view, one of the most powerful influences of visual style on UX is how it informs how the user can expect to interact with the product, creating recognizable patterns so that they can predictably navigate and work the product.&lt;/p&gt;
&lt;p&gt;Visuals that don’t properly set expectations for the user can be perceived as noisy, careless, or distracting, which negatively impacts how a user perceives the ease-of-use of a product.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/zTgfeUYzMz-1439.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/zTgfeUYzMz-1439.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/zTgfeUYzMz-1439.png&quot; alt=&quot;Before-and-after comparison of a subscription plan UI: low-contrast pink version next to a vivid mint-green version with the same layout.&quot; width=&quot;1439&quot; height=&quot;506&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Aesthetics are so important to usability, and it saddens me that UX evangelists can often dismiss their importance as frivolous or superficial — and this makes the Font Awesome ‘Possum sad. 😞 &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;As for efficiency&lt;/strong&gt; … &lt;/p&gt;
&lt;p&gt;A design system makes a product resilient to the whims of designers. Design trends change, and designers often like to be on the frontlines of these changes. Design systems make this not only possible but seamless, allowing us to uniformly change the look and feel of a product with minimal impact to development throughput.&lt;/p&gt;
&lt;p&gt;So in this blog, we’ve covered the &lt;em&gt;why&lt;/em&gt;. But what exactly &lt;em&gt;is&lt;/em&gt; a visual design system made of? Up next, we’ll break down the aesthetic building blocks that bring cohesion to your brand’s look and feel. Spoiler alert: color theory nerds, you’re gonna love it!&lt;/p&gt;
</content>
  </entry>
</feed>