<?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-11-05T16:31:23Z</updated>
  <id>https://blog.fontawesome.com/</id>
  <author>
    <name>Font Awesome</name>
  </author>
  <entry>
    <title>Font Awesome’s Key Pages Are Now Readable by AI Agents</title>
    <link href="https://blog.fontawesome.com/blog-key-pages-readable-by-ai-agents/" />
    <updated>2026-11-05T16:31:23Z</updated>
    <id>https://blog.fontawesome.com/blog-key-pages-readable-by-ai-agents/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;Need input!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Gee willikers, this is a little embarrassing. Maybe you noticed our homepage has a section promoting our AI agent tools, install command and all, sitting right there in a cute little code block? Well, we checked what an AI agent actually sees when it reads that page. Aaaand the install command showed up exactly zero times. Turns out a lot of our site wasn’t readable by AI agents at all.&lt;/p&gt;
&lt;h2 id=&quot;what-an-ai-agent-actually-sees&quot;&gt;What an AI Agent Actually Sees&lt;/h2&gt;
&lt;p&gt;The reason is pretty basic. fontawesome.com is built as a JavaScript app. Your browser runs that JavaScript and draws the page for you. Most AI agents don’t. The agents grab the raw HTML and work from that, and for a big chunk of our site, the raw HTML was an empty shell. Our license, plans, and changelog pages each came back as about 20KB of code without a single sentence of actual text.&lt;/p&gt;
&lt;p&gt;These days that matters more than it used to. A growing number of developers size up a library by asking an AI assistant about it with questions like … “can I use Pro icons in a client project?”, “can I use the free icons in a commercial project?”, “what’s included in each plan?”, “what changed in the latest release?”, and so on. If the assistant goes to our site for the answer and comes up short, it either shrugs or guesses. And a guess about licensing terms is worse than silence.&lt;/p&gt;
&lt;h2 id=&quot;our-key-pages-now-in-plain-text&quot;&gt;Our Key Pages, Now in Plain Text&lt;/h2&gt;
&lt;p&gt;So, in honor of fixing the uninteresting stuff, as of October 20, our key pages come in plain text. The &lt;a href=&quot;https://fontawesome.com/changelog&quot;&gt;changelog&lt;/a&gt;, &lt;a href=&quot;https://fontawesome.com/plans/platform&quot;&gt;Pro license,&lt;/a&gt; &lt;a href=&quot;https://fontawesome.com/license/free&quot;&gt;Free license&lt;/a&gt;, &lt;a href=&quot;https://fontawesome.com/plans&quot;&gt;plans&lt;/a&gt;, &lt;a href=&quot;https://fontawesome.com/privacy&quot;&gt;privacy,&lt;/a&gt; and &lt;a href=&quot;https://fontawesome.com/refunds&quot;&gt;refunds&lt;/a&gt; pages are now also published as markdown, a plain-text format AI agents read easily. Ask an assistant what either Font Awesome license allows, and it reads the for reals, actual license. That Free license page matters a lot: millions of people use Font Awesome Free, and they deserve a straight answer too. Ask what’s new in Font Awesome, and it reads the legit changelog. We focused on these pages because they’re where a wrong answer costs you the most, whether that’s a licensing mistake, a surprise on your bill, or a missed feature.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/vsxbZtrIUF-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/vsxbZtrIUF-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/vsxbZtrIUF-1440.png&quot; alt=&quot;4 Font Awesome icons on a navy background: signed file, code comparison, closed lock, hand holding a coin&quot; width=&quot;1440&quot; height=&quot;372&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;a-front-door-for-agents&quot;&gt;A Front Door for Agents&lt;/h2&gt;
&lt;p&gt;We also gave agents a place to start. Our docs site already had an llms.txt file, and now the main site does too. &lt;a href=&quot;https://fontawesome.com/llms.txt&quot;&gt;fontawesome.com/llms.txt&lt;/a&gt; is a short, plain-text index, following an emerging convention for helping AI tools find their way around a site. It links to all of these markdown pages, plus our docs and our AI agent tools, so an agent doesn’t have to guess where to look.&lt;/p&gt;
&lt;h2 id=&quot;a-real-table-for-every-kind-of-reader&quot;&gt;A Real Table for Every Kind of Reader&lt;/h2&gt;
&lt;p&gt;And there’s a happy side effect to all this. The plan comparison grid on our plans page looked like a table but was built from styled boxes. Agents saw it as a jumble of loose paragraphs, and so did screen readers. We rebuilt it as a real table, so screen readers got their proper rows and columns back, and agents get the real table too. So when an assistant needs to know which plans include the &lt;a href=&quot;https://docs.fontawesome.com/desktop/add-icons/figma-plugin&quot;&gt;Figma plugin&lt;/a&gt;, or how many custom icons come with Solo, it reads the answer straight off the table. It’s one fix that helps two very different kinds of readers.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/iomMTPVPTH-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/iomMTPVPTH-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/iomMTPVPTH-1440.png&quot; alt=&quot;4 Font Awesome icons on a navy background: loose rectangle grid, woozy face, table layout, checkmark&quot; width=&quot;1440&quot; height=&quot;372&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;not-sexy-just-readable&quot;&gt;Not Sexy, Just Readable&lt;/h2&gt;
&lt;p&gt;Now, we know none of this is particularly sexy, and that’s sort of the point. The fix for “AI can’t read our site” turned out to be plain text, written down, where anything can read it. And those AI agent tools from our homepage, the ones agents couldn’t see? Our llms.txt points right to them.&lt;/p&gt;
&lt;h2 id=&quot;your-assistant-minus-the-guessing&quot;&gt;Your Assistant, Minus the Guessing&lt;/h2&gt;
&lt;p&gt;Here’s the thing, though. Pages your assistant can read are only half the story. A while back, we shipped AI agent tools that keep your coding assistant from guessing about icons, too. Instead of inventing a class name that sounds right, it checks your actual Kit and gets the real icon back, custom icons included. Put that together with this update, and your assistant doesn’t have to guess about Font Awesome, period. Not the icons, not the license, not the plans.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/Of-hF-Md_R-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/Of-hF-Md_R-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/Of-hF-Md_R-1440.png&quot; alt=&quot;4 Font Awesome icons on a navy background: markdown file, robot head, briefcase, clipboard checklist&quot; width=&quot;1440&quot; height=&quot;372&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;p&gt;Give your assistant the real answers →&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.fontawesome.com/font-awesome-ai-agent-tools/&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 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;Read More!&lt;/a&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Add Kits, Pageviews, and More Without Upgrading Your Plan</title>
    <link href="https://blog.fontawesome.com/add-without-upgrading/" />
    <updated>2026-10-08T14:13:54Z</updated>
    <id>https://blog.fontawesome.com/add-without-upgrading/</id>
    <content type="html">&lt;blockquote&gt;
