<rss xmlns:source="http://source.scripting.com/" version="2.0">
  <channel>
    <title>Chris DeLuca</title>
    <link>https://www.chrisdeluca.me/</link>
    <description></description>
    
    <language>en</language>
    
    <lastBuildDate>Sun, 19 Apr 2026 17:30:11 -0400</lastBuildDate>
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/04/19/why-nearly-every-farmer-who.html</link>
      <pubDate>Sun, 19 Apr 2026 17:30:11 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/04/19/why-nearly-every-farmer-who.html</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://text.npr.org/2026/04/19/g-s1-116759/red-hot-peppers-women-farmers-india?utm_term=nprnews&amp;amp;utm_source=bsky.app&amp;amp;utm_campaign=npr&amp;amp;utm_medium=social&#34;&gt;Why nearly every farmer who grows these chile peppers is a woman&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;Not many men step up to do it under these conditions,&amp;rdquo; Pandiamma says. &amp;ldquo;But for women, chile is a godsend. If we labor hard enough in the fields for those few months, that extra income is enough to keep our homes running for the rest of the year.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
      <source:markdown>[Why nearly every farmer who grows these chile peppers is a woman](https://text.npr.org/2026/04/19/g-s1-116759/red-hot-peppers-women-farmers-india?utm_term=nprnews&amp;utm_source=bsky.app&amp;utm_campaign=npr&amp;utm_medium=social)

&gt;  &#34;Not many men step up to do it under these conditions,&#34; Pandiamma says. &#34;But for women, chile is a godsend. If we labor hard enough in the fields for those few months, that extra income is enough to keep our homes running for the rest of the year.&#34;

</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/04/17/finished-reading-murder-on-sex.html</link>
      <pubDate>Fri, 17 Apr 2026 23:39:21 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/04/17/finished-reading-murder-on-sex.html</guid>
      <description>&lt;img src=&#34;https://cdn.micro.blog/books/9798350914917/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;
&lt;p&gt;Finished reading: &lt;a href=&#34;https://micro.blog/books/9798350914917&#34;&gt;Murder on Sex Island&lt;/a&gt; by Jo Firestone 📚&lt;/p&gt;
&lt;p&gt;Man this book is funny. Everything you love about a tight mystery, combined with everything insane about modern reality TV (and plain reality). Jo Firestone writes hilarious, relatable prose that moves. I flew through this. Can’t wait for the next book!&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.micro.blog/books/9798350914917/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;

Finished reading: [Murder on Sex Island](https://micro.blog/books/9798350914917) by Jo Firestone 📚

Man this book is funny. Everything you love about a tight mystery, combined with everything insane about modern reality TV (and plain reality). Jo Firestone writes hilarious, relatable prose that moves. I flew through this. Can’t wait for the next book!
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/04/17/my-cousins-band-chalk-teeth.html</link>
      <pubDate>Fri, 17 Apr 2026 12:43:57 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/04/17/my-cousins-band-chalk-teeth.html</guid>
      <description>&lt;p&gt;My cousin&amp;rsquo;s band Chalk Teeth just &lt;a href=&#34;https://www.occult-magazine.com/features/chalk-teeth-floor-it-premiere&#34;&gt;dropped a new single&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It&amp;rsquo;s an entrancing and unique concoction that touches on elements of dark wave, synth punk, shoegaze, early electronic dance music and krautrock, all while leading with vocals in the Polish language.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I&amp;rsquo;m very proud, even though I had nothing to do with it (other than somewhat genetically). Check it out! 🎵&lt;/p&gt;
</description>
      <source:markdown>My cousin&#39;s band Chalk Teeth just [dropped a new single](https://www.occult-magazine.com/features/chalk-teeth-floor-it-premiere).

&gt; It&#39;s an entrancing and unique concoction that touches on elements of dark wave, synth punk, shoegaze, early electronic dance music and krautrock, all while leading with vocals in the Polish language.

I&#39;m very proud, even though I had nothing to do with it (other than somewhat genetically). Check it out! 🎵
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/04/17/donkey-kongass-donkey-kongs-donkey.html</link>
      <pubDate>Fri, 17 Apr 2026 12:41:09 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/04/17/donkey-kongass-donkey-kongs-donkey.html</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Donkey Kong-ass Donkey Kong’s Donkey Kong-ass Donkey Kong ass.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;A quote from &lt;a href=&#34;https://youtu.be/8rsvyJahn7k?si=o7pZFNpm45pyYtAB&amp;amp;t=4m6s&#34;&gt;Scott the Woz&lt;/a&gt; that lives rent free in my head. 💬&lt;/p&gt;
</description>
      <source:markdown>&gt; Donkey Kong-ass Donkey Kong’s Donkey Kong-ass Donkey Kong ass.

A quote from [Scott the Woz](https://youtu.be/8rsvyJahn7k?si=o7pZFNpm45pyYtAB&amp;t=4m6s) that lives rent free in my head. 💬
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/04/16/currently-reading-murder-on-sex.html</link>
      <pubDate>Thu, 16 Apr 2026 21:54:36 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/04/16/currently-reading-murder-on-sex.html</guid>
      <description>&lt;img src=&#34;https://cdn.micro.blog/books/9798350914917/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;
&lt;p&gt;Currently reading: &lt;a href=&#34;https://micro.blog/books/9798350914917&#34;&gt;Murder on Sex Island&lt;/a&gt; by Jo Firestone 📚&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.micro.blog/books/9798350914917/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;

Currently reading: [Murder on Sex Island](https://micro.blog/books/9798350914917) by Jo Firestone 📚
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/04/12/i-feel-like-think-again.html</link>
      <pubDate>Sun, 12 Apr 2026 10:23:42 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/04/12/i-feel-like-think-again.html</guid>
      <description>&lt;p&gt;I feel like &amp;ldquo;think again&amp;rdquo; advertising contains an implied insult.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Think JustSalad &lt;em&gt;just&lt;/em&gt; has salad? Think again!…idiot.&amp;rdquo;&lt;/p&gt;
</description>
      <source:markdown>I feel like &#34;think again&#34; advertising contains an implied insult.

&#34;Think JustSalad *just* has salad? Think again!…idiot.&#34;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/04/12/from-miriam-suzanne-on-mastodon.html</link>
      <pubDate>Sun, 12 Apr 2026 07:57:17 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/04/12/from-miriam-suzanne-on-mastodon.html</guid>
      <description>&lt;p&gt;From &lt;a href=&#34;https://front-end.social/@mia/116389740643694963&#34;&gt;Miriam Suzanne&lt;/a&gt; on Mastodon.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There are still absolutely beautiful websites using basic css and html with little or no js&amp;hellip;&lt;/p&gt;
&lt;p&gt;What we&amp;rsquo;ve lost, it seems to me, is the broad indie pipeline to both learning and socializing (and socially learning).&lt;/p&gt;
&lt;p&gt;partly because we who learned it 20yrs ago have landed in more specialized/complex jobs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As part of that ~20 year ago learning, I completely agree. The internet culture does not default to the web, the open thing we all fell in love with. The only way most folks interact online is through corporate captured channels. Raising this, the response is often some form of, “yeah and the sky is blue”. It feels that inevitable. But as we continually learn, change is a constant. What end of the scale do you want to press on?&lt;/p&gt;
</description>
      <source:markdown>From [Miriam Suzanne](https://front-end.social/@mia/116389740643694963) on Mastodon.

&gt; There are still absolutely beautiful websites using basic css and html with little or no js...
&gt;
&gt; What we&#39;ve lost, it seems to me, is the broad indie pipeline to both learning and socializing (and socially learning).
&gt;
&gt; partly because we who learned it 20yrs ago have landed in more specialized/complex jobs.

As part of that ~20 year ago learning, I completely agree. The internet culture does not default to the web, the open thing we all fell in love with. The only way most folks interact online is through corporate captured channels. Raising this, the response is often some form of, “yeah and the sky is blue”. It feels that inevitable. But as we continually learn, change is a constant. What end of the scale do you want to press on?
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/04/06/does-anyone-still-use-lastfm.html</link>
      <pubDate>Mon, 06 Apr 2026 11:15:35 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/04/06/does-anyone-still-use-lastfm.html</guid>
      <description>&lt;p&gt;Does anyone still use Last.fm? I just (re)discovered that I&amp;rsquo;ve had an &lt;a href=&#34;https://www.last.fm/user/bronzehedwick&#34;&gt;account since 2007&lt;/a&gt;. Old profile photo to match.&lt;/p&gt;
</description>
      <source:markdown>Does anyone still use Last.fm? I just (re)discovered that I&#39;ve had an [account since 2007](https://www.last.fm/user/bronzehedwick). Old profile photo to match.
</source:markdown>
    </item>
    
    <item>
      <title>Finished reading: Frankenstein by Mary Shelley 📚</title>
      <link>https://www.chrisdeluca.me/2026/04/05/190350.html</link>
      <pubDate>Sun, 05 Apr 2026 19:03:50 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/04/05/190350.html</guid>
      <description>&lt;img src=&#34;https://cdn.micro.blog/books/9780486784755/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;
&lt;p&gt;Spoiler alert for a &lt;a href=&#34;https://micro.blog/books/9780486784755&#34;&gt;200 year old story&lt;/a&gt; you&amp;rsquo;ve heard a bunch of times already.&lt;/p&gt;
&lt;p&gt;This is my first time reading this, after years of meaning to. I&amp;rsquo;m glad I finally did. I can tell why this story continues to be such a fascination; the core of that narrative is so compelling. The unintended consequences of unbridled ambition, the horror and devastation this creation brings, your sympathy for the monster—it&amp;rsquo;s all here.&lt;/p&gt;
&lt;p&gt;That being said, from a modern lens, it does suffer from the ignominies of it&amp;rsquo;s time. The prose is ponderously florid in that Victorian manor, and there&amp;rsquo;s a brutalism to the text&amp;rsquo;s casual casting of morality with class. However, the differences with Frankenstein&amp;rsquo;s depiction in movies is what interested me most. There is no bubbling lab equipment, crazed mob or fear of fire, no real descriptions of the monster at all, save in the vaguest sense. All that was wonderfully invented for the screen by &lt;a href=&#34;https://en.wikipedia.org/wiki/James_Whale&#34;&gt;James Whale&lt;/a&gt;. What we do get is more interior, and less arresting.&lt;/p&gt;
&lt;p&gt;The story is told in letters, and doubly so. We hear the tale from an arctic explorer writing his sister, who comes across doctor Frankenstein, who then tells &lt;em&gt;him&lt;/em&gt; the story, which the explorer relates back to his sister. Since the story is just concerned with the explorer for the first couple chapters, I had to check that I downloaded the right book.&lt;/p&gt;
&lt;p&gt;Frankenstein himself is more of a emotional dishrag then a crazed scientist. We&amp;rsquo;re told he&amp;rsquo;s brilliant and sensitive, and that is well enough conveyed in the text. He spends maybe a third of the book collapsed with sickness at having created the monster, or thinking about what the monster might do, or feeling bad about what the monster did do. The monster is largely a shadow, only appearing a couple times to plead with Frankenstein to give him a Bride, or to murder his loved ones in vengeance, although the later always happens &amp;ldquo;off screen.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The Bride request was a big difference. The monster is shunned by society, and by doctor Frankenstein, who immediately jumps in bed with terror for a few months after creating him. The monster tells Frankenstein he is miserable, and alternatingly begs and threatens the doctor to make him another like him that they may at least have companionship in their exile from humanity. Frankenstein agrees, given the threats to his loved ones, but then goes back on his word and does not complete the Bride. In revenge, the monster kills everyone Frankenstein loves, including his wife-to-be. If I can&amp;rsquo;t be happy, neither can you.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s fascinating, because Frankenstein &lt;em&gt;promises&lt;/em&gt; to make the Bride, before feeling like it would be a curse on humanity to create her, a notion he stands by to his death. From my modern vantage point, this feels absurd. You already made one, he only fucks with &lt;em&gt;you&lt;/em&gt;, and you agreed to do the second, so just make her! I was surprised by the direction, and while I bet the intent of the text is to sympathize with the non-creation, I found it more compelling as a indictment of Frankenstein&amp;rsquo;s selfishness, and that his act came back to haunt him a thousand fold.&lt;/p&gt;
&lt;p&gt;All in all, I really enjoyed the book, but I&amp;rsquo;ll take a break from Victorian literature for a bit.&lt;/p&gt;
&lt;p&gt;I read the &lt;a href=&#34;https://standardebooks.org/ebooks/mary-shelley/frankenstein&#34;&gt;Standard Ebook edition&lt;/a&gt;. If you end up reading any of their terrific copies, consider &lt;a href=&#34;https://standardebooks.org/donate&#34;&gt;donating to their cause&lt;/a&gt;.&lt;/p&gt;</description>
      <source:markdown>&lt;img src=&#34;https://cdn.micro.blog/books/9780486784755/cover.jpg&#34; align=&#34;left&#34; class=&#34;microblog_book&#34; style=&#34;max-width: 60px; margin-right: 20px; margin-top: 0px; padding-top: 0px;&#34;&gt;

Spoiler alert for a [200 year old story](https://micro.blog/books/9780486784755) you&#39;ve heard a bunch of times already.

&lt;!--more--&gt;

This is my first time reading this, after years of meaning to. I&#39;m glad I finally did. I can tell why this story continues to be such a fascination; the core of that narrative is so compelling. The unintended consequences of unbridled ambition, the horror and devastation this creation brings, your sympathy for the monster—it&#39;s all here.

That being said, from a modern lens, it does suffer from the ignominies of it&#39;s time. The prose is ponderously florid in that Victorian manor, and there&#39;s a brutalism to the text&#39;s casual casting of morality with class. However, the differences with Frankenstein&#39;s depiction in movies is what interested me most. There is no bubbling lab equipment, crazed mob or fear of fire, no real descriptions of the monster at all, save in the vaguest sense. All that was wonderfully invented for the screen by [James Whale](https://en.wikipedia.org/wiki/James_Whale). What we do get is more interior, and less arresting.

The story is told in letters, and doubly so. We hear the tale from an arctic explorer writing his sister, who comes across doctor Frankenstein, who then tells _him_ the story, which the explorer relates back to his sister. Since the story is just concerned with the explorer for the first couple chapters, I had to check that I downloaded the right book.

Frankenstein himself is more of a emotional dishrag then a crazed scientist. We&#39;re told he&#39;s brilliant and sensitive, and that is well enough conveyed in the text. He spends maybe a third of the book collapsed with sickness at having created the monster, or thinking about what the monster might do, or feeling bad about what the monster did do. The monster is largely a shadow, only appearing a couple times to plead with Frankenstein to give him a Bride, or to murder his loved ones in vengeance, although the later always happens &#34;off screen.&#34;

The Bride request was a big difference. The monster is shunned by society, and by doctor Frankenstein, who immediately jumps in bed with terror for a few months after creating him. The monster tells Frankenstein he is miserable, and alternatingly begs and threatens the doctor to make him another like him that they may at least have companionship in their exile from humanity. Frankenstein agrees, given the threats to his loved ones, but then goes back on his word and does not complete the Bride. In revenge, the monster kills everyone Frankenstein loves, including his wife-to-be. If I can&#39;t be happy, neither can you. 

It&#39;s fascinating, because Frankenstein _promises_ to make the Bride, before feeling like it would be a curse on humanity to create her, a notion he stands by to his death. From my modern vantage point, this feels absurd. You already made one, he only fucks with _you_, and you agreed to do the second, so just make her! I was surprised by the direction, and while I bet the intent of the text is to sympathize with the non-creation, I found it more compelling as a indictment of Frankenstein&#39;s selfishness, and that his act came back to haunt him a thousand fold.

All in all, I really enjoyed the book, but I&#39;ll take a break from Victorian literature for a bit.

I read the [Standard Ebook edition](https://standardebooks.org/ebooks/mary-shelley/frankenstein). If you end up reading any of their terrific copies, consider [donating to their cause](https://standardebooks.org/donate).
</source:markdown>
    </item>
    
    <item>
      <title>Project Hail Mary, 2026 - ★★★★½</title>
      <link>https://www.chrisdeluca.me/2026/04/03/project-hail-mary.html</link>
      <pubDate>Fri, 03 Apr 2026 21:21:59 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/04/03/project-hail-mary.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/611288-project-hail-mary-0-600-0-900-crop.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;Yep, it’s real good.&lt;/p&gt;
</description>
      <source:markdown>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/611288-project-hail-mary-0-600-0-900-crop.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;Yep, it’s real good.&lt;/p&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/04/01/there-are-two-types-of.html</link>
      <pubDate>Wed, 01 Apr 2026 00:30:28 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/04/01/there-are-two-types-of.html</guid>
      <description>&lt;p&gt;There are two types of New Yorkers who don’t take the subway. Working folks who live in a transit desert, or silver spoon scum fucks hellbent on casually destroying your life.&lt;/p&gt;
</description>
      <source:markdown>There are two types of New Yorkers who don’t take the subway. Working folks who live in a transit desert, or silver spoon scum fucks hellbent on casually destroying your life.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/04/01/i-love-a-street-cart.html</link>
      <pubDate>Wed, 01 Apr 2026 00:11:46 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/04/01/i-love-a-street-cart.html</guid>
      <description>&lt;p&gt;I love a street cart kabab. The stick makes it seem portable, and I always end up covered in shit. I will eat them forever.&lt;/p&gt;
</description>
      <source:markdown>I love a street cart kabab. The stick makes it seem portable, and I always end up covered in shit. I will eat them forever. 
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/03/19/some-new-room-decor.html</link>
      <pubDate>Thu, 19 Mar 2026 14:23:22 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/03/19/some-new-room-decor.html</guid>
      <description>&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/letsgo.jpg&#34; width=&#34;600&#34; height=&#34;801&#34; alt=&#34;Auto-generated description: A microphone is positioned in front of a leafy plant, with a wall featuring a wooden plaque with dials and a partially visible sign that reads LETS.&#34;&gt;
&lt;p&gt;Some new room decor.&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/letsgo.jpg&#34; width=&#34;600&#34; height=&#34;801&#34; alt=&#34;Auto-generated description: A microphone is positioned in front of a leafy plant, with a wall featuring a wooden plaque with dials and a partially visible sign that reads LETS.&#34;&gt;

Some new room decor.
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/03/16/as-always-i-have-mid.html</link>
      <pubDate>Mon, 16 Mar 2026 10:16:48 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/03/16/as-always-i-have-mid.html</guid>
      <description>&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/img-7268.jpg&#34; width=&#34;600&#34; height=&#34;801&#34; alt=&#34;Auto-generated description: A filled-out 2026 Oscars ballot from Letterboxd is marked with selections and personalized with the name Chris. Actor ins a leading role is marked for Timmy, but went to Michael B. Actor in a Supporting Rolele is marked for Elordi, and went to Sean Penn. Actress in a Leading Rolele is marked for Rose Byrne, and went to Jessie Buckley. Actress in a Supporting Rolele is marked for Teyana Taylor, and went to Amy Madigan. Animated Feature Film is marked for KPop Demon Hunters, which won. Animated Short Film is marked for Forevergreen, and went to The Girl Who Cried Pearls. Casting is marked for One Battle After Another, which won. Cinematography is marked for One Battle After Another, and went to Sinners. Costume Design is marked for Frankenstein, which won. Directing is marked for PTA, who won. Documentary Feature Film is marked for Mr. Nobody Against Putin, which won. Documentary Short Film is marked for Children No More, which went to All the Empty Room. Film Editing is marked for Sinners, which went to One Battle After Another. Live Action Short Film is marked for A Friend of Dorothy, which went to The Singers AND Two People Exchanging Saliva. Makup and Hairstyling is marked for Sinners, which went to Frankenstein. Music (Original Score) is marked for One Battle After Another, which went to Sinners. Music (Original Song) is marked for Sinners, which went to KPop Demon Hunters. Production Design is marked for Hamnet, which went to Frankenstein. Sound is marked for Sinners, which went to F1. Visual Effects had been marked for Jurassic World Rebirth, and was changed to Avatar: Fire and Ash, which won. Writing (Adapted Screenplay) is marked for One Battle After Another, which won. Writing (Original Screenplay) is marked for Sinners, which won. Best Picture is marked for Sinners, which went to One Battle After Another.&#34;&gt;
&lt;p&gt;As always, I have mid Oscar guesses. Very happy to see all the &lt;em&gt;Sinners&lt;/em&gt; and &lt;em&gt;One Battle After Another&lt;/em&gt; love, and boy was I happy to be wrong about Amy Madigan. 🍿&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/img-7268.jpg&#34; width=&#34;600&#34; height=&#34;801&#34; alt=&#34;Auto-generated description: A filled-out 2026 Oscars ballot from Letterboxd is marked with selections and personalized with the name Chris. Actor ins a leading role is marked for Timmy, but went to Michael B. Actor in a Supporting Rolele is marked for Elordi, and went to Sean Penn. Actress in a Leading Rolele is marked for Rose Byrne, and went to Jessie Buckley. Actress in a Supporting Rolele is marked for Teyana Taylor, and went to Amy Madigan. Animated Feature Film is marked for KPop Demon Hunters, which won. Animated Short Film is marked for Forevergreen, and went to The Girl Who Cried Pearls. Casting is marked for One Battle After Another, which won. Cinematography is marked for One Battle After Another, and went to Sinners. Costume Design is marked for Frankenstein, which won. Directing is marked for PTA, who won. Documentary Feature Film is marked for Mr. Nobody Against Putin, which won. Documentary Short Film is marked for Children No More, which went to All the Empty Room. Film Editing is marked for Sinners, which went to One Battle After Another. Live Action Short Film is marked for A Friend of Dorothy, which went to The Singers AND Two People Exchanging Saliva. Makup and Hairstyling is marked for Sinners, which went to Frankenstein. Music (Original Score) is marked for One Battle After Another, which went to Sinners. Music (Original Song) is marked for Sinners, which went to KPop Demon Hunters. Production Design is marked for Hamnet, which went to Frankenstein. Sound is marked for Sinners, which went to F1. Visual Effects had been marked for Jurassic World Rebirth, and was changed to Avatar: Fire and Ash, which won. Writing (Adapted Screenplay) is marked for One Battle After Another, which won. Writing (Original Screenplay) is marked for Sinners, which won. Best Picture is marked for Sinners, which went to One Battle After Another.&#34;&gt;

As always, I have mid Oscar guesses. Very happy to see all the _Sinners_ and _One Battle After Another_ love, and boy was I happy to be wrong about Amy Madigan. 🍿
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/03/15/a-friend-didnt-want-their.html</link>
      <pubDate>Sun, 15 Mar 2026 17:04:23 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/03/15/a-friend-didnt-want-their.html</guid>
      <description>&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/img-7267.jpg&#34; width=&#34;600&#34; height=&#34;731&#34; alt=&#34;Auto-generated description: A potted aloe vera plant with long green leaves sits on a windowsill next to a candle.&#34;&gt;
&lt;p&gt;A friend didn&amp;rsquo;t want their Aloe anymore, so I took it home. Looking pretty good so far, I think.&lt;/p&gt;
</description>
      <source:markdown>&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/img-7267.jpg&#34; width=&#34;600&#34; height=&#34;731&#34; alt=&#34;Auto-generated description: A potted aloe vera plant with long green leaves sits on a windowsill next to a candle.&#34;&gt;

A friend didn&#39;t want their Aloe anymore, so I took it home. Looking pretty good so far, I think.
</source:markdown>
    </item>
    
    <item>
      <title>Mel Brooks: The 99 Year Old Man!, 2026</title>
      <link>https://www.chrisdeluca.me/2026/03/12/mel-brooks-the-year-old.html</link>
      <pubDate>Thu, 12 Mar 2026 21:06:12 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/03/12/mel-brooks-the-year-old.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;uploads/2026/1486107-mel-brooks-the-99-year-old-man-0-600-0-900-crop.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;Pure joy.&lt;/p&gt;
</description>
      <source:markdown>&lt;p&gt;&lt;img src=&#34;uploads/2026/1486107-mel-brooks-the-99-year-old-man-0-600-0-900-crop.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;Pure joy.&lt;/p&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/03/12/i-bought-every-studio-fugazi.html</link>
      <pubDate>Thu, 12 Mar 2026 15:45:24 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/03/12/i-bought-every-studio-fugazi.html</guid>
      <description>&lt;p&gt;I bought every studio Fugazi album on Bandcamp, along with the new Albini Sessions.  No regrets. 🎵&lt;/p&gt;
</description>
      <source:markdown>I bought every studio Fugazi album on Bandcamp, along with the new Albini Sessions.  No regrets. 🎵
</source:markdown>
    </item>
    
    <item>
      <title>Sucker Punch, 2011</title>
      <link>https://www.chrisdeluca.me/2026/03/08/sucker-punch.html</link>
      <pubDate>Sun, 08 Mar 2026 23:12:46 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/03/08/sucker-punch.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/sucker-punch-original-0-600-0-900-crop.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;This movie is daffy and fun.&lt;/p&gt;
</description>
      <source:markdown>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/sucker-punch-original-0-600-0-900-crop.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;This movie is daffy and fun.&lt;/p&gt;
</source:markdown>
    </item>
    
    <item>
      <title>Advanced CSS Custom Properties for Components</title>
      <link>https://www.chrisdeluca.me/2026/03/08/advanced-css-custom-properties-for.html</link>
      <pubDate>Sun, 08 Mar 2026 19:46:13 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/03/08/advanced-css-custom-properties-for.html</guid>
      <description>&lt;script defer src=&#34;https://public.codepenassets.com/embed/index.js&#34;&gt;&lt;/script&gt;
&lt;aside&gt;
&lt;p&gt;This post is based on a talk I gave at Florida Drupal Camp 2026. It’s my slides, with some extra writing for the parts I spoke through extemporaneously, formatted for the web.&lt;/p&gt;
&lt;p&gt;There’s a &lt;a href=&#34;https://www.fldrupal.camp/session/advanced-css-custom-properties-components&#34;&gt;full video recording&lt;/a&gt;, and the full&lt;br&gt;
&lt;a href=&#34;https://codepen.io/collection/myWYqJ&#34;&gt;Codepen demo collection&lt;/a&gt;.&lt;/p&gt;
&lt;/aside&gt;
&lt;p&gt;Welcome to Advanced CSS Custom Properties for Components. They say that brevity is the soul of wit, and that goes double for titles, so welcome to my witless talk. Thank you for being here, genuinely.&lt;/p&gt;
&lt;p&gt;My name is Chris DeLuca, I&amp;rsquo;m a senior front end developer working at Lullabot. Call me weird, but I love component-based development, and I&amp;rsquo;m excited to share some of the things I&amp;rsquo;ve learned about implementing them using CSS custom properties.&lt;/p&gt;
&lt;h2 id=&#34;what-is-this&#34;&gt;What is this?&lt;/h2&gt;
&lt;p&gt;Let&amp;rsquo;s get into what we&amp;rsquo;ll be getting into this afternoon. This talk covers some patterns for using CSS custom properties, or variables, to customize components. It will be pretty demo heavy. You might see some examples that directly apply to your work, or you may not. My hope is that the demos at least get your creativity flowing to start playing with some of these patterns in your day to day.&lt;/p&gt;
&lt;p&gt;Now, if you remember the 1998 American Godzilla movie, and why would you, there&amp;rsquo;s a scene where a scientist, played by Matthew Broderick, has a plan to lure Godzilla into a trap with a massive amount of fish as bait.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/godzilla-1998-features-the-largest-amount-of-fish-ever-put-v0-zxlgygo86hkg1.webp&#34; width=&#34;600&#34; height=&#34;251&#34; alt=&#34;Auto-generated description: A large mound of potatoes is lit by streetlights in an outdoor urban setting at night.&#34;&gt;
&lt;p&gt;The army delivers the pile of fish, and Broderick looks at a guy with a wry smile, and goes, &amp;ldquo;that&amp;rsquo;s a lot of fish.&amp;rdquo; There&amp;rsquo;s a music cue, the whole thing.&lt;/p&gt;
&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/hq720.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;Auto-generated description: Two people in a dimly lit setting are engaged in conversation while others move in the background.&#34;&gt;
&lt;p&gt;This massive, highly specific task has just been successfully carried out, at Broderick&amp;rsquo;s explicit instruction, and exactly to his specifications, and yet…&lt;em&gt;he&amp;rsquo;s&lt;/em&gt; surprised.&lt;/p&gt;
&lt;p&gt;I refuse to be similarly surprised.&lt;/p&gt;
&lt;p&gt;Given the amount of live demos happening, something will inevitably go wrong. When that wrong thing does happen, and it will, to get past that awkward moment, I invite everyone here to yell, &amp;ldquo;That&amp;rsquo;s a lot of fish!&amp;rdquo;. Can we try it now? Beautiful.&lt;/p&gt;
&lt;p&gt;The examples in this talk will use Twig and Single Directory Components, although the patterns we&amp;rsquo;ll be talking about apply across component technologies.&lt;/p&gt;
&lt;aside&gt;
&lt;p&gt;Quick aside, if you aren&amp;rsquo;t using Single Directory Components in your Drupal projects, I highly recommend you do. They&amp;rsquo;re good.&lt;/p&gt;
&lt;/aside&gt;
&lt;h2 id=&#34;whats-a-component&#34;&gt;What&amp;rsquo;s a component?&lt;/h2&gt;
&lt;p&gt;Before we get to the patterns, I&amp;rsquo;d like to take a little time to set the stage. We&amp;rsquo;re starting basic. Perhaps too basic, but I always like to define our terms. I think it gives a solid base to build off of.&lt;/p&gt;
&lt;p&gt;So what is a component?&lt;/p&gt;
&lt;p&gt;There are many valid definitions, but for our purposes, we&amp;rsquo;re saying a component is a chunk of code that:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Is repeatable; it can be called multiple times from anywhere in the system.&lt;/li&gt;
&lt;li&gt;Is encapsulated; it always contains any code it needs—HTML, CSS, JS.&lt;/li&gt;
&lt;li&gt;Takes parameters; output can be manipulated via pre-defined inputs.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That third one is really what this talk is all about. Although, if we&amp;rsquo;re talking strictly, taking parameters isn&amp;rsquo;t really necessary for a component to be a component. However, most components do take parameters, and that&amp;rsquo;s where the complexity lies, so let&amp;rsquo;s round up on this one.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s dive into an example of how you might normally configure a component.&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll start with our good friend, the button. Boring, perhaps, but that&amp;rsquo;s rude to say about any friend, much less a good one. Okay, what do we want to pay attention to here?&lt;/p&gt;
&lt;p&gt;The button&amp;rsquo;s display stays the same, while the data changes depending on what parameters it is passed. Each time it&amp;rsquo;s called, the button will have a different URL and text. Straightforward.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;CleanShot%202026-02-10%20at%2021.46.29@2x.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;To implement this, we have &lt;code&gt;text&lt;/code&gt; and &lt;code&gt;url&lt;/code&gt; parameters, which is how we&amp;rsquo;re passing the data to our button.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-twig&#34; data-lang=&#34;twig&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;{{&lt;/span&gt; include&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;my-theme:button&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	text&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, world!&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	url&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.com&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;})&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Our button component can change its display as well, depending on the parameters we pass.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;CleanShot%202026-02-10%20at%2021.44.35@2x.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;We can see that the button component accepts a &lt;code&gt;variation&lt;/code&gt; parameter, and we can pass &amp;ldquo;primary&amp;rdquo;, &amp;ldquo;secondary&amp;rdquo;, or &amp;ldquo;tertiary&amp;rdquo; to it. Sometimes &lt;code&gt;variation&lt;/code&gt; will be named something else, like &lt;code&gt;type&lt;/code&gt;, or &lt;code&gt;style&lt;/code&gt;, but the meaning is the same.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-twig&#34; data-lang=&#34;twig&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;{{&lt;/span&gt; include&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;my-theme:button&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	variation&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;primary&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	text&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello, world!&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	url&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://example.com&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;})&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Our variation will set an HTML property, usually a &lt;code&gt;class&lt;/code&gt;, so we can style the variations differently.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-twig&#34; data-lang=&#34;twig&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&amp;lt;a class=&amp;#34;my-button my-button--&lt;span style=&#34;color:#75715e&#34;&gt;{{&lt;/span&gt; variation &lt;span style=&#34;color:#75715e&#34;&gt;}}&lt;/span&gt;&amp;#34; href=&amp;#34;&lt;span style=&#34;color:#75715e&#34;&gt;{{&lt;/span&gt; url &lt;span style=&#34;color:#75715e&#34;&gt;}}&lt;/span&gt;&amp;#34;&amp;gt;&lt;span style=&#34;color:#75715e&#34;&gt;{{&lt;/span&gt; text &lt;span style=&#34;color:#75715e&#34;&gt;}}&lt;/span&gt;&amp;lt;/a&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-button&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;/* button code… */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;border&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;solid&lt;/span&gt; rgb(&lt;span style=&#34;color:#ae81ff&#34;&gt;231&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;119&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-color&lt;/span&gt;: rgb(&lt;span style=&#34;color:#ae81ff&#34;&gt;231&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;119&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-button--secondary&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-color&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;transparent&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;black&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;Basic component variations&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;LEZopJd&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/LEZopJd&#34;&gt;
  Basic component variations&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;This is good!&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;m not advocating for the fall of component variations. They&amp;rsquo;re great! Using CSS Custom Properties doesn&amp;rsquo;t supplant traditional variation-based customization. It works alongside variations. We&amp;rsquo;ll talk about how they work together in just a little bit. For now, what are these mysterious CSS Custom Properties I keep speaking of?&lt;/p&gt;
&lt;h2 id=&#34;what-are-css-custom-properties&#34;&gt;What are CSS Custom Properties?&lt;/h2&gt;
&lt;p&gt;They&amp;rsquo;re variables in CSS. They follow the cascade, and they&amp;rsquo;re computed at runtime, and they can be redefined. These are three important qualities that we&amp;rsquo;ll leverage to enhance our components.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-selector&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;color&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;primary&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;color&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A common pattern is to set a lot of custom properties on the &lt;code&gt;:root&lt;/code&gt; element. Values like font sizes, and colors, and spacing sizes, and all types of little chunks of design information that can be used throughout our system.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	--primary-color: rgb(&lt;span style=&#34;color:#ae81ff&#34;&gt;231&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;119&lt;/span&gt;); 
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-button&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#75715e&#34;&gt;/* button code… */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;border&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;solid&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;primary&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;color&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;background-color&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;primary&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;color&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This helps us build consistency throughout our website.&lt;/p&gt;
&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;Basic component variations with custom properties&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;GgqaLpL&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/GgqaLpL&#34;&gt;
  Basic component variations with custom properties&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;Custom Properties set on the &lt;code&gt;:root&lt;/code&gt; are available to use everywhere, but are centrally managed.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-blockquote&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	border-inline-start: &lt;span style=&#34;color:#ae81ff&#34;&gt;4&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;px&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;solid&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;primary&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;color&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	padding-inline-start: &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;ch&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	&lt;span style=&#34;color:#66d9ef&#34;&gt;font-family&lt;/span&gt;: &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;font&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;sans-serif&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-blockquote&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	margin-block: &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;spacing&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;vertical&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;rhythm) &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;:root&lt;/code&gt; pseudo-selector is the highest parent of the page, so setting properties there guarantees that those custom properties can be accessed anywhere else on the page. This saves us some work if the design needs to be tweaked. Now, we only have to change the value in one place, rather than in every place that value is used.&lt;/p&gt;
&lt;p&gt;In the following demo, we’re reusing several custom properties across two components.&lt;/p&gt;
&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;Re-use across components&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;xbOXqXd&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/xbOXqXd&#34;&gt;
  Re-use across components&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;This is also good!&lt;/p&gt;
&lt;p&gt;Setting Custom Properties on the &lt;code&gt;:root&lt;/code&gt; to make them globally available is incredibly useful, for all the reasons I just mentioned. This pattern is great!&lt;/p&gt;
&lt;p&gt;However, that&amp;rsquo;s where we often stop. As good as this pattern is, it kind of bothers me if this is all we end up using Custom Properties for.&lt;/p&gt;
&lt;h2 id=&#34;re-defining-custom-properties&#34;&gt;Re-defining Custom Properties&lt;/h2&gt;
&lt;p&gt;We&amp;rsquo;re essentially treating custom properties as constants. A constant is similar to a variable, but its value never changes during the runtime of the program.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;myConst&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello&amp;#34;&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;myConst&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Goodbye&amp;#34;&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;// illegal!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But Custom Properties have so much more to offer. They&amp;rsquo;re more dynamic, more flexible, more, dare I say, compelling. Custom Properties are…variables.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	--primary-color: &lt;span style=&#34;color:#66d9ef&#34;&gt;green&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	--primary-color: &lt;span style=&#34;color:#66d9ef&#34;&gt;red&lt;/span&gt;; &lt;span style=&#34;color:#75715e&#34;&gt;/* legal! */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;One of the important properties of Custom Properties I mentioned earlier was that their value can be re-defined. Sure, but how is that useful? In our example here, &lt;code&gt;--primary-color&lt;/code&gt; will be &lt;code&gt;red&lt;/code&gt;, but…who cares?&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s go back to our button example.&lt;/p&gt;
&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;Basic component variations with re-defined custom properties&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;YPWbMQg&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/YPWbMQg&#34;&gt;
  Basic component variations with re-defined custom properties&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;re using Custom Properties as actual variables, overriding them inside their selector. We&amp;rsquo;re still leveraging traditional variations and global Custom Properties set on the &lt;code&gt;:root&lt;/code&gt;. In fact, not only are all these approaches living in harmony with each other, we&amp;rsquo;re integrating them together.&lt;/p&gt;
&lt;p&gt;It also offers a clear API for extensions in the future, showing which parts are meant to be changed, and which parts should be more stable.&lt;/p&gt;
&lt;p&gt;Okay, that works, but it&amp;rsquo;s not too much different than writing CSS without re-defined custom properties.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s say you have a landing page type, where editors can configure which components appear in a list, and in which order, maybe using Layout Builder, or Paragraphs, or Drupal Canvas.&lt;/p&gt;
&lt;p&gt;Editors place components into sections, which can have either a light or dark background. The components inside need to be styled to accommodate both color schemes.&lt;/p&gt;
&lt;p&gt;Custom Properties offer a nice way to solve this.&lt;/p&gt;
&lt;p&gt;Remember that Custom Properties follow the cascade. So we can re-define the property on a component parent, and have the value flow down.&lt;/p&gt;
&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;Setting Properties on the Parent&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;VYjMbwV&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/VYjMbwV&#34;&gt;
  Setting Properties on the Parent&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;In this demo, we have two section types, one with a light background, and one with a dark background. Components inside these sections need to change based on the color. We do that by setting Custom Properties on the section, and utilizing those values in the cascade.&lt;/p&gt;
&lt;p&gt;The code is simple and clear. If we need to support a new background color, all we need to do is re-define the custom properties in a new selector.&lt;/p&gt;
&lt;h2 id=&#34;custom-properties-vs-variations&#34;&gt;Custom Properties vs Variations&lt;/h2&gt;
&lt;p&gt;I think of these as two separate, quasi-related concepts. Both are used to customize components. Custom properties target a single property, whereas a variation is a collection of properties, which can themselves be a custom property. Both are also nice API surfaces for other developers to leverage.&lt;/p&gt;
&lt;p&gt;I reach for a variation when there&amp;rsquo;s a larger function the component needs to achieve. I reach for Custom Properties when I need granular control. Both of these, as we&amp;rsquo;ve seen, can and do work well together.&lt;/p&gt;
&lt;h2 id=&#34;the-complexity-story&#34;&gt;The complexity story&lt;/h2&gt;
&lt;p&gt;I think this pattern really shines when the system gets more complicated. And don&amp;rsquo;t they all?&lt;/p&gt;
&lt;p&gt;Imagine you have a component that needs &lt;code&gt;3rem&lt;/code&gt; padding on either side.&lt;/p&gt;
&lt;p&gt;No problem. You&amp;rsquo;re done before you wake up.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-component&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	padding-inline: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;rem&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, imagine that we need &lt;code&gt;3rem&lt;/code&gt; padding on the left and right for every component, and that the value should be consistent across all components. And there&amp;rsquo;s fifty of them.&lt;/p&gt;
&lt;p&gt;A bit of legwork, but no problem. Add a custom property to the &lt;code&gt;:root&lt;/code&gt;, and apply it to every component.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	--component-spacing: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;rem&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-component&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	padding-inline: &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;component&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;spacing);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-other-component&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	padding-inline: &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;component&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;spacing);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* etc */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, imagine that this padding treatment is only for landing pages. On text heavy pages, the components have less room, so they need to have only &lt;code&gt;2rem&lt;/code&gt; of padding.&lt;/p&gt;
&lt;p&gt;No problem. You want to stay consistent, so you add a variation, and override the component. You&amp;rsquo;ll need to do that for all fifty components, and that feels heavy for such a small change, but it works.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	--component-spacing: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;rem&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	--component-spacing-small: &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;rem&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-component--small-padding&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	padding-inline: &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;component&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;spacing&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;small&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-component--small-padding&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	padding-inline: &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;component&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;spacing&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;small&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* etc */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, imagine that all these components can also appear in a sidebar. That&amp;rsquo;s even more space constrained, so components there can only have &lt;code&gt;1rem&lt;/code&gt; of padding.&lt;/p&gt;
&lt;p&gt;No…problem? That&amp;rsquo;s another variation for all fifty components, for the same little sized change. But, screw it, throw it on the pile. Next!&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;:&lt;span style=&#34;color:#a6e22e&#34;&gt;root&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	--component-spacing: &lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;rem&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	--component-spacing-small: &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;rem&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	--component-spacing-extra-small: &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;rem&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-component--extra-small-padding&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	padding-inline: &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;component&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;spacing&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;extra&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;small&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-component--extra-small-padding&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	padding-inline: &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;component&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;spacing&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;extra&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;small&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* etc */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now, imagine that for some of these spots, the template isn&amp;rsquo;t always aware of its context, meaning we can&amp;rsquo;t pass in the right variation for every place a component will render. Unrealistic, I know.&lt;/p&gt;
&lt;p&gt;Okay, not great, but you know what?&lt;/p&gt;
&lt;p&gt;No problem. You target a unique selector that wraps the components that can&amp;rsquo;t get the right variation, and add it to the variation styles. It&amp;rsquo;s not pretty, but it works.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-place-that-cant-get-a-variation&lt;/span&gt; .&lt;span style=&#34;color:#a6e22e&#34;&gt;my-component&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-component--my-variation&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/* etc */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You do have to do that for every one of the fifty components, however. Your code is starting to get bloated and messy. The chance for styles to end up where they shouldn&amp;rsquo;t and other display bugs just shot up.&lt;/p&gt;
&lt;p&gt;Now, imagine that this variation dead-zone affects every component placement type we&amp;rsquo;ve coded: landing pages, text pages, and sidebars. That means you&amp;rsquo;ll need to manage this extra code for every variation. That bit of extra boilerplate code is ballooning across all fifty components.&lt;/p&gt;
&lt;p&gt;Now, imagine that this site will continue to change. More components, more places to put them, more variations. More more more.&lt;/p&gt;
&lt;p&gt;Now…imagine all that is real.&lt;/p&gt;
&lt;p&gt;No; problem. That&amp;rsquo;s a bad time.&lt;/p&gt;
&lt;p&gt;Or, you could set a few custom properties on every component once, define a default on the &lt;code&gt;:root&lt;/code&gt;, then re-define them on a parent for each placement type, bypassing the whole issue.&lt;/p&gt;
&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;No muss no fuss&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;vEKqeox&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/vEKqeox&#34;&gt;
  No muss no fuss&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 id=&#34;custom-property-math&#34;&gt;Custom property math&lt;/h2&gt;
&lt;p&gt;Because Custom Properties are computed at runtime, they can  be included in a &lt;code&gt;calc()&lt;/code&gt; function like any other value. Or &lt;code&gt;tan()&lt;/code&gt; or &lt;code&gt;sin()&lt;/code&gt; functions, but let&amp;rsquo;s stay away from trigonometry and stick to the friendly &lt;code&gt;calc()&lt;/code&gt;. Computing custom properties can be really useful when there&amp;rsquo;s a set of related values that share a common base.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;my-component&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	padding-block: &lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;spacing&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;base);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;	padding-inline: calc(&lt;span style=&#34;color:#a6e22e&#34;&gt;var&lt;/span&gt;(&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;spacing&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;base) &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;For example, think of a table component that has multiple settings for how much whitespace is contained in each cell.&lt;/p&gt;
&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;JS CSS Custom Properties&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;WbxJeam&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/WbxJeam&#34;&gt;
  JS CSS Custom Properties&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;Here, we redefine the custom property with a bit of JavaScript that injects the variable inline, and then compute the rest of the white space off that value, keeping a tight relationship between space with one setting.&lt;/p&gt;
&lt;h2 id=&#34;one-more-thing&#34;&gt;One more thing&lt;/h2&gt;
&lt;p&gt;Custom Properties provide, I think, a compelling API surface for others to customize your components in flexible ways that you still define. All flexibility comes with a cost. We know this. Misuse of the system can and will occur given enough time and attention. It won&amp;rsquo;t solve your life, but one way Custom Properties can help is by type checking.&lt;/p&gt;
&lt;p&gt;Yes, it&amp;rsquo;s true. We can have more control over a custom property by defining it with &lt;code&gt;@property&lt;/code&gt; method.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-css&#34; data-lang=&#34;css&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;@&lt;span style=&#34;color:#66d9ef&#34;&gt;property&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;](&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;https&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;://&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;micro&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;blog&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;property&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;--rotation&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;syntax&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;lt;angle&amp;gt;&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;inherits&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;true&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;initial-value&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;0deg&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is more verbose than the straightforward assignments we&amp;rsquo;ve been doing, but it has advantages.&lt;/p&gt;
&lt;p&gt;First, it is not set on a scope, like &lt;code&gt;:root&lt;/code&gt; or another selector. You&amp;rsquo;re just registering the property, and it can be redefined anywhere.&lt;/p&gt;
&lt;p&gt;Second, you can tell the property which types it will accept via &lt;code&gt;syntax&lt;/code&gt;. We&amp;rsquo;re showing a single type here, but multiple can be defined. Any value assigned to the property that are of a different type will be discarded, and an error will be shown in the browser dev tools. This is not possible when you define a Custom Property otherwise. Those properties will accept any value, even if it is invalid for the use case. This is especially useful for creating a pit of success for other developers, and gets more useful the larger the system is and the larger the user base is. Think: a design system.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s two other &lt;code&gt;@property&lt;/code&gt; aspects here: &lt;code&gt;inherits&lt;/code&gt; and &lt;code&gt;initial-value&lt;/code&gt;. Inherits is &lt;code&gt;true&lt;/code&gt; by default, and controls whether children will get this Custom Property when it&amp;rsquo;s set on a parent. I&amp;rsquo;ve never personally found a real use case for turning off inheritance, but if you know of one, please yell at me after the session!&lt;/p&gt;
&lt;p&gt;Finally, there&amp;rsquo;s initial value. It does what it says on the tin. Whatever value you set here, will be the value of the Custom Property, unless otherwise redefined.&lt;/p&gt;
&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;Controlling with [@property](https://micro.blog/property)&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;qENeYeM&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/qENeYeM&#34;&gt;
  Controlling with [@property](https://micro.blog/property)&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;In the second promo in the example above, the “New” sticker isn’t rotated correctly. If you inspect that element in your browser dev tools, you’ll see that the &lt;code&gt;--rotation&lt;/code&gt; Custom Property shows a helpful warning: &lt;samp&gt;Invalid property value: expected type &lt;angle&gt;&lt;/samp&gt;. This is caused by passing a &lt;code&gt;px&lt;/code&gt; value instead of an angle, like &lt;code&gt;deg&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;So what happened just now when you read this article? I made the case that CSS Custom Properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Are CSS variables&lt;/li&gt;
&lt;li&gt;Are not a replacement for component variations&lt;/li&gt;
&lt;li&gt;Work in harmony with variations&lt;/li&gt;
&lt;li&gt;Can be used globally to create consistency&lt;/li&gt;
&lt;li&gt;Can be re-defined to save effort&lt;/li&gt;
&lt;li&gt;Shine at scale&lt;/li&gt;
&lt;li&gt;Can be used in math&lt;/li&gt;
&lt;li&gt;Can be type checked&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There you have it. So long, and thanks for all the fish!&lt;/p&gt;
</description>
      <source:markdown>&lt;script defer src=&#34;https://public.codepenassets.com/embed/index.js&#34;&gt;&lt;/script&gt;

&lt;aside&gt;

This post is based on a talk I gave at Florida Drupal Camp 2026. It’s my slides, with some extra writing for the parts I spoke through extemporaneously, formatted for the web.

There’s a [full video recording](https://www.fldrupal.camp/session/advanced-css-custom-properties-components), and the full  
[Codepen demo collection](https://codepen.io/collection/myWYqJ).

&lt;/aside&gt;

Welcome to Advanced CSS Custom Properties for Components. They say that brevity is the soul of wit, and that goes double for titles, so welcome to my witless talk. Thank you for being here, genuinely.

My name is Chris DeLuca, I&#39;m a senior front end developer working at Lullabot. Call me weird, but I love component-based development, and I&#39;m excited to share some of the things I&#39;ve learned about implementing them using CSS custom properties.

## What is this?

Let&#39;s get into what we&#39;ll be getting into this afternoon. This talk covers some patterns for using CSS custom properties, or variables, to customize components. It will be pretty demo heavy. You might see some examples that directly apply to your work, or you may not. My hope is that the demos at least get your creativity flowing to start playing with some of these patterns in your day to day.

Now, if you remember the 1998 American Godzilla movie, and why would you, there&#39;s a scene where a scientist, played by Matthew Broderick, has a plan to lure Godzilla into a trap with a massive amount of fish as bait.

&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/godzilla-1998-features-the-largest-amount-of-fish-ever-put-v0-zxlgygo86hkg1.webp&#34; width=&#34;600&#34; height=&#34;251&#34; alt=&#34;Auto-generated description: A large mound of potatoes is lit by streetlights in an outdoor urban setting at night.&#34;&gt;

The army delivers the pile of fish, and Broderick looks at a guy with a wry smile, and goes, &#34;that&#39;s a lot of fish.&#34; There&#39;s a music cue, the whole thing.

&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/hq720.jpg&#34; width=&#34;600&#34; height=&#34;337&#34; alt=&#34;Auto-generated description: Two people in a dimly lit setting are engaged in conversation while others move in the background.&#34;&gt;

This massive, highly specific task has just been successfully carried out, at Broderick&#39;s explicit instruction, and exactly to his specifications, and yet…*he&#39;s* surprised.

I refuse to be similarly surprised.

Given the amount of live demos happening, something will inevitably go wrong. When that wrong thing does happen, and it will, to get past that awkward moment, I invite everyone here to yell, &#34;That&#39;s a lot of fish!&#34;. Can we try it now? Beautiful.

The examples in this talk will use Twig and Single Directory Components, although the patterns we&#39;ll be talking about apply across component technologies. 

&lt;aside&gt;

Quick aside, if you aren&#39;t using Single Directory Components in your Drupal projects, I highly recommend you do. They&#39;re good.

&lt;/aside&gt;

## What&#39;s a component?

Before we get to the patterns, I&#39;d like to take a little time to set the stage. We&#39;re starting basic. Perhaps too basic, but I always like to define our terms. I think it gives a solid base to build off of.

So what is a component?

There are many valid definitions, but for our purposes, we&#39;re saying a component is a chunk of code that:

1. Is repeatable; it can be called multiple times from anywhere in the system.
2. Is encapsulated; it always contains any code it needs—HTML, CSS, JS.
3. Takes parameters; output can be manipulated via pre-defined inputs.

That third one is really what this talk is all about. Although, if we&#39;re talking strictly, taking parameters isn&#39;t really necessary for a component to be a component. However, most components do take parameters, and that&#39;s where the complexity lies, so let&#39;s round up on this one.

Let&#39;s dive into an example of how you might normally configure a component.

We&#39;ll start with our good friend, the button. Boring, perhaps, but that&#39;s rude to say about any friend, much less a good one. Okay, what do we want to pay attention to here?

The button&#39;s display stays the same, while the data changes depending on what parameters it is passed. Each time it&#39;s called, the button will have a different URL and text. Straightforward.

![](CleanShot%202026-02-10%20at%2021.46.29@2x.png)

To implement this, we have `text` and `url` parameters, which is how we&#39;re passing the data to our button.

```twig
{{ include(&#39;my-theme:button&#39;, {
	text: &#34;Hello, world!&#34;,
	url: &#34;https://example.com&#34;,
}) }}
```
Our button component can change its display as well, depending on the parameters we pass.

![](CleanShot%202026-02-10%20at%2021.44.35@2x.png)

We can see that the button component accepts a `variation` parameter, and we can pass &#34;primary&#34;, &#34;secondary&#34;, or &#34;tertiary&#34; to it. Sometimes `variation` will be named something else, like `type`, or `style`, but the meaning is the same.

```twig
{{ include(&#39;my-theme:button&#39;, {
	variation: &#34;primary&#34;,
	text: &#34;Hello, world!&#34;,
	url: &#34;https://example.com&#34;,
}) }}
```
Our variation will set an HTML property, usually a `class`, so we can style the variations differently.

```twig
&lt;a class=&#34;my-button my-button--{{ variation }}&#34; href=&#34;{{ url }}&#34;&gt;{{ text }}&lt;/a&gt;
```
```css
.my-button {
	/* button code… */
	border: 2px solid rgb(231 0 119);
	background-color: rgb(231 0 119);
}

.my-button--secondary {
	background-color: transparent;
	color: black;
}
```
&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;Basic component variations&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;LEZopJd&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/LEZopJd&#34;&gt;
  Basic component variations&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;

This is good!

I&#39;m not advocating for the fall of component variations. They&#39;re great! Using CSS Custom Properties doesn&#39;t supplant traditional variation-based customization. It works alongside variations. We&#39;ll talk about how they work together in just a little bit. For now, what are these mysterious CSS Custom Properties I keep speaking of?

## What are CSS Custom Properties?

They&#39;re variables in CSS. They follow the cascade, and they&#39;re computed at runtime, and they can be redefined. These are three important qualities that we&#39;ll leverage to enhance our components.

```css
.my-selector {
	color: var(--primary-color);
}
```
A common pattern is to set a lot of custom properties on the `:root` element. Values like font sizes, and colors, and spacing sizes, and all types of little chunks of design information that can be used throughout our system.

```css
:root {
	--primary-color: rgb(231 0 119); 
}

.my-button {
	/* button code… */
	border: 2px solid var(--primary-color);
	background-color: var(--primary-color);
}
```
This helps us build consistency throughout our website.

&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;Basic component variations with custom properties&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;GgqaLpL&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/GgqaLpL&#34;&gt;
  Basic component variations with custom properties&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;

Custom Properties set on the `:root` are available to use everywhere, but are centrally managed.

```css
.my-blockquote {
	border-inline-start: 4px solid var(--primary-color);
	padding-inline-start: 2ch;
	font-family: var(--font-sans-serif);
}

.my-blockquote &gt; * {
	margin-block: var(--spacing-vertical-rhythm) 0;
}
```
 The `:root` pseudo-selector is the highest parent of the page, so setting properties there guarantees that those custom properties can be accessed anywhere else on the page. This saves us some work if the design needs to be tweaked. Now, we only have to change the value in one place, rather than in every place that value is used.

In the following demo, we’re reusing several custom properties across two components.

&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;Re-use across components&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;xbOXqXd&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/xbOXqXd&#34;&gt;
  Re-use across components&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;

This is also good!

Setting Custom Properties on the `:root` to make them globally available is incredibly useful, for all the reasons I just mentioned. This pattern is great!

However, that&#39;s where we often stop. As good as this pattern is, it kind of bothers me if this is all we end up using Custom Properties for.

## Re-defining Custom Properties

We&#39;re essentially treating custom properties as constants. A constant is similar to a variable, but its value never changes during the runtime of the program. 

```js
const myConst = &#34;Hello&#34;;
myConst = &#34;Goodbye&#34;; // illegal!
```
But Custom Properties have so much more to offer. They&#39;re more dynamic, more flexible, more, dare I say, compelling. Custom Properties are…variables.

```css
:root {
	--primary-color: green;
	--primary-color: red; /* legal! */
}
```
One of the important properties of Custom Properties I mentioned earlier was that their value can be re-defined. Sure, but how is that useful? In our example here, `--primary-color` will be `red`, but…who cares?

Let&#39;s go back to our button example.

&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;Basic component variations with re-defined custom properties&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;YPWbMQg&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/YPWbMQg&#34;&gt;
  Basic component variations with re-defined custom properties&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;

We&#39;re using Custom Properties as actual variables, overriding them inside their selector. We&#39;re still leveraging traditional variations and global Custom Properties set on the `:root`. In fact, not only are all these approaches living in harmony with each other, we&#39;re integrating them together.

It also offers a clear API for extensions in the future, showing which parts are meant to be changed, and which parts should be more stable.

Okay, that works, but it&#39;s not too much different than writing CSS without re-defined custom properties.

Let&#39;s say you have a landing page type, where editors can configure which components appear in a list, and in which order, maybe using Layout Builder, or Paragraphs, or Drupal Canvas.

Editors place components into sections, which can have either a light or dark background. The components inside need to be styled to accommodate both color schemes.

Custom Properties offer a nice way to solve this.

Remember that Custom Properties follow the cascade. So we can re-define the property on a component parent, and have the value flow down.

&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;Setting Properties on the Parent&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;VYjMbwV&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/VYjMbwV&#34;&gt;
  Setting Properties on the Parent&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;

In this demo, we have two section types, one with a light background, and one with a dark background. Components inside these sections need to change based on the color. We do that by setting Custom Properties on the section, and utilizing those values in the cascade.

The code is simple and clear. If we need to support a new background color, all we need to do is re-define the custom properties in a new selector.

## Custom Properties vs Variations

I think of these as two separate, quasi-related concepts. Both are used to customize components. Custom properties target a single property, whereas a variation is a collection of properties, which can themselves be a custom property. Both are also nice API surfaces for other developers to leverage.

I reach for a variation when there&#39;s a larger function the component needs to achieve. I reach for Custom Properties when I need granular control. Both of these, as we&#39;ve seen, can and do work well together.

## The complexity story

I think this pattern really shines when the system gets more complicated. And don&#39;t they all?

Imagine you have a component that needs `3rem` padding on either side.

No problem. You&#39;re done before you wake up.

```css
.my-component {
	padding-inline: 3rem;
}
```
Now, imagine that we need `3rem` padding on the left and right for every component, and that the value should be consistent across all components. And there&#39;s fifty of them.

A bit of legwork, but no problem. Add a custom property to the `:root`, and apply it to every component.

```css
:root {
	--component-spacing: 3rem;
}

.my-component {
	padding-inline: var(--component-spacing);
}

.my-other-component {
	padding-inline: var(--component-spacing);
}

/* etc */
```
Now, imagine that this padding treatment is only for landing pages. On text heavy pages, the components have less room, so they need to have only `2rem` of padding.

No problem. You want to stay consistent, so you add a variation, and override the component. You&#39;ll need to do that for all fifty components, and that feels heavy for such a small change, but it works.

```css
:root {
	--component-spacing: 3rem;
	--component-spacing-small: 2rem;
}

.my-component--small-padding {
	padding-inline: var(--component-spacing-small);
}

.my-component--small-padding {
	padding-inline: var(--component-spacing-small);
}

/* etc */
```
Now, imagine that all these components can also appear in a sidebar. That&#39;s even more space constrained, so components there can only have `1rem` of padding.

No…problem? That&#39;s another variation for all fifty components, for the same little sized change. But, screw it, throw it on the pile. Next!

```css
:root {
	--component-spacing: 3rem;
	--component-spacing-small: 2rem;
	--component-spacing-extra-small: 1rem;
}

.my-component--extra-small-padding {
	padding-inline: var(--component-spacing-extra-small);
}

.my-component--extra-small-padding {
	padding-inline: var(--component-spacing-extra-small);
}

/* etc */
```
Now, imagine that for some of these spots, the template isn&#39;t always aware of its context, meaning we can&#39;t pass in the right variation for every place a component will render. Unrealistic, I know.

Okay, not great, but you know what?

No problem. You target a unique selector that wraps the components that can&#39;t get the right variation, and add it to the variation styles. It&#39;s not pretty, but it works.

```css
.my-place-that-cant-get-a-variation .my-component,
.my-component--my-variation {

/* etc */
```
You do have to do that for every one of the fifty components, however. Your code is starting to get bloated and messy. The chance for styles to end up where they shouldn&#39;t and other display bugs just shot up.

Now, imagine that this variation dead-zone affects every component placement type we&#39;ve coded: landing pages, text pages, and sidebars. That means you&#39;ll need to manage this extra code for every variation. That bit of extra boilerplate code is ballooning across all fifty components.

Now, imagine that this site will continue to change. More components, more places to put them, more variations. More more more.

Now…imagine all that is real.

No; problem. That&#39;s a bad time.

Or, you could set a few custom properties on every component once, define a default on the `:root`, then re-define them on a parent for each placement type, bypassing the whole issue.

&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;No muss no fuss&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;vEKqeox&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/vEKqeox&#34;&gt;
  No muss no fuss&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;

## Custom property math

Because Custom Properties are computed at runtime, they can  be included in a `calc()` function like any other value. Or `tan()` or `sin()` functions, but let&#39;s stay away from trigonometry and stick to the friendly `calc()`. Computing custom properties can be really useful when there&#39;s a set of related values that share a common base.

```css
.my-component {
	padding-block: var(--spacing-base);
	padding-inline: calc(var(--spacing-base) / 2));
}
```
For example, think of a table component that has multiple settings for how much whitespace is contained in each cell.

&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;JS CSS Custom Properties&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;WbxJeam&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/WbxJeam&#34;&gt;
  JS CSS Custom Properties&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;

Here, we redefine the custom property with a bit of JavaScript that injects the variable inline, and then compute the rest of the white space off that value, keeping a tight relationship between space with one setting.

## One more thing

Custom Properties provide, I think, a compelling API surface for others to customize your components in flexible ways that you still define. All flexibility comes with a cost. We know this. Misuse of the system can and will occur given enough time and attention. It won&#39;t solve your life, but one way Custom Properties can help is by type checking.

Yes, it&#39;s true. We can have more control over a custom property by defining it with `@property` method.

```css
[@property](https://micro.blog/property) --rotation {
  syntax: &#39;&lt;angle&gt;&#39;;
  inherits: true;
  initial-value: 0deg;
}
```
This is more verbose than the straightforward assignments we&#39;ve been doing, but it has advantages. 

First, it is not set on a scope, like `:root` or another selector. You&#39;re just registering the property, and it can be redefined anywhere.

Second, you can tell the property which types it will accept via `syntax`. We&#39;re showing a single type here, but multiple can be defined. Any value assigned to the property that are of a different type will be discarded, and an error will be shown in the browser dev tools. This is not possible when you define a Custom Property otherwise. Those properties will accept any value, even if it is invalid for the use case. This is especially useful for creating a pit of success for other developers, and gets more useful the larger the system is and the larger the user base is. Think: a design system.

There&#39;s two other `@property` aspects here: `inherits` and `initial-value`. Inherits is `true` by default, and controls whether children will get this Custom Property when it&#39;s set on a parent. I&#39;ve never personally found a real use case for turning off inheritance, but if you know of one, please yell at me after the session!

Finally, there&#39;s initial value. It does what it says on the tin. Whatever value you set here, will be the value of the Custom Property, unless otherwise redefined.

&lt;p class=&#34;codepen&#34; data-height=&#34;300&#34; data-pen-title=&#34;Controlling with [@property](https://micro.blog/property)&#34; data-default-tab=&#34;html,result&#34; data-slug-hash=&#34;qENeYeM&#34; data-user=&#34;bronzehedwick&#34; style=&#34;height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;&#34;&gt;
  &lt;span&gt;See the Pen &lt;a href=&#34;https://codepen.io/bronzehedwick/pen/qENeYeM&#34;&gt;
  Controlling with [@property](https://micro.blog/property)&lt;/a&gt; by Chris DeLuca (&lt;a href=&#34;https://codepen.io/bronzehedwick&#34;&gt;@bronzehedwick&lt;/a&gt;)
  on &lt;a href=&#34;https://codepen.io&#34;&gt;CodePen&lt;/a&gt;.&lt;/span&gt;
&lt;/p&gt;

In the second promo in the example above, the “New” sticker isn’t rotated correctly. If you inspect that element in your browser dev tools, you’ll see that the `--rotation` Custom Property shows a helpful warning: &lt;samp&gt;Invalid property value: expected type &lt;angle&gt;&lt;/samp&gt;. This is caused by passing a `px` value instead of an angle, like `deg`.

## Conclusion

So what happened just now when you read this article? I made the case that CSS Custom Properties:

- Are CSS variables
- Are not a replacement for component variations
- Work in harmony with variations
- Can be used globally to create consistency
- Can be re-defined to save effort
- Shine at scale
- Can be used in math
- Can be type checked

There you have it. So long, and thanks for all the fish!
</source:markdown>
    </item>
    
    <item>
      <title>The Bride!, 2026</title>
      <link>https://www.chrisdeluca.me/2026/03/07/the-bride.html</link>
      <pubDate>Sat, 07 Mar 2026 20:30:39 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/03/07/the-bride.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/1045767-the-bride-2026-0-600-0-900-crop.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;I liked all the themes it was playing with, but it felt muddled and didn’t really hag together for me. Felt like keywords stuffing a plot.&lt;/p&gt;
</description>
      <source:markdown>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/1045767-the-bride-2026-0-600-0-900-crop.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;I liked all the themes it was playing with, but it felt muddled and didn’t really hag together for me. Felt like keywords stuffing a plot.&lt;/p&gt;
</source:markdown>
    </item>
    
    <item>
      <title>Nirvanna the Band the Show the Movie, 2025 - ★★★★★</title>
      <link>https://www.chrisdeluca.me/2026/03/06/nirvanna-the-band-the-show.html</link>
      <pubDate>Fri, 06 Mar 2026 22:57:07 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/03/06/nirvanna-the-band-the-show.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/1041012-nirvanna-the-band-the-show-the-movie-0-600-0-900-crop.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;God damn this movie is so funny. I like it better than the show even. So smart at being so stupid. A+. Go see it now.&lt;/p&gt;
</description>
      <source:markdown>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/1041012-nirvanna-the-band-the-show-the-movie-0-600-0-900-crop.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;God damn this movie is so funny. I like it better than the show even. So smart at being so stupid. A+. Go see it now.&lt;/p&gt;
</source:markdown>
    </item>
    
    <item>
      <title>The Brave Little Toaster, 1987</title>
      <link>https://www.chrisdeluca.me/2026/03/01/the-brave-little-toaster.html</link>
      <pubDate>Sun, 01 Mar 2026 13:51:59 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/03/01/the-brave-little-toaster.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/39344-the-brave-little-toaster-0-600-0-900-crop.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;I had only seen a small part of this movie when I was maybe six, from under the couch. Really fun to revisit as an adult. I enjoyed it legitimately, but it was also dare I say healing to that little kid who was so scared of it. I think what confused and scared me the most as a child was how mean the characters are to each other. And man does this thing deal with DARK themes. Some banger van dyke parks tunes as well.&lt;/p&gt;
</description>
      <source:markdown>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/39344-the-brave-little-toaster-0-600-0-900-crop.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;I had only seen a small part of this movie when I was maybe six, from under the couch. Really fun to revisit as an adult. I enjoyed it legitimately, but it was also dare I say healing to that little kid who was so scared of it. I think what confused and scared me the most as a child was how mean the characters are to each other. And man does this thing deal with DARK themes. Some banger van dyke parks tunes as well.&lt;/p&gt;
</source:markdown>
    </item>
    
    <item>
      <title>Godzilla, Mothra and King Ghidorah: Giant Monsters All-Out Attack, 2001</title>
      <link>https://www.chrisdeluca.me/2026/03/01/godzilla-mothra-and-king-ghidorah.html</link>
      <pubDate>Sun, 01 Mar 2026 13:48:24 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/03/01/godzilla-mothra-and-king-ghidorah.html</guid>
      <description>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/28063-godzilla-mothra-and-king-ghidorah-giant-monsters-all-out-a-0-600-0-90.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;The human characters constantly have plot realizations out of thin air, and there’s way more ghosts than I was expecting.&lt;/p&gt;
</description>
      <source:markdown>&lt;p&gt;&lt;img src=&#34;https://cdn.uploads.micro.blog/111874/2026/28063-godzilla-mothra-and-king-ghidorah-giant-monsters-all-out-a-0-600-0-90.jpg&#34;/&gt;&lt;/p&gt; &lt;p&gt;The human characters constantly have plot realizations out of thin air, and there’s way more ghosts than I was expecting.&lt;/p&gt;
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/02/26/i-got-stuck-down-in.html</link>
      <pubDate>Thu, 26 Feb 2026 16:04:29 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/02/26/i-got-stuck-down-in.html</guid>
      <description>&lt;p&gt;I got stuck down in Florida for a week because of the storm in the northeast. Pretty stressful, but glad to have some time in the sun. Going to be flying back tomorrow. 🤞🛬&lt;/p&gt;
</description>
      <source:markdown>I got stuck down in Florida for a week because of the storm in the northeast. Pretty stressful, but glad to have some time in the sun. Going to be flying back tomorrow. 🤞🛬
</source:markdown>
    </item>
    
    <item>
      <title></title>
      <link>https://www.chrisdeluca.me/2026/02/24/i-gave-a-talk-at.html</link>
      <pubDate>Tue, 24 Feb 2026 11:47:09 -0400</pubDate>
      
      <guid>http://chrisd.micro.blog/2026/02/24/i-gave-a-talk-at.html</guid>
      <description>&lt;p&gt;I gave a talk at Florida Drupal Camp over the weekend. &lt;a href=&#34;https://www.fldrupal.camp/session/advanced-css-custom-properties-components&#34;&gt;Advanced CSS Custom Properties for Components&lt;/a&gt;. The camp was great, the organizers are terrific, and I think the session went well, despite some technical mistakes on my part. I&amp;rsquo;ll post the session as a blog post soon.&lt;/p&gt;
</description>
      <source:markdown>I gave a talk at Florida Drupal Camp over the weekend. [Advanced CSS Custom Properties for Components](https://www.fldrupal.camp/session/advanced-css-custom-properties-components). The camp was great, the organizers are terrific, and I think the session went well, despite some technical mistakes on my part. I&#39;ll post the session as a blog post soon.
</source:markdown>
    </item>
    
  </channel>
</rss>