&lt;p&gt;“But I was going into Tosche Station to pick up some power converters!”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Until now, outgrowing one part of your Font Awesome plan meant upgrading the whole thing. If you ran out of Kits while your pageviews and bandwidth were fine as-is, the only fix was moving up a tier and paying for a pile of extras you’d never use.&lt;/p&gt;
&lt;p&gt;That never felt right to us. If you love Solo and just need a few more Kits, you should be able to get a few more Kits.&lt;/p&gt;
&lt;p&gt;Now you can. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;(There’s no Uncle Owen blocking you now. You get those power converters, kid.)&lt;/em&gt; &lt;/p&gt;
&lt;h2 id=&quot;meet-plan-add-ons&quot;&gt;Meet plan add-ons&lt;/h2&gt;
&lt;p&gt;Paid plans can now add extra capacity exactly where you need it, and nowhere else:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kits:&lt;/strong&gt; 5 Kits for $10&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom Icons:&lt;/strong&gt; 100 Custom Icons for $5&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pageviews:&lt;/strong&gt; 250K pageviews/mo for $18/yr&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bandwidth:&lt;/strong&gt; 1 GB/mo for $9/yr&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pick what you need from one screen and see your total before you confirm. Add-ons renew with your subscription, so there’s nothing extra to track.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/xXhlgKFNEL-1440.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/xXhlgKFNEL-1440.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/xXhlgKFNEL-1440.png&quot; alt=&quot;4 Font Awesome icons on a navy background: briefcase, pen nib, eye, pipe with valve&quot; width=&quot;1440&quot; height=&quot;372&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;cheaper-than-overages-on-purpose&quot;&gt;Cheaper than overages, on purpose&lt;/h2&gt;
&lt;p&gt;Overage billing is still there as a safety net if your traffic spikes unexpectedly. But if you already know you’ll need more pageviews or bandwidth, an add-on costs about 25% less than paying overages for the same usage. Unpredictable spikes can fall back on overages. Predictable growth is cheaper as an add-on. And add-ons are great for consistent billing, if you would rather have your bill be the same each month.&lt;/p&gt;
&lt;h2 id=&quot;need-a-lot-more&quot;&gt;Need a lot more?&lt;/h2&gt;
&lt;p&gt;Add-ons cover most everyday growth. If you need more than you can add yourself, reach out and our Actual Human™ Support team (ahem, Trevor) will help you find the right setup.&lt;/p&gt;
&lt;p&gt;&lt;picture&gt;&lt;source type=&quot;image/avif&quot; srcset=&quot;https://blog.fontawesome.com/img/built/S3QbCWsb8y-720.avif&quot;&gt;&lt;source type=&quot;image/webp&quot; srcset=&quot;https://blog.fontawesome.com/img/built/S3QbCWsb8y-720.webp&quot;&gt;&lt;img loading=&quot;lazy&quot; decoding=&quot;async&quot; src=&quot;https://blog.fontawesome.com/img/built/S3QbCWsb8y-720.png&quot; alt=&quot;4 Font Awesome icons on a navy background: upward chart on a monitor, plug plus, headset, control panel with sliders&quot; width=&quot;720&quot; height=&quot;186&quot;&gt;&lt;/picture&gt;&lt;/p&gt;
&lt;h2 id=&quot;check-out-your-add-on-options&quot;&gt;Check out your add-on options&lt;/h2&gt;
&lt;p&gt;Head to the &lt;a href=&quot;https://fontawesome.com/account/billing&quot;&gt;Billing section of your Account&lt;/a&gt; and then click the &lt;strong&gt;Manage Add-ons&lt;/strong&gt; button to see what’s available for your plan. It takes about a minute, and you won’t have to switch anything.&lt;/p&gt;
</content>
  </entry>
  <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; data-wp-init=&quot;callbacks.stopAutoplay&quot; data-wp-interactive=&quot;core/video&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; data-wp-init=&quot;callbacks.stopAutoplay&quot; data-wp-interactive=&quot;core/video&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; data-wp-init=&quot;callbacks.stopAutoplay&quot; data-wp-interactive=&quot;core/video&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; data-wp-init=&quot;callbacks.stopAutoplay&quot; data-wp-interactive=&quot;core/video&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>
</feed>