<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: MS_Y</title>
    <description>The latest articles on DEV Community by MS_Y (@black7375).</description>
    <link>https://dev.to/black7375</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1742463%2F4cb29a4b-b2e2-40fd-88bf-5728ef454703.jpeg</url>
      <title>DEV Community: MS_Y</title>
      <link>https://dev.to/black7375</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/black7375"/>
    <language>en</language>
    <item>
      <title>Rethinking CSS in JS</title>
      <dc:creator>MS_Y</dc:creator>
      <pubDate>Thu, 12 Sep 2024 07:54:44 +0000</pubDate>
      <link>https://dev.to/black7375/rethinking-css-in-js-5dip</link>
      <guid>https://dev.to/black7375/rethinking-css-in-js-5dip</guid>
      <description>&lt;h2&gt;
  
  
  0. Introduction
&lt;/h2&gt;

&lt;p&gt;In the world of web development, &lt;strong&gt;CSS is a key element&lt;/strong&gt; in making user interfaces beautiful and functional.&lt;/p&gt;

&lt;p&gt;However, as the complexity of web applications has increased, &lt;strong&gt;CSS management has become an increasingly&lt;/strong&gt; challenging task. Style conflicts, performance degradation, and maintenance difficulties are concerns for many developers.&lt;/p&gt;

&lt;p&gt;Are these issues hindering the progress of your projects? (&lt;a href="https://www.reddit.com/r/ProgrammerHumor/comments/10mqqql/css_is_tough_sometimes/" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrir1dm7g2qoqyevhzmd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrir1dm7g2qoqyevhzmd.png" alt="CSS is tough sometimes" width="222" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This article delves deeply into new approaches to solving these problems, &lt;strong&gt;particularly CSS in JS&lt;/strong&gt;.&lt;br&gt;
Starting with the historical background of CSS, it covers a &lt;strong&gt;wide range of topics&lt;/strong&gt; from modern styling methods to future design systems.&lt;/p&gt;

&lt;p&gt;The structure of the article is as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Definition and background of CSS in JS&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;1. What is CSS in JS?&lt;/li&gt;
&lt;li&gt;2. The background of CSS in JS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Historical context of CSS and design&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;3. The background of CSS&lt;/li&gt;
&lt;li&gt;4. The background of Design&lt;/li&gt;
&lt;li&gt;5. The background of Design System&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analysis of style management methods and new proposals&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;6. How were styles being managed?&lt;/li&gt;
&lt;li&gt;7. How should styles be managed?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specific implementation plans for CSS in JS&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;8. Why CSS in JS?&lt;/li&gt;
&lt;li&gt;9. Introduce project &lt;code&gt;mincho&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;10. CSS-friendly CSS in JS&lt;/li&gt;
&lt;li&gt;11. Scalable CSS in JS&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integration with design systems&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;12. CSS in JS for Design Systems&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In particular, this article introduces new concepts called &lt;code&gt;SCALE CSS methodology&lt;/code&gt; and &lt;code&gt;StyleStack&lt;/code&gt;, and proposes a &lt;strong&gt;&lt;a href="https://github.com/mincho-js/mincho" rel="noopener noreferrer"&gt;&lt;code&gt;mincho&lt;/code&gt;&lt;/a&gt; project&lt;/strong&gt; based on these. It aims to implement CSS in JS that is CSS-friendly and scalable.&lt;/p&gt;

&lt;p&gt;The ultimate purpose of this article is to present the &lt;strong&gt;possibility of better styling solutions&lt;/strong&gt; to developers, designers, and other web project stakeholders.&lt;/p&gt;

&lt;p&gt;Now, let's delve deeper into the world of CSS in JS in the main text. It will be a long journey, but I hope it provides you with new &lt;strong&gt;inspiration and opportunities for challenge&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. What is CSS in JS?
&lt;/h2&gt;

&lt;p&gt;CSS in JS is a technique that allows you to write CSS styles directly within your JavaScript(or TypeScript) code.&lt;br&gt;
Instead of creating separate CSS files, you can define styles alongside components in your JavaScript files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="cm"&gt;/** @jsxImportSource @emotion/react */&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;css&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@emotion/react&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buttonStyles&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;primary&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;primary&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;black&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1em&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0.25em 1em&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2px solid blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;borderRadius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;3px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pointer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;children&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;css&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;buttonStyles&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Normal Button&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Primary Button&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Being able to integrate it into JavaScript certainly seems convenient 😄&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The background of CSS in JS
&lt;/h2&gt;

&lt;p&gt;CSS in JS was introduced from a presentation titled &lt;a href="https://blog.vjeux.com/2014/javascript/react-css-in-js-nationjs.html" rel="noopener noreferrer"&gt;'React: CSS in JS – NationJS'&lt;/a&gt; by Vjeux, a Facebook developer.&lt;/p&gt;

&lt;p&gt;The problems that CSS-in-JS aimed to solve were as follows:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6xqyr9ca6skc2m51kzq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo6xqyr9ca6skc2m51kzq.png" alt="Problems with CSS at scale" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What is the problem more specifically?&lt;br&gt;
And how does CSS in JS solve it?&lt;/p&gt;

&lt;p&gt;I've organized them in the following table:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Problem&lt;/th&gt;
&lt;th&gt;Solution&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Global namespace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Need unique class names that are not duplicated as all styles are declared globally&lt;/td&gt;
&lt;td&gt;Use Local values as default&lt;br&gt;- Creating unique class names&lt;br&gt;- Dynamic styling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Implicit Dependencies&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The difficulty of managing dependencies between CSS and JS&lt;br&gt;- Side effect: CSS is applied globally, so it still works if another file is already using that CSS&lt;br&gt;- Difficulty in call automation: It's not easy to statically analyze and automate CSS file calls, so developers have to manage them directly&lt;/td&gt;
&lt;td&gt;Using the module system of JS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Dead Code Elimination&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Difficulty in removing unnecessary CSS during the process of adding, changing, or deleting features&lt;/td&gt;
&lt;td&gt;Utilize the optimization features of the bundler&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Minification&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dependencies should be identified and reduced&lt;/td&gt;
&lt;td&gt;As dependencies are identified, it becomes easier &lt;br&gt;to reduce them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sharing Constants&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Unable to share JS code and state values&lt;/td&gt;
&lt;td&gt;Use JS values as they are, or utilize CSS Variables&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Non-deterministic Resolution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Style priority varies depending on the CSS loading order&lt;/td&gt;
&lt;td&gt;- Specificity is automatically calculated and applied&lt;br&gt;- Compose and use the final value&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Breaking Isolation&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Difficulty in managing external modifications to CSS (encapsulation)&lt;/td&gt;
&lt;td&gt;- Encapsulation based on components&lt;br&gt;- Styling based on state&lt;br&gt;- Prevent styles that break encapsulation, such as &lt;code&gt;.selector &amp;gt; *&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;But it's not a silverbullet, and &lt;a href="https://dev.to/srmagura/why-were-breaking-up-wiht-css-in-js-4g9b"&gt;it has its drawbacks&lt;/a&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Runtime CSS in JS&lt;/th&gt;
&lt;th&gt;Pure CSS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxh58jh4lmhaspy7hb3b.png" alt="Runtime CSS in JS" width="800" height="467"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpehh4qk1nv6sp5a9jyee.png" alt="Pure CSS" width="800" height="416"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;CSS-in-JS adds &lt;a href="https://playfulprogramming.com/posts/why-is-css-in-js-slow" rel="noopener noreferrer"&gt;runtime overhead&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;CSS-in-JS increases your bundle size.&lt;/li&gt;
&lt;li&gt;CSS-in-JS clutters the React DevTools.&lt;/li&gt;
&lt;li&gt;Frequently inserting CSS rules forces the browser to do a lot of extra work.&lt;/li&gt;
&lt;li&gt;With CSS-in-JS, there's a lot more that can go wrong, especially when using SSR and/or component libraries.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Aside from the DevTools issue, it appears to be mostly a &lt;strong&gt;performance issue&lt;/strong&gt;.&lt;br&gt;
Of course, &lt;a href="https://github.com/andreipfeiffer/css-in-js" rel="noopener noreferrer"&gt;there are CSS in JS&lt;/a&gt;, which overcomes these issues by extracting the CSS and making it &lt;strong&gt;zero runtime&lt;/strong&gt;, but there are some tradeoffs.&lt;br&gt;
Here are two examples.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Co‑location:&lt;/strong&gt; To support co-location while removing as much runtime as possible, the module graph and AST should be analyzed and build times will increase. Alternatively, there is a method of abandoning co-location and isolating on a file-by-file basis, similar to &lt;a href="https://vanilla-extract.style/" rel="noopener noreferrer"&gt;Vanilla Extract&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic styling restrictions:&lt;/strong&gt; The combination of build issues and the use of CSS Variables forces us to support only some representations, like &lt;a href="https://github.com/mui/pigment-css?tab=readme-ov-file#styling-based-on-props" rel="noopener noreferrer"&gt;&lt;code&gt;Styling based on props&lt;/code&gt;&lt;/a&gt; in Pigment CSS, or learn to do things differently, like &lt;a href="https://github.com/mui/pigment-css?tab=readme-ov-file#coming-from-emotion-or-styled-components" rel="noopener noreferrer"&gt;&lt;code&gt;Coming from Emotion or styled-components&lt;/code&gt;&lt;/a&gt;. Dynamicity is also &lt;a href="https://github.com/streamich/freestyler/blob/master/docs/en/generations.md" rel="noopener noreferrer"&gt;one of the main metrics&lt;/a&gt; that can be used to distinguish between CSS in JS.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Therefore, pursuing zero(or near-zero) runtime in CSS-in-JS implementation methods creates a &lt;strong&gt;significant difference&lt;/strong&gt; in terms of &lt;strong&gt;expressiveness and API&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. The background of CSS
&lt;/h2&gt;
&lt;h3&gt;
  
  
  3.1 The Beginning of CSS
&lt;/h3&gt;

&lt;p&gt;Where did CSS come from?&lt;br&gt;
Early web pages were composed only of HTML, with very limited styling options.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&amp;lt;font&lt;/span&gt; &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"red"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;This text is red.&lt;span class="nt"&gt;&amp;lt;/font&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;emphasized&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; text.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is &lt;span class="nt"&gt;&amp;lt;em&amp;gt;&lt;/span&gt;italicized&lt;span class="nt"&gt;&amp;lt;/em&amp;gt;&lt;/span&gt; text.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is &lt;span class="nt"&gt;&amp;lt;u&amp;gt;&lt;/span&gt;underlined&lt;span class="nt"&gt;&amp;lt;/u&amp;gt;&lt;/span&gt; text.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is &lt;span class="nt"&gt;&amp;lt;strike&amp;gt;&lt;/span&gt;strikethrough&lt;span class="nt"&gt;&amp;lt;/strike&amp;gt;&lt;/span&gt; text.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is &lt;span class="nt"&gt;&amp;lt;big&amp;gt;&lt;/span&gt;big&lt;span class="nt"&gt;&amp;lt;/big&amp;gt;&lt;/span&gt; text, and this is &lt;span class="nt"&gt;&amp;lt;small&amp;gt;&lt;/span&gt;small&lt;span class="nt"&gt;&amp;lt;/small&amp;gt;&lt;/span&gt; text.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;H&lt;span class="nt"&gt;&amp;lt;sub&amp;gt;&lt;/span&gt;2&lt;span class="nt"&gt;&amp;lt;/sub&amp;gt;&lt;/span&gt;O is the chemical formula for water.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;2&lt;span class="nt"&gt;&amp;lt;sup&amp;gt;&lt;/span&gt;3&lt;span class="nt"&gt;&amp;lt;/sup&amp;gt;&lt;/span&gt; is 8.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example, the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/font" rel="noopener noreferrer"&gt;&lt;code&gt;font&lt;/code&gt;&lt;/a&gt; tag could change color and size, but it couldn't adjust letter spacing, line height, margins, and so on.&lt;/p&gt;

&lt;p&gt;You might think, "Why not just extend HTML tags?" However, it's difficult to create tags for all styling options, and when changing designs, you'd have to &lt;strong&gt;modify the HTML structure&lt;/strong&gt; itself.&lt;br&gt;
This deviates from HTML's original purpose as a document markup language and also means that it's &lt;strong&gt;hard to style dynamically&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you want to change an underline to a strikethrough at runtime, you'd have to create a &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/strike" rel="noopener noreferrer"&gt;&lt;code&gt;strike&lt;/code&gt;&lt;/a&gt; element, clone the inner elements, and then replace them.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;strikeElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;strike&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;strikeElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;uElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHTML&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;uElement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;parentNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replaceChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strikeElement&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;uElement&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When separated by style, you only need to change the attributes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textDecoration&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;line-through&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you convert to inline style, it would be as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"color: red;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;This text is red.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-weight: bold;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;bold&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt; text.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-style: italic;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;italic&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt; text.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"text-decoration: underline;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;underlined&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt; text.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"text-decoration: line-through;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;strikethrough&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt; text.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-size: larger;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;large&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt; text, and this is &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"font-size: smaller;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;small&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt; text.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;H&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"vertical-align: sub; font-size: smaller;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;2&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;O is the chemical formula for water.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;2&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;style=&lt;/span&gt;&lt;span class="s"&gt;"vertical-align: super; font-size: smaller;"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;3&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt; is 8.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, inline style must be written &lt;strong&gt;repeatedly every time&lt;/strong&gt;.&lt;br&gt;
That's why CSS, which styles using selectors and declarations, was introduced.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This is the &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;important part&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt; of this sentence.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Hello! I want to &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;emphasize this in red&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;In a new sentence, there is still an &lt;span class="nt"&gt;&amp;lt;strong&amp;gt;&lt;/span&gt;important part&lt;span class="nt"&gt;&amp;lt;/strong&amp;gt;&lt;/span&gt;.&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

&lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;strong&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;underline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since CSS is a method that applies multiple styles collectively, rules are needed to determine which style should take precedence when the target and style of &lt;strong&gt;CSS Rulesets&lt;/strong&gt; overlap.&lt;/p&gt;

&lt;p&gt;CSS was created with a feature called &lt;strong&gt;Cascade&lt;/strong&gt; to address this issue. Cascade is a method of layering styles, starting with the simple ones and moving on to the more &lt;strong&gt;specific&lt;/strong&gt; ones later. The idea was that it would be good to create a system where basic styles are first applied to the whole, and then increasingly specific styles are applied, in order to reduce repetitive work.&lt;/p&gt;

&lt;p&gt;Therefore, CSS was designed to apply priorities differently according to the inherent specificity of CSS Rules, rather than the order in which they were written.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* The following four codes produce the same result even if their order is changed. */&lt;/span&gt;
&lt;span class="nf"&gt;#id&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.class&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;green&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;href&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;yellow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Even if the order is changed, the result is the same as the above code. */&lt;/span&gt;
&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nf"&gt;#id&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;href&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;yellow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.class&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;green&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, as CSS became more scalable, a problem arose..&lt;/p&gt;

&lt;h3&gt;
  
  
  3.2 Scalable CSS
&lt;/h3&gt;

&lt;p&gt;Despite the advancements in CSS, issues related to &lt;a href="https://andreipfeiffer.dev/blog/2022/scalable-css-evolution" rel="noopener noreferrer"&gt;scalability in CSS are still being discussed&lt;/a&gt;.&lt;br&gt;
In addition to the issues raised by CSS in JS, several other obstacles exist in CSS.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Code duplication:&lt;/strong&gt; When writing media queries, pseudo-classes, and pseudo-elements, a lot of duplication occurs if logic is required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specificity wars:&lt;/strong&gt; As a workaround for name collisions and non-deterministic ordering, specificity keeps raising the specificity to override the style. You can have fun reading &lt;a href="https://css-tricks.com/a-specificity-battle/" rel="noopener noreferrer"&gt;Specificity Battle!&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lack of type-safety:&lt;/strong&gt; CSS does not work type-safely with TypeScript or Flow.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These issues can be addressed as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Code duplication:&lt;/strong&gt; Use nesting in CSS preprocessors, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specificity wars:&lt;/strong&gt; Atomic CSS is defined for each property separately, so it has the same specificity except for the loading order and &lt;code&gt;!important&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lack of type-safety:&lt;/strong&gt; Just use CSS in JS with type-safe support.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Expressing layout is &lt;a href="https://amjustsam.medium.com/how-to-fix-css-layout-issues-bc54a21b0b8c" rel="noopener noreferrer"&gt;another hurdle&lt;/a&gt; in CSS, made more complex by the interactions between various properties.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79qokxspjytqfzm5f1gp.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F79qokxspjytqfzm5f1gp.gif" alt="Family Guy Css meme" width="400" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CSS might seem &lt;a href="https://css-tricks.com/why-is-css-frustrating/" rel="noopener noreferrer"&gt;simple on the surface, it's not easy&lt;/a&gt; to master. It is well known that many people struggle even with simple center alignment(&lt;a href="https://tonsky.me/blog/centering/" rel="noopener noreferrer"&gt;1&lt;/a&gt;, &lt;a href="https://www.joshwcomeau.com/css/center-a-div/" rel="noopener noreferrer"&gt;2&lt;/a&gt;). The apparent simplicity of CSS can be deceptive, as its depth and nuances make it more challenging than it initially appears. &lt;/p&gt;

&lt;p&gt;For example, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/display" rel="noopener noreferrer"&gt;&lt;code&gt;display&lt;/code&gt;&lt;/a&gt; in &lt;strong&gt;CSS has different layout models&lt;/strong&gt;: block, inline, table, flex, and grid.&lt;br&gt;
Imagine the complexity when the following properties are used in combination: &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/Building_blocks/The_box_model" rel="noopener noreferrer"&gt;box model&lt;/a&gt;,&lt;a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Responsive_Design" rel="noopener noreferrer"&gt;Responsive design&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Floats" rel="noopener noreferrer"&gt;Floats&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Positioning" rel="noopener noreferrer"&gt;Positioning&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/transform" rel="noopener noreferrer"&gt;&lt;code&gt;transform&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/writing-mode" rel="noopener noreferrer"&gt;&lt;code&gt;writing-mode&lt;/code&gt;&lt;/a&gt;, &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/mask" rel="noopener noreferrer"&gt;&lt;code&gt;mask&lt;/code&gt;&lt;/a&gt;, etc.&lt;/p&gt;

&lt;p&gt;As project scale increases, it becomes even more challenging due to &lt;a href="https://tsev.dev/posts/2020-12-06-what-makes-css-hard-to-master/" rel="noopener noreferrer"&gt;side effects&lt;/a&gt; related to &lt;strong&gt;DOM positioning, cascading, and specificity&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Layout issues should be addressed through well-designed CSS frameworks, and as previously mentioned, using CSS in JS to isolate styles can mitigate side effects.&lt;/p&gt;

&lt;p&gt;However, this approach does not completely solve all problems. Style isolation may lead to new side effects, such as increased file sizes due to &lt;strong&gt;duplicate style declarations&lt;/strong&gt; in each component, or &lt;strong&gt;difficulties in maintaining consistency&lt;/strong&gt; of common styles across the application.&lt;br&gt;
This directly conflicts with the design &lt;strong&gt;combinatorial explosion and consistency issues&lt;/strong&gt; that will be introduced next.&lt;/p&gt;

&lt;p&gt;For now, we can delegate layout concerns to frameworks like &lt;a href="https://getbootstrap.com/" rel="noopener noreferrer"&gt;Bootstrap&lt;/a&gt; or &lt;a href="https://bulma.io/" rel="noopener noreferrer"&gt;Bulma&lt;/a&gt;, and &lt;strong&gt;focus more on management&lt;/strong&gt; aspects.&lt;/p&gt;
&lt;h2&gt;
  
  
  4. The background of Design
&lt;/h2&gt;

&lt;p&gt;At its core, CSS is a powerful tool for expressing and implementing design in web development.&lt;/p&gt;

&lt;p&gt;There are many factors to &lt;a href="https://www.codecademy.com/resources/docs/uiux/design-methodologies/five-elements-of-ux-design" rel="noopener noreferrer"&gt;consider when creating a UI/UX&lt;/a&gt;, and the following elements are crucial to represent in your design:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnqzv5b4rgyqp77jfaox.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnqzv5b4rgyqp77jfaox.png" alt="Five Elements of UX Design" width="640" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Visual Design&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Layout: Determines the structure of the screen and the placement of elements. Consider spacing, alignment, and hierarchy between elements.&lt;/li&gt;
&lt;li&gt;Color: Select a color palette that considers brand identity and user experience. Understanding of color theory is necessary.&lt;/li&gt;
&lt;li&gt;Typography: Choose fonts and text styles that match readability and brand image.&lt;/li&gt;
&lt;li&gt;Icons and Graphic Elements: Design intuitive and consistent icons and graphics.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interaction Design&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Design the behavior of UI elements such as buttons, sliders, and scrollbars.&lt;/li&gt;
&lt;li&gt;Provide a natural user experience through animations and transition effects.&lt;/li&gt;
&lt;li&gt;Consider responsive design that adapts to various screen sizes.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Information Architecture&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Design the structure and hierarchy of content to allow users to easily find and understand information.&lt;/li&gt;
&lt;li&gt;Design navigation systems to enable users to easily move to desired locations.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility and Usability&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Pursue inclusive design that considers diverse users. i18n can also be included.&lt;/li&gt;
&lt;li&gt;Create intuitive and easy-to-use interfaces to reduce users' cognitive load.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency and Style Guide&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Create a style guide to maintain consistent design language throughout the application.&lt;/li&gt;
&lt;li&gt;Develop reusable components and patterns to increase efficiency.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Accurately expressing various design elements across diverse conditions presents a significant challenge.&lt;br&gt;
Consider that you need to take into account devices (phones, tablets, laptops, monitors, TVs), input devices (keyboard, mouse, touch, voice), landscape/portrait modes, dark/light themes, high contrast mode, internationalization (language, LTR/RTL), and more.&lt;br&gt;
Moreover, different UIs may need to be displayed based on user settings.&lt;/p&gt;

&lt;p&gt;Therefore, &lt;a href="https://en.wikipedia.org/wiki/Combinatorial_explosion" rel="noopener noreferrer"&gt;&lt;strong&gt;Combinatorial Explosion&lt;/strong&gt;&lt;/a&gt; is inevitable, and it's impossible to implement them one by one manually. (&lt;a href="https://www.torbair.com/blog/2015/12/26/4mvxoio4tc8j28reqsbz449tlab4ss" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumyq4tc71vp53zfmwj2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumyq4tc71vp53zfmwj2n.png" alt="combinatorial explosion" width="400" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a representative example, see the &lt;a href="https://github.com/black7375/Firefox-UI-Fix/tree/c79922aa45ff04a62e04ef0f8562dc53990b5208/src/tabbar/layout" rel="noopener noreferrer"&gt;definition&lt;/a&gt; and &lt;a href="https://github.com/black7375/Firefox-UI-Fix/blob/c79922aa45ff04a62e04ef0f8562dc53990b5208/css/leptonChrome.css#L5181-L6589" rel="noopener noreferrer"&gt;compilation&lt;/a&gt; of the tab bar layout in &lt;a href="https://github.com/black7375/Firefox-UI-Fix" rel="noopener noreferrer"&gt;my Firefox theme&lt;/a&gt;.&lt;br&gt;
Despite only considering the OS and user options, a file of about &lt;code&gt;360 lines&lt;/code&gt; produces a compilation result reaching approximately &lt;code&gt;1400 lines&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The conclusion is that effective design implementation needs to be inherently &lt;strong&gt;scalable&lt;/strong&gt;, typically managed either programmatically or through well-defined rulesets.&lt;br&gt;
The result is a design system for consistent management at scale.&lt;/p&gt;
&lt;h2&gt;
  
  
  5. The background of Design System
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.nngroup.com/articles/design-systems-vs-style-guides/" rel="noopener noreferrer"&gt;Design systems&lt;/a&gt; serve as a single source of truth, covering all aspects of design and development from visual styles to UI patterns and code implementation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvjvhriyhmi72of6v9jh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpvjvhriyhmi72of6v9jh.png" alt="Design system" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;According to Nielsen Norman Group, a design system includes the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Style Guides:&lt;/strong&gt; Documentation that provides style guidance on specific style needs, including brand, content, and visual design.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Component library:&lt;/strong&gt; These specify reusable individual UI elements, for example buttons. For each UI element, specific design and implementation details are provided, including information like attributes that can be customized(size, copy, etc), different states(enabled, hover, focus, disabled), and the reusable clean, tight code for each element.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern library:&lt;/strong&gt; These specify reusable patterns, or groups of individual UI elements taken from the component library. For example, you might see a pattern for a page header, which could be made up of a title, a breadcrumb, a search, and a primary and secondary button.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design resources:&lt;/strong&gt; For designers to actually use and design with the components and libraries, a design file is required (usually in Figma). Resources such as logos, typefaces and fonts, and icons are usually also included for designers and developers to use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Design systems should function as a crossroads for designers and developers, supporting &lt;strong&gt;functionality&lt;/strong&gt;, &lt;strong&gt;form&lt;/strong&gt;, &lt;strong&gt;accessibility&lt;/strong&gt;, and &lt;strong&gt;customization&lt;/strong&gt;.&lt;br&gt;
But designers and developers think differently and have different perspectives.&lt;/p&gt;

&lt;p&gt;Let's use components as a lens to recognize the differences between designers' and developers' perspectives!!&lt;/p&gt;
&lt;h3&gt;
  
  
  5.1 Component Structure
&lt;/h3&gt;

&lt;p&gt;The designer should also decide which icon will be used for the checkbox control.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fec8tuev505x9m78zho9a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fec8tuev505x9m78zho9a.png" alt="designers vs developers component structure" width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Designers tend to focus on form, while developers tend to focus on function.&lt;br&gt;
For designers, a button is a button if it looks inviting to press, while for developers, it's a button as long as it can be pressed.&lt;/p&gt;

&lt;p&gt;If the component is more complex, the gap between &lt;a href="https://uxdesign.cc/text-fields-forms-design-ui-components-series-2b32b2beebd0" rel="noopener noreferrer"&gt;designers&lt;/a&gt; and &lt;a href="https://ark-ui.com/react/docs/components/editable" rel="noopener noreferrer"&gt;developers&lt;/a&gt; could widen even further.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffcket8vpkukh4hzb3mb0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffcket8vpkukh4hzb3mb0.png" alt="InputField Anatomy" width="800" height="193"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  5.2 Designer considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Visual options:&lt;/strong&gt; The appearance changes according to the set options such as Primary, Accent, Outlined, Text-only, etc.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgisz59tn4t72og6k86xy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgisz59tn4t72og6k86xy.png" alt="Visual Options" width="552" height="157"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;State options:&lt;/strong&gt; The appearance changes depending on the state and context&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcajixvpvpocdkgccvfam.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcajixvpvpocdkgccvfam.png" alt="State Options" width="800" height="127"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Design Decision:&lt;/strong&gt; Determining values with Component Structure, Visual/State Options, Visual Attributes(Color, Typography, Icon, etc) and more.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  5.3 Developer considerations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Option:&lt;/strong&gt; Configurable initial values. Visual options are also included. Ex) Outlined, Size&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State:&lt;/strong&gt; Changes based on user interaction. Ex) Hover, Pressed, Focused, Selected(Checked)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event:&lt;/strong&gt; Actions that trigger a change in state. Ex) HoverEvent, PressEvent, FocusEvent, ClickEvent&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context:&lt;/strong&gt; Conditions injected from code that affect behavior. Ex) Readonly, Disabled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The final form is a combination of &lt;code&gt;Option&lt;/code&gt;, &lt;code&gt;State&lt;/code&gt;, and &lt;code&gt;Context&lt;/code&gt;, which results in the &lt;strong&gt;combinatorial explosion&lt;/strong&gt; mentioned above.&lt;/p&gt;

&lt;p&gt;Of these, &lt;code&gt;Option&lt;/code&gt; aligns with the designer's perspective, while &lt;code&gt;State&lt;/code&gt; and &lt;code&gt;Context&lt;/code&gt; do not.&lt;br&gt;
Perform state compression considering &lt;a href="https://statecharts.dev/state-machine-state-explosion.html" rel="noopener noreferrer"&gt;Parallel states, Hierarchies, Guards, etc&lt;/a&gt; to return to the designer perspective.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1sw4qu5w6c77lnqq8ow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb1sw4qu5w6c77lnqq8ow.png" alt="Statechart Hierarchies" width="537" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enabled:&lt;/strong&gt; Disabled OFF, Pressed OFF, Hovered OFF, Focused OFF&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hovered:&lt;/strong&gt; Disabled OFF, Pressed OFF, Hovered ON&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focused:&lt;/strong&gt; Disabled OFF, Pressed OFF, Focused ON&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pressed:&lt;/strong&gt; Disabled OFF, Pressed ON&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disabled:&lt;/strong&gt; Disabled ON&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  6. How were styles being managed?
&lt;/h2&gt;

&lt;p&gt;As you may have realized by now, creating and maintaining a high-quality UI is hard work.&lt;/p&gt;

&lt;p&gt;So the various states are covered by the state management library, but how were styles being managed?&lt;br&gt;
While methodologies, libraries, and frameworks continue to emerge because the solution has not yet been established, there are &lt;strong&gt;three main paradigms&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubxnd5s7woxv2zs8uh1w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubxnd5s7woxv2zs8uh1w.png" alt="Timeline of scalable CSS evolution milestones and turning points" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Semantic CSS:&lt;/strong&gt; Assign class based on the purpose or meaning of the element.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic CSS:&lt;/strong&gt; Create one class for each style(visual) attribute.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS in JS:&lt;/strong&gt; Write in JavaScript and isolate CSS for each component unit.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Among these, CSS in JS feels like a paradigm that uses a fundamentally different approach to expressing and managing styles.&lt;br&gt;
This is because CSS in JS is like &lt;strong&gt;mechanisms&lt;/strong&gt;, while and Semantic CSS and Atomic CSS are like &lt;strong&gt;policies&lt;/strong&gt;.&lt;br&gt;
Due to this difference, CSS in JS needs to be &lt;a href="https://en.wikipedia.org/wiki/Separation_of_mechanism_and_policy" rel="noopener noreferrer"&gt;explained separately&lt;/a&gt; from the other two approaches. (&lt;a href="https://www.youtube.com/watch?v=wbcUW8sU-Zo" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4j1iqowz1oekhm58ev6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4j1iqowz1oekhm58ev6.png" alt="Mechanism vs Policy" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When discussing the CSS in JS mechanism, CSS pre/post processors may come to mind.&lt;br&gt;
Similarly, when talking about policies, 'CSS methodologies' may come to mind.&lt;/p&gt;

&lt;p&gt;Therefore, I will introduce style management methods in the &lt;strong&gt;following order&lt;/strong&gt;: CSS in JS, processors, Semantic CSS and Atomic CSS, and other Style methodologies.&lt;/p&gt;
&lt;h3&gt;
  
  
  6.1 CSS in JS
&lt;/h3&gt;

&lt;p&gt;Then, what is the true identity of CSS in JS?&lt;br&gt;
The answer lies in the definition above.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;Write in JavaScript&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;isolate CSS&lt;/em&gt;&lt;/strong&gt; for each component unit.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;CSS written in JavaScript&lt;/li&gt;
&lt;li&gt;CSS isolation at the component level&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Among these, CSS isolation can be sufficiently applied to existing CSS to solve Global namespace and Breaking Isolation issues.&lt;br&gt;
This is &lt;a href="https://www.javascriptstuff.com/what-are-css-modules/" rel="noopener noreferrer"&gt;CSS Modules&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6gsagwo07rka2nsw08ed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6gsagwo07rka2nsw08ed.png" alt="CSS Module" width="350" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Based on the link to the &lt;a href="https://github.com/andreipfeiffer/css-in-js" rel="noopener noreferrer"&gt;CSS in JS analysis article&lt;/a&gt; mentioned above, I have categorized the features as follows.&lt;br&gt;
Each feature has &lt;strong&gt;trade-offs, and these are important&lt;/strong&gt; factors when creating CSS in JS.&lt;/p&gt;
&lt;h4&gt;
  
  
  6.1.1 Integration
&lt;/h4&gt;

&lt;p&gt;Particularly noteworthy content would be &lt;strong&gt;SSR(Server Side Rendering) and RSC(React Server Component)&lt;/strong&gt;.&lt;br&gt;
These are the directions that React and NEXT, which represent the frontend, are aiming for, and they are important because they have a significant impact on implementation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IDE:&lt;/strong&gt; Syntax highlighting and code completion&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript:&lt;/strong&gt; Whether it's &lt;a href="https://andreipfeiffer.dev/blog/2022/scalable-css-evolution/part8-type-safe-css" rel="noopener noreferrer"&gt;typesafe&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Framework&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agnostic:&lt;/strong&gt; Framework independent, libraries like &lt;a href="https://styled-components.com/" rel="noopener noreferrer"&gt;StyledComponent&lt;/a&gt; are designed specifically for React.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SSR:&lt;/strong&gt; Extract styles as strings when rendering on the server and support hydration&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RSC:&lt;/strong&gt; &lt;a href="https://react.dev/reference/rsc/server-components" rel="noopener noreferrer"&gt;RSC&lt;/a&gt; runs only on the server, so it cannot use client-side APIs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Server-side rendering creates HTML on the server and sends it to the client, so it needs to be &lt;strong&gt;extracted as a string&lt;/strong&gt;, and a response to &lt;a href="https://shud.in/posts/ssr-streaming-and-css-in-js" rel="noopener noreferrer"&gt;&lt;strong&gt;streaming is necessary&lt;/strong&gt;&lt;/a&gt;. As in the example of &lt;a href="https://styled-components.com/docs/advanced#server-side-rendering" rel="noopener noreferrer"&gt;Styled Component&lt;/a&gt;, additional settings may be required. (&lt;a href="https://x.com/dai_shi/status/1772224443084931419" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz6hqliq1gw9qnewcom36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz6hqliq1gw9qnewcom36.png" alt="SSR vs RSC" width="680" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Server-side style extraction&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Should be able to extract styles as strings when rendering on the server&lt;/li&gt;
&lt;li&gt;Insert extracted styles inline into HTML or create separate stylesheets&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unique class name generation&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Need a mechanism to generate unique class names to prevent class name conflicts between server and client&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hydration support&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;The client should be able to recognize and reuse styles generated on the server&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asynchronous rendering support&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Should be able to apply accurate styles even in asynchronous rendering situations due to data fetching, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://vercel.com/blog/understanding-react-server-components" rel="noopener noreferrer"&gt;Server components&lt;/a&gt; have more limitations. [&lt;a href="https://www.joshwcomeau.com/react/css-in-rsc/" rel="noopener noreferrer"&gt;1&lt;/a&gt;, &lt;a href="https://thenewstack.io/css-in-js-and-react-server-components-a-developer-guide/" rel="noopener noreferrer"&gt;2&lt;/a&gt;]&lt;br&gt;
&lt;strong&gt;Server and client components are separated&lt;/strong&gt;, and dynamic styling based on props, state, and context is not possible in server components.&lt;br&gt;
It should be able to extract &lt;code&gt;.css&lt;/code&gt; files as mentioned below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyci8w1103pqqltu2fel9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyci8w1103pqqltu2fel9.png" alt="Compare server components" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Static CSS generation&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Should be able to generate static CSS at build time&lt;/li&gt;
&lt;li&gt;Should be able to apply styles without executing JavaScript at runtime&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server component compatibility&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Should be able to define styles within server components&lt;/li&gt;
&lt;li&gt;Should not depend on client-side APIs&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Style synchronization between client and server&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Styles generated on the server must be accurately transmitted to the client&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  6.1.2 Style Writing
&lt;/h4&gt;

&lt;p&gt;As these are widely known issues, I will not make any further mention of them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Co-location:&lt;/strong&gt; Styles within the same file as the component?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Theming:&lt;/strong&gt; Design token feature supports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Definition:&lt;/strong&gt; Plain CSS string vs Style Objects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nesting&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Contextual:&lt;/strong&gt; Utilize parent selectors using &lt;code&gt;&amp;amp;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Abitrary:&lt;/strong&gt; Whether arbitrary deep nesting is possible&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  6.1.3 Style Output and Apply
&lt;/h4&gt;

&lt;p&gt;The notable point in the CSS output is Atomic CSS.&lt;br&gt;
Styles are &lt;a href="https://ryantsao.com/blog/virtual-css-with-styletron" rel="noopener noreferrer"&gt;split and output&lt;/a&gt; according to each CSS property.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg62ihp34nlhpdgxviqcd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg62ihp34nlhpdgxviqcd.png" alt="Virtual CSS with Styletron" width="682" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Style Ouput&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;.css&lt;/code&gt; file:&lt;/strong&gt; Extraction as CSS files&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt; tag:&lt;/strong&gt; Injection into the &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; of the &lt;code&gt;&amp;lt;document&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inline style:&lt;/strong&gt; Injected inline for each HTML element&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styles apply method&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;className:&lt;/strong&gt; Specify className as a string&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;styled component:&lt;/strong&gt; Create and use Styled Components&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;css&lt;/code&gt; prop:&lt;/strong&gt; Generate className from the &lt;a href="https://emotion.sh/docs/css-prop#use-the-css-prop" rel="noopener noreferrer"&gt;css prop&lt;/a&gt; in jsx&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic CSS:&lt;/strong&gt; Create separate classes for each CSS property&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  6.2 CSS Processors
&lt;/h3&gt;

&lt;p&gt;There might be a way to solve this by extending CSS rather than using a JavaScript-centric approach. (&lt;a href="https://vtricks.in/lms/blog-details/css-preprocessor" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl016ep41ecew60p8a9fz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl016ep41ecew60p8a9fz.png" alt="CSS Processors" width="800" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;CSS preprocessors use &lt;strong&gt;their own syntax&lt;/strong&gt; to extend CSS for writing code, which is then &lt;strong&gt;compiled into regular CSS&lt;/strong&gt;.&lt;br&gt;
Examples of CSS preprocessors include &lt;a href="https://sass-lang.com/" rel="noopener noreferrer"&gt;Sass&lt;/a&gt;, &lt;a href="https://lesscss.org/" rel="noopener noreferrer"&gt;Less&lt;/a&gt;, and &lt;a href="https://stylus-lang.com/" rel="noopener noreferrer"&gt;Stylus&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;CSS postprocessors use &lt;strong&gt;standard CSS syntax&lt;/strong&gt; as-is and transform it through a &lt;strong&gt;plugin system&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://postcss.org/" rel="noopener noreferrer"&gt;PostCSS&lt;/a&gt; is an example of a CSS postprocessor, and &lt;a href="https://lightningcss.dev/" rel="noopener noreferrer"&gt;Lightning CSS&lt;/a&gt; also has postprocessing capabilities.&lt;/p&gt;

&lt;p&gt;Here, the nesting and mixin features are particularly worth discussing.&lt;br&gt;
I will explain based on SCSS.&lt;/p&gt;

&lt;p&gt;The nesting feature allows you to write CSS code in a structure &lt;strong&gt;similar to HTML&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="nc"&gt;.nav&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#f0f0f0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nt"&gt;ul&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;list-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nt"&gt;li&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#007bff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can use the &lt;code&gt;&amp;amp;&lt;/code&gt; symbol to reference the &lt;strong&gt;parent selector&lt;/strong&gt;. This is useful when creating pseudo-classes or modifier classes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#007bff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#0056b3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;--large&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nt"&gt;--small&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Related properties and media queries can also be nested, &lt;strong&gt;improving the structure&lt;/strong&gt; of the code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="nc"&gt;.element&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Arial&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;768px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://sass-lang.com/documentation/at-rules/mixin/" rel="noopener noreferrer"&gt;Mixins&lt;/a&gt; are &lt;strong&gt;reusable style blocks&lt;/strong&gt; that allow you to create styles in advance or vary them with parameters.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="k"&gt;@mixin&lt;/span&gt; &lt;span class="nf"&gt;center-text&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;vertical-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;middle&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@mixin&lt;/span&gt; &lt;span class="nf"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$radius&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$radius&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;center-text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;5px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Use default value&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can also apply styles using &lt;strong&gt;control logic&lt;/strong&gt; or apply additional styles using the &lt;code&gt;@content&lt;/code&gt; directive.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="k"&gt;@mixin&lt;/span&gt; &lt;span class="nf"&gt;media-query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$breakpoint&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;@if&lt;/span&gt; &lt;span class="nv"&gt;$breakpoint&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;tablet&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;768px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nf"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max-width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1023px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;@else&lt;/span&gt; &lt;span class="n"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;$breakpoint&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;desktop&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1024px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;@content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;@else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;@warn&lt;/span&gt; &lt;span class="s2"&gt;"Unknown breakpoint: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="nv"&gt;$breakpoint&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.responsive-element&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;media-query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tablet&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="k"&gt;@include&lt;/span&gt; &lt;span class="nd"&gt;media-query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;desktop&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.3 Semantic CSS and Atomic CSS
&lt;/h3&gt;

&lt;p&gt;The biggest difference between Semantic CSS and Atomic CSS is likely whether they prioritize visual appearance or meaning.&lt;br&gt;
When prioritizing &lt;strong&gt;visual&lt;/strong&gt; appearance, you might use something like &lt;code&gt;.text-red { color: red; }&lt;/code&gt;, while prioritizing &lt;strong&gt;meaning&lt;/strong&gt; would lead to something like &lt;code&gt;.error { color: red; }&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Due to these characteristics, the methods for achieving goals also differ.&lt;br&gt;
For example, what if you needed to create various designs with the same content, like in &lt;a href="https://csszengarden.com/pages/alldesigns/" rel="noopener noreferrer"&gt;CSS Zen Garden&lt;/a&gt;?&lt;br&gt;
The visual approach would &lt;strong&gt;keep the CSS&lt;/strong&gt; fixed but achieve the goal by &lt;strong&gt;modifying the HTML&lt;/strong&gt;.&lt;br&gt;
The semantic approach would &lt;strong&gt;keep the HTML&lt;/strong&gt; fixed but achieve the goal by &lt;strong&gt;modifying the CSS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcw8vqebnzqnz15y4m6lb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcw8vqebnzqnz15y4m6lb.png" alt="CSS zen garden" width="800" height="820"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maximizing the visual approach &lt;a href="https://johnpolacek.medium.com/by-the-numbers-a-year-and-half-with-atomic-css-39d75b1263b4" rel="noopener noreferrer"&gt;minimizes CSS file size&lt;/a&gt; and &lt;strong&gt;reduces coupling&lt;/strong&gt; by reusing small, &lt;strong&gt;&lt;em&gt;single-purpose classes&lt;/em&gt;&lt;/strong&gt;.&lt;br&gt;
This is precisely Atomic CSS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2n0pwgp93rkgz08575mn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2n0pwgp93rkgz08575mn.png" alt="CSS file size" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Atomic CSS is a functional CSS approach that composes styles by combining small, single-purpose classes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.m-0&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.p-1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.text-center&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"m-0 p-1 text-center"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Hello, World!
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Maximizing the semantic approach improves code readability and &lt;strong&gt;increases CSS cohesion&lt;/strong&gt;. It also facilitates better separation of content(HTML) and formatting(CSS).&lt;br&gt;
The class serves as an &lt;a href="https://html.spec.whatwg.org/multipage/dom.html#classes" rel="noopener noreferrer"&gt;identifier for grouped elements&lt;/a&gt; and is also a &lt;a href="https://www.w3.org/QA/Tips/goodclassnames" rel="noopener noreferrer"&gt;&lt;strong&gt;W3C recommendation&lt;/strong&gt;&lt;/a&gt; because it emphasizes the separation between HTML and CSS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://getbem.com/" rel="noopener noreferrer"&gt;BEM&lt;/a&gt; is one of the most popular semantic CSS methodologies. (&lt;a href="https://medium.com/@YAKStack/bem-methodology-a-simple-and-effective-way-to-write-css-023607fb43b7" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexzb62krvdhzqhncy3ju.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexzb62krvdhzqhncy3ju.png" alt="BEM" width="663" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BEM(Block Element Modifier)&lt;/strong&gt; structures class names of HTML elements by naming them as Block, Element, and Modifier.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Block:&lt;/strong&gt; Independent component&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Element:&lt;/strong&gt; Part of a Block&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modifier:&lt;/strong&gt; Variation of Block or Element
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Structure */&lt;/span&gt;
&lt;span class="nc"&gt;.block&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="nc"&gt;.block__element&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="nc"&gt;.block--modifier&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;

&lt;span class="c"&gt;/* Example */&lt;/span&gt;
&lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="nc"&gt;.button__icon&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;span class="nc"&gt;.button--large&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"button button--large"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"button__icon"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;📁&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  Open File
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;BEM makes it possible to &lt;strong&gt;understand the HTML structure&lt;/strong&gt; through class names alone.&lt;/p&gt;
&lt;h3&gt;
  
  
  6.4 CSS Methodologies
&lt;/h3&gt;

&lt;p&gt;CSS methodologies are not limited to just Atomic CSS and BEM.&lt;br&gt;
There are many diverse &lt;a href="https://github.com/awesome-css-group/awesome-css?tab=readme-ov-file#naming-conventions--methodologies-bulb" rel="noopener noreferrer"&gt;CSS methodologies&lt;/a&gt;, and I will compare them to find common elements among these methodologies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd1ukhj2knggcy8kdc78c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd1ukhj2knggcy8kdc78c.png" alt="CSS Methodologies" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are some famous CSS methodologies:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;OOCSS(Object Oriented CSS):&lt;/strong&gt; A methodology that separates CSS into reusable 'objects', managing structure and skin independently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SMACSS(Scalable and Modular Architecture for CSS):&lt;/strong&gt; A methodology that categorizes CSS into five categories: Base, Layout, Module, State, and Theme.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ITCSS(Inverted Triangle CSS):&lt;/strong&gt; An architecture that organizes CSS hierarchically based on specificity, explicitness, and reach.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SUITCSS:&lt;/strong&gt; A component-based CSS methodology with structured class names and clear relationships.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CUBE CSS:&lt;/strong&gt; A methodology that provides flexible and scalable styling by utilizing the inherent characteristics of CSS using the concepts of Composition, Utility, Block, and Exception.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  6.4.1 OOCSS (Object Oriented CSS)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="http://oocss.org/" rel="noopener noreferrer"&gt;OOCSS&lt;/a&gt; is a methodology for writing CSS in an object-oriented way. Its main principles are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Visual focus:&lt;/strong&gt; Separation of structure and skin

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structure:&lt;/strong&gt; Defines &lt;strong&gt;layout-related&lt;/strong&gt; properties such as size, position, and margins of elements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skin:&lt;/strong&gt; Defines &lt;strong&gt;visual&lt;/strong&gt; styles such as colors, fonts, and shadows.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Information focus:&lt;/strong&gt; Separation of container and content

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Container:&lt;/strong&gt; The parent element that &lt;strong&gt;wraps other elements&lt;/strong&gt;, mainly responsible for layout.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content:&lt;/strong&gt; The element containing the &lt;strong&gt;actual content&lt;/strong&gt;, which should maintain consistent styling regardless of its location.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Structure */&lt;/span&gt;
&lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;inline-block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Skin */&lt;/span&gt;
&lt;span class="nc"&gt;.button-primary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Container */&lt;/span&gt;
&lt;span class="nc"&gt;.sidebar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;300px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;float&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Contents */&lt;/span&gt;
&lt;span class="nc"&gt;.widget&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;margin-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f0f0f0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;OOCSS can increase reusability and reduce CSS file size.&lt;/p&gt;

&lt;h4&gt;
  
  
  6.4.2 SMACSS (Scalable and Modular Architecture for CSS)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://smacss.com" rel="noopener noreferrer"&gt;SMACSS&lt;/a&gt; is a methodology that divides CSS into five categories:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Base:&lt;/strong&gt; This category defines basic styles, including &lt;strong&gt;default styles&lt;/strong&gt; for element selectors and CSS resets.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layout:&lt;/strong&gt; This category defines the main &lt;strong&gt;structure and grid system&lt;/strong&gt; of the page, responsible for &lt;strong&gt;layouts&lt;/strong&gt; such as headers, footers, and sidebars.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Module:&lt;/strong&gt; This category defines &lt;strong&gt;reusable independent components&lt;/strong&gt;, including UI elements such as buttons, cards, and navigation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State:&lt;/strong&gt; This category represents &lt;strong&gt;specific states of modules or layouts&lt;/strong&gt;, defining state changes such as active, inactive, and hidden.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Theme:&lt;/strong&gt; This category defines the &lt;strong&gt;overall look and feel&lt;/strong&gt;, including styles related to themes such as color schemes and typography.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Base */&lt;/span&gt;
&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h2&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Layout */&lt;/span&gt;
&lt;span class="nc"&gt;.l-header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.l-sidebar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Module */&lt;/span&gt;
&lt;span class="nc"&gt;.btn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.btn-primary&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* State */&lt;/span&gt;
&lt;span class="nc"&gt;.is-hidden&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;none&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Theme */&lt;/span&gt;
&lt;span class="nc"&gt;.theme-dark&lt;/span&gt; &lt;span class="nc"&gt;.btn&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SMACSS allows for systematic management of CSS structure.&lt;/p&gt;

&lt;h4&gt;
  
  
  6.4.3 ITCSS (Inverted Triangle CSS)
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.creativebloq.com/web-design/manage-large-css-projects-itcss-101517528" rel="noopener noreferrer"&gt;ITCSS&lt;/a&gt; is a methodology that organizes CSS hierarchically according to &lt;strong&gt;specificity, explicitness, and reach&lt;/strong&gt;. (&lt;a href="https://desarrolloweb.com/articulos/itcss-que-es-bases.html" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhlxvq9tg3z1e9jg897oi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhlxvq9tg3z1e9jg897oi.png" alt="ITCSS" width="700" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The main layers are as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Settings:&lt;/strong&gt; This layer includes &lt;strong&gt;basic project settings&lt;/strong&gt; such as global variables, color definitions, and font settings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools:&lt;/strong&gt; This layer defines &lt;strong&gt;globally used tools&lt;/strong&gt; such as mixins and functions, with no actual CSS output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generic:&lt;/strong&gt; This layer defines the most basic and high-level styles, such as &lt;strong&gt;resets and normalization&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elements:&lt;/strong&gt; This layer defines the basic &lt;strong&gt;styles of HTML elements&lt;/strong&gt;, using only element selectors without classes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Objects:&lt;/strong&gt; This layer defines &lt;strong&gt;structural and skeletal styles&lt;/strong&gt; in the OOCSS approach, including reusable design patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Components:&lt;/strong&gt; This layer defines styles for specific and complete &lt;strong&gt;UI components&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utilities:&lt;/strong&gt; This layer includes &lt;strong&gt;utility classes&lt;/strong&gt; that forcefully apply specific styles, being the most specific and highest priority.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This methodology minimizes specificity conflicts in CSS and improves maintainability.&lt;/p&gt;

&lt;h4&gt;
  
  
  6.4.4 SUITCSS
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://suitcss.github.io/" rel="noopener noreferrer"&gt;SUITCSS&lt;/a&gt; is a &lt;strong&gt;component-based&lt;/strong&gt; CSS methodology with structured class names and clear relationships:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Component:&lt;/strong&gt; The base component class like &lt;code&gt;ComponentName&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modifier:&lt;/strong&gt; Changes the style of the component like &lt;code&gt;.ComponentName--modifierName&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Descendent:&lt;/strong&gt; Part of the component like &lt;code&gt;.ComponentName-descendentName&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utility:&lt;/strong&gt; Single-purpose styling like &lt;code&gt;.u-utilityName&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Component */&lt;/span&gt;
&lt;span class="nc"&gt;.Button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.Button-icon&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Modifier */&lt;/span&gt;
&lt;span class="nc"&gt;.Button--large&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="err"&gt;...&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Utility */&lt;/span&gt;
&lt;span class="nc"&gt;.u-textCenter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"Button Button--large"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"Button-icon"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  Submit
&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"u-textCenter"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  Centered text
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  6.4.5 CUBE CSS
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://cube.fyi/" rel="noopener noreferrer"&gt;CUBE CSS&lt;/a&gt; stands for Composition, Utility, Block, Exception and encompasses the following key concepts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Composition:&lt;/strong&gt; Defines layout patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utility:&lt;/strong&gt; Defines small units of styles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Block:&lt;/strong&gt; Defines reusable components&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exception:&lt;/strong&gt; Handles exceptions in specific situations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It maximize the use of &lt;strong&gt;CSS Cascade&lt;/strong&gt; and others.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Composition */&lt;/span&gt;
&lt;span class="nc"&gt;.cluster&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;flex-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;wrap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Utility */&lt;/span&gt;
&lt;span class="nc"&gt;.center&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Block */&lt;/span&gt;
&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;white&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0.25rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Exception */&lt;/span&gt;
&lt;span class="nc"&gt;.card&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"active"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"cluster"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card center"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Card Title&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Card content&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"card center"&lt;/span&gt; &lt;span class="na"&gt;data-state=&lt;/span&gt;&lt;span class="s"&gt;"active"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h2&amp;gt;&lt;/span&gt;Active Card&lt;span class="nt"&gt;&amp;lt;/h2&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;p&amp;gt;&lt;/span&gt;This card is active&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  6.5 Atomic Design
&lt;/h3&gt;

&lt;p&gt;And there is a similarly named methodology called &lt;strong&gt;&lt;a href="https://atomicdesign.bradfrost.com/chapter-2/" rel="noopener noreferrer"&gt;Atomic Design&lt;/a&gt;&lt;/strong&gt;, which is related to the Atomic CSS concept mentioned earlier.&lt;/p&gt;

&lt;p&gt;It's closer to a designer-centric methodology rather than a developer-centric one.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpj1zggzdrpdv4rw15hb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flpj1zggzdrpdv4rw15hb.png" alt="Atomic Design" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ions:&lt;/strong&gt; Design tokens that define &lt;strong&gt;basic design values&lt;/strong&gt; such as colors, typography, and spacing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atoms:&lt;/strong&gt; &lt;strong&gt;Basic UI elements&lt;/strong&gt; that cannot be broken down further, such as buttons, input fields, and labels.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Molecules:&lt;/strong&gt; Simple and &lt;strong&gt;reusable components&lt;/strong&gt; created by combining multiple atoms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Organisms:&lt;/strong&gt; Relatively &lt;strong&gt;complex UI sections&lt;/strong&gt; made by combining molecules and atoms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Templates:&lt;/strong&gt; Structures that form the &lt;strong&gt;layout of a page&lt;/strong&gt; by arranging various organisms, molecules, and atoms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pages:&lt;/strong&gt; Completed UIs filled with actual content, which are the &lt;strong&gt;final screens&lt;/strong&gt; that users see.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you want to see the differences between these at a glance, I recommend checking out the following &lt;a href="https://x.com/brad_frost/status/1449026849246482434" rel="noopener noreferrer"&gt;tweet&lt;/a&gt; or &lt;a href="https://blog.kamathrohan.com/atomic-design-methodology-for-building-design-systems-f912cf714f53" rel="noopener noreferrer"&gt;article&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsqqe7ldjmp9tf4x00z9y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsqqe7ldjmp9tf4x00z9y.png" alt="Atomic design with real sample" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Another characteristic is the distinction between &lt;a href="https://bradfrost.com/blog/post/extending-atomic-design/" rel="noopener noreferrer"&gt;systems and products&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4wlr42k682eu505rxtec.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4wlr42k682eu505rxtec.png" alt="System and product" width="700" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;System:&lt;/strong&gt; A collection of reusable and general components&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product:&lt;/strong&gt; A set of elements specific to a particular product or project&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. How should styles be managed?
&lt;/h2&gt;

&lt;p&gt;This chapter aims to present a &lt;strong&gt;new paradigm for style&lt;/strong&gt; management suitable for modern web development environments, based on previously discussed concepts. (&lt;a href="https://proofed.com/writing-tips/research-paradigms-explanation-and-examples/" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vxqa96794m5imezq8re.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5vxqa96794m5imezq8re.png" alt="Research Paradigms" width="716" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The content is divided into three main areas:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Structuring &lt;strong&gt;CSS methodologies&lt;/strong&gt; and presenting mental models&lt;/li&gt;
&lt;li&gt;Proposing best practices and mental models for &lt;strong&gt;CSS expression&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;integrated approach&lt;/strong&gt; to style management considering both areas&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;First, we introduce the &lt;strong&gt;&lt;code&gt;SCALE CSS&lt;/code&gt; methodology&lt;/strong&gt;, which is intuitive and scalable, developed through the sublation of existing CSS methodologies such as ITCSS, BEM, and OOCSS. This process integrates core concepts from each methodology and explores effective ways to handle various cases.&lt;/p&gt;

&lt;p&gt;As discussed in Chapter 6, &lt;strong&gt;CSS methodologies are policies&lt;/strong&gt;, while &lt;strong&gt;CSS in JS and CSS pre/post processors are mechanisms&lt;/strong&gt;. If policies are closer to the form that contains the content, mechanisms are tools for substantiating expression.&lt;/p&gt;

&lt;p&gt;To focus more on methods for CSS management rather than tools, and to find points of contact with policies, we consider the formal aspects of expression rather than its substance.&lt;br&gt;
We share good practices in this regard:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Design Tokens:&lt;/strong&gt; Encoding design decisions to limit selectable values and invert dependencies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic CSS:&lt;/strong&gt; Mapping style properties and design tokens under single responsibility, reducing coupling through interface segregation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variants:&lt;/strong&gt; Defining component styles under the open-closed principle as 'variants' to enable Liskov substitution and increase cohesion.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Combining these concepts&lt;/strong&gt;, we propose &lt;strong&gt;&lt;code&gt;StyleStack&lt;/code&gt; as a style management&lt;/strong&gt; strategy. This strategy combines the consistency of design tokens, the efficiency of Atomic CSS, and the flexibility of variants to implement complex UIs faster and more consistently.&lt;/p&gt;

&lt;p&gt;Finally, we bring together the &lt;code&gt;SCALE CSS&lt;/code&gt; methodology and &lt;code&gt;StyleStack&lt;/code&gt; in formal terms, helping the methodology move towards the substantiation of form and deriving a &lt;strong&gt;concrete directory structure&lt;/strong&gt;.&lt;br&gt;
Upon completing these steps, we will be &lt;strong&gt;prepared to discuss the implementation of CSS in JS&lt;/strong&gt;, a tool for substantiating expression.&lt;/p&gt;
&lt;h3&gt;
  
  
  7.1 Rethinking Methodologies
&lt;/h3&gt;

&lt;p&gt;When looking at the methodologies, there seems to be a &lt;strong&gt;sense of similarity&lt;/strong&gt;. (&lt;a href="https://2020.stateofcss.com/en-US/technologies/methodologies/" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn6cc53yc3dyoyhbg3ktw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn6cc53yc3dyoyhbg3ktw.png" alt="Ranking of Methodologies" width="800" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's organize them based on ITCSS, the most detailed methodology, with the addition of States.&lt;br&gt;
In Tools, I've included Atomic CSS, considering each as a &lt;strong&gt;'function'&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Settings:&lt;/strong&gt; SMACSS's Theme, Atomic Design's Design token&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools:&lt;/strong&gt; Atomic CSS, CUBE CSS's Utility&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generic:&lt;/strong&gt; SMACSS's Base&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elements:&lt;/strong&gt; Atomic Design's Atoms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Objects:&lt;/strong&gt; OOCSS's Container, SMACSS's Layout, CUBE CSS's Composition, Atomic Design's Templates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Components:&lt;/strong&gt; BEM's Block/Element, OOCSS's Content, SMACSS's Module, SUITCSS's Component, CUBE CSS's Block, Atomic Design's Molecules/Organisms&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;States:&lt;/strong&gt; OOCSS's Structure/Skin, BEM's Modfier, SMACSS's State, SUITCSS's Modfier&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utilities:&lt;/strong&gt; SUITCSS's Utility, CUBE CSS's Exception&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This classification seems to cover almost all cases.&lt;br&gt;
However, it's noticeable that in &lt;strong&gt;Component's Element&lt;/strong&gt; (BEM's Element, Atomic Design's Molecules) and &lt;strong&gt;State&lt;/strong&gt;, OOCSS's &lt;strong&gt;Structure/Skin&lt;/strong&gt; distinction combines two concepts, and Atomic Design's &lt;strong&gt;Templates&lt;/strong&gt;, which define &lt;strong&gt;page-level layouts&lt;/strong&gt;, are together with Objects.&lt;/p&gt;

&lt;p&gt;We've encountered the concept of &lt;strong&gt;Component's Element&lt;/strong&gt; before, and it's certainly a &lt;a href="https://ark-ui.com/react/docs/components/carousel#anatomy" rel="noopener noreferrer"&gt;familiar concept&lt;/a&gt;.&lt;br&gt;
Depending on the &lt;strong&gt;complexity of the component&lt;/strong&gt;, we can define it in the same file as the Block, or create a folder and define each Element and Block separately.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0q45zr9b45qwn71brjm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0q45zr9b45qwn71brjm.png" alt="Carousel Anatomy" width="720" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, let's consider Structure/Skin.&lt;br&gt;
It's &lt;strong&gt;ambiguous&lt;/strong&gt; to add states that affect layout and decorative states as &lt;strong&gt;separate classifications&lt;/strong&gt;.&lt;br&gt;
Instead, it would be better to separate them when creating &lt;strong&gt;&lt;a href="https://help.figma.com/hc/en-us/articles/360056440594-Create-and-use-variants" rel="noopener noreferrer"&gt;each Variant&lt;/a&gt;&lt;/strong&gt;, like &lt;code&gt;size: "small" | "medium" | "large"&lt;/code&gt; and &lt;code&gt;shape: "primary" | "filled" | "outlined"&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftdzccle3y8slh9wqxn1m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftdzccle3y8slh9wqxn1m.png" alt="Button variants" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Atomic Design's Templates are about separating &lt;strong&gt;page-level layouts&lt;/strong&gt;, not component-level layouts.&lt;br&gt;
It's the same &lt;strong&gt;concept as Next.js&lt;/strong&gt; transitioning from &lt;strong&gt;&lt;a href="https://nextjs.org/docs/pages/building-your-application/routing/pages-and-layouts" rel="noopener noreferrer"&gt;page router&lt;/a&gt;&lt;/strong&gt; to app router, where it's divided into &lt;strong&gt;&lt;a href="https://nextjs.org/docs/app/building-your-application/routing/pages" rel="noopener noreferrer"&gt;pages&lt;/a&gt; and &lt;a href="https://nextjs.org/docs/app/building-your-application/routing/layouts-and-templates" rel="noopener noreferrer"&gt;templates&lt;/a&gt;&lt;/strong&gt;.&lt;br&gt;
Depending on the project, they could be managed in the &lt;strong&gt;same directory&lt;/strong&gt; as pages, or collected in something like &lt;strong&gt;&lt;code&gt;src/layouts/page-template&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc0e09bxokqrtxbil4ugx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc0e09bxokqrtxbil4ugx.png" alt="Next app router layout" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we've sorted out the exceptions, let's further &lt;strong&gt;organize the structure&lt;/strong&gt; and &lt;strong&gt;names&lt;/strong&gt; of &lt;a href="https://desarrolloweb.com/articulos/itcss-que-es-bases.html" rel="noopener noreferrer"&gt;ITCSS&lt;/a&gt;.&lt;br&gt;
Let's group items that do similar things and change them to more intuitive names.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;Settings&lt;/code&gt; define static values, and &lt;code&gt;Tools&lt;/code&gt; define dynamic functions, both meant to be imported and used, not directly affecting the app. Recently, &lt;strong&gt;&lt;code&gt;Configs&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;Utils&lt;/code&gt;&lt;/strong&gt; seem to be used more often.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Generic&lt;/code&gt;'s reset, normalization, and &lt;code&gt;Elements&lt;/code&gt;' default styles are &lt;strong&gt;&lt;code&gt;Bases&lt;/code&gt;&lt;/strong&gt; styles that apply globally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;Layouts&lt;/code&gt;&lt;/strong&gt; is more intuitive than &lt;code&gt;Objects&lt;/code&gt;, and &lt;strong&gt;&lt;code&gt;Exception&lt;/code&gt;&lt;/strong&gt; is better than &lt;code&gt;Utilities&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;States&lt;/code&gt; are included in each &lt;code&gt;Layout&lt;/code&gt; or &lt;code&gt;Component&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's apply this to ITCSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;       /\
      /  \
     /    \  Exceptions (Styles for special cases)
    /      \
   /        \  Components (Reusable components)
  /          \
 /            \ Layouts (Layout-related styles)
/              \
----------------
|    Bases     | (Globally applied styles)
----------------
|    Utils     | (Globally used utilities)
----------------
|   Configs    | (Basic settings)
----------------
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configs:&lt;/strong&gt; Include project &lt;strong&gt;basic settings&lt;/strong&gt; such as global variables, design tokens(color definitions, font settings), etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utils:&lt;/strong&gt; Define &lt;strong&gt;globally used tools&lt;/strong&gt; such as mixins/functions, atomic css etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bases:&lt;/strong&gt; Styles to be &lt;strong&gt;applied globally&lt;/strong&gt;, such as reset/normalization, and basic styles for HTML elements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layouts:&lt;/strong&gt; &lt;strong&gt;Layout-related&lt;/strong&gt; styles, can have elements and states(structure/skin), page templates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Components:&lt;/strong&gt; &lt;strong&gt;Reusable components&lt;/strong&gt;, can have elements and states(structure/skin)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exceptions:&lt;/strong&gt; Styles used &lt;strong&gt;exceptionally&lt;/strong&gt;. e.g. Using values not present in design tokens, Increasing CSS specificity, Use &lt;code&gt;!important&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In this article, we will refer to it as the &lt;strong&gt;&lt;code&gt;SCALE(Scalable, Composable, Adaptive Layered Expression) CSS&lt;/code&gt;&lt;/strong&gt; methodology.&lt;/p&gt;

&lt;h3&gt;
  
  
  7.2 Design Tokens
&lt;/h3&gt;

&lt;p&gt;The above discussion considered the aspect of management but did not take into account &lt;strong&gt;the design system&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A representative element of design systems is &lt;strong&gt;design tokens&lt;/strong&gt;.&lt;br&gt;
Design tokens store &lt;strong&gt;repetitive design decisions&lt;/strong&gt; as a single source of truth.&lt;/p&gt;

&lt;p&gt;Simply put, it's like saving a &lt;strong&gt;&lt;a href="https://dev.epicgames.com/community/learning/tutorials/vrZk/unreal-engine-copy-and-paste-your-color-theme-for-the-color-picker-from-one-project-to-another" rel="noopener noreferrer"&gt;color palette&lt;/a&gt; from a vast color space&lt;/strong&gt; and using it &lt;strong&gt;consistently across the project&lt;/strong&gt;.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxofycop8h3rh09y8hqu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxofycop8h3rh09y8hqu.png" alt="Color space and color palette" width="647" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, design tokens are &lt;strong&gt;not just simple 'settings'&lt;/strong&gt;. They need to be set at both the app and component levels, and they function similarly to &lt;strong&gt;reactivity&lt;/strong&gt;. [&lt;a href="https://paste.twilio.design/tokens" rel="noopener noreferrer"&gt;paste - design tokens&lt;/a&gt;, &lt;a href="https://help.figma.com/hc/en-us/articles/18490793776023-Update-1-Tokens-variables-and-styles" rel="noopener noreferrer"&gt;Tokens, variables, and styles&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbilg5rnay6pu6b52i4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsbilg5rnay6pu6b52i4u.png" alt="Paste design tokens" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4bhnzpn8qv6l5m8unwp7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4bhnzpn8qv6l5m8unwp7.png" alt="Design token reactivity" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Design tokens, like styles, are defined from simple to specific.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Primitive tokens:&lt;/strong&gt; Define the most &lt;strong&gt;basic design values&lt;/strong&gt; such as colors, fonts, sizes, spacing, etc.

&lt;ul&gt;
&lt;li&gt;These have the lowest level of abstraction and &lt;strong&gt;contain specific values&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Example: &lt;code&gt;color-blue-500: #0000FF&lt;/code&gt;, &lt;code&gt;font-size-16: 16px&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic tokens:&lt;/strong&gt; Semantic tokens are tokens that give &lt;strong&gt;meaning based&lt;/strong&gt; on primitive tokens.

&lt;ul&gt;
&lt;li&gt;They use abstracted names that represent the &lt;strong&gt;purpose or intention&lt;/strong&gt; of the design.&lt;/li&gt;
&lt;li&gt;They are defined by &lt;strong&gt;referencing primitive&lt;/strong&gt; tokens.&lt;/li&gt;
&lt;li&gt;Example: &lt;code&gt;color-primary: $color-blue-500&lt;/code&gt;, &lt;code&gt;font-size-body: $font-size-16&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Component tokens:&lt;/strong&gt; Component tokens define design values thar are applied to &lt;strong&gt;specific UI components&lt;/strong&gt;.

&lt;ul&gt;
&lt;li&gt;These are tokens that are directly applied to actual UI components.&lt;/li&gt;
&lt;li&gt;They are mainly defined by &lt;strong&gt;referencing semantic tokens&lt;/strong&gt;. (Sometimes primitive tokens can also be directly referenced)&lt;/li&gt;
&lt;li&gt;Example: &lt;code&gt;button-primary-color: $color-primary&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://smart-interface-design-patterns.com/articles/naming-design-tokens/" rel="noopener noreferrer"&gt;Naming is important&lt;/a&gt; for semantic tokens.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwetm29y96zv7ut397o1x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwetm29y96zv7ut397o1x.png" alt="Semantic token" width="800" height="225"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  7.3 Atomic CSS
&lt;/h3&gt;

&lt;p&gt;Atomic CSS, as we have seen earlier, is one of the major paradigms and is both a useful tool and a &lt;strong&gt;&lt;a href="https://dev.to/danwalsh/tailwindcss-is-great-why-so-much-hate-ink"&gt;controversial topic&lt;/a&gt;&lt;/strong&gt;.&lt;br&gt;
However, when we examine Atomic CSS, it can mean various things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Atomic CSS as usage:&lt;/strong&gt; Can various types of visual styles be written easily in className?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic CSS as scope:&lt;/strong&gt; Should it be applied globally or only to parts?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic CSS as a framework:&lt;/strong&gt; Does it have a well-defined design system?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic CSS as output:&lt;/strong&gt; Is it converted to single-property classes after build?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here, we will analyze each case and derive its advantages and disadvantages, focusing primarily on &lt;a href="https://tailwindcss.com/" rel="noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt;, a representative Atomic CSS Framework, while also examining why we need &lt;strong&gt;on-demand global atomic CSS&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fen2rfxcl393469oyvgkl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fen2rfxcl393469oyvgkl.png" alt="Tailwind CSS" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  7.3.1 Atomic CSS as Usage
&lt;/h3&gt;

&lt;p&gt;It can be used &lt;strong&gt;like inline CSS&lt;/strong&gt;.&lt;br&gt;
You don't need to name it, and it's located even closer than co-location, making it very convenient when the scale is small or when creating prototypes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This greatly &lt;strong&gt;reduces&lt;/strong&gt; the time spent &lt;strong&gt;writing&lt;/strong&gt; separate &lt;strong&gt;CSS&lt;/strong&gt; files and class names.&lt;/li&gt;
&lt;li&gt;Styles can be applied &lt;strong&gt;intuitively&lt;/strong&gt;.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight vue"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- PrimaryButton.vue --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;slot/&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="k"&gt;template&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;However, it's &lt;a href="https://frontstuff.io/no-utility-classes-arent-the-same-as-inline-styles" rel="noopener noreferrer"&gt;different from inline styles&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Limitations:&lt;/strong&gt; No limitations such as media queries, selectors, pseudo-elements, animations, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File size:&lt;/strong&gt; File size is reduced as it's defined only once for use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Naming:&lt;/strong&gt; Each name is short and concise, making it good for typing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Value type:&lt;/strong&gt; It's a string value.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Except for number 4, all are good characteristics.&lt;br&gt;
Number 4 is a definite drawback as it's &lt;strong&gt;difficult to utilize type systems and highlighting&lt;/strong&gt;.&lt;br&gt;
What if we express it in CSS in JS like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue-500&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;_hover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue-700&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bold&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;py&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;px&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rounded&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Number 3 can also be controversial, but the bigger issue is how to define &lt;strong&gt;&lt;a href="https://martinfowler.com/bliki/UbiquitousLanguage.html" rel="noopener noreferrer"&gt;the ubiquitous language&lt;/a&gt; in the design system&lt;/strong&gt;.&lt;br&gt;
If necessary, you can use the CSS property names as they are.&lt;/p&gt;

&lt;p&gt;Finally, the usesage of Atomic CSS &lt;strong&gt;itself can be controversial(&lt;a href="https://medium.com/simple-human/the-problem-with-atomic-css-d0c09c7aa38e" rel="noopener noreferrer"&gt;1&lt;/a&gt;, &lt;a href="https://www.freecodecamp.org/news/in-defense-of-utility-first-css-4f406acee6fb/#-bem-is-enough-" rel="noopener noreferrer"&gt;2&lt;/a&gt;)&lt;/strong&gt;.&lt;br&gt;
While it certainly has the drawback of lack of meaning, web development has changed.&lt;br&gt;
With most solutions now having the &lt;strong&gt;front-end directly modify HTML and CSS&lt;/strong&gt;. The era when &lt;strong&gt;dynamic pages&lt;/strong&gt; became necessary in the early days of web development, leading to the emergence of &lt;strong&gt;backend technologies&lt;/strong&gt; like PHP/JSP/Django &lt;strong&gt;to generate HTML&lt;/strong&gt;, and when &lt;strong&gt;semantic CSS was absolutely necessary&lt;/strong&gt; for styling interfaces with the frontend has now &lt;strong&gt;passed&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  7.3.2 Atomic CSS as Scope
&lt;/h3&gt;

&lt;p&gt;Atomic CSS &lt;strong&gt;should be used globally&lt;/strong&gt;. (&lt;a href="https://www.alibabacloud.com/blog/new-css-features-you-may-not-know-in-2021-part-2_598317" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj30g4rd94qtmlxqu9jfp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj30g4rd94qtmlxqu9jfp.png" alt="CSS scope" width="387" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Why has &lt;strong&gt;TailWind CSS succeeded&lt;/strong&gt;, unlike traditional Atomic CSS?&lt;br&gt;
The most significant feature of Tailwind CSS is its &lt;strong&gt;&lt;a href="https://tailwindcss.com/docs/utility-first" rel="noopener noreferrer"&gt;utility-first&lt;/a&gt;&lt;/strong&gt; approach.&lt;/p&gt;

&lt;p&gt;Previously, it was either &lt;strong&gt;used partially&lt;/strong&gt; like &lt;a href="https://getbootstrap.com/docs/5.3/helpers/color-background/" rel="noopener noreferrer"&gt;Bootstrap's Helpers&lt;/a&gt; or had to be built from scratch.&lt;br&gt;
Partial use is &lt;strong&gt;literally closer to utilities or helpers&lt;/strong&gt;, making it difficult to fully utilize the advantages of Atomic CSS, such as minimal file size increase.&lt;br&gt;
Conversely, building a comprehensive system &lt;strong&gt;from scratch&lt;/strong&gt; is prone to exceptions and &lt;strong&gt;difficult to maintain consistently&lt;/strong&gt;, unlike semantic methodologies that can directly utilize product domain meanings or component structures.&lt;/p&gt;

&lt;p&gt;However, Tailwind &lt;strong&gt;provides a design system&lt;/strong&gt; that allows global use of Atomic CSS.&lt;br&gt;
It &lt;strong&gt;maps CSS properties to design tokens&lt;/strong&gt; and designates all available styles as a &lt;strong&gt;single source of truth&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To utilize Atomic CSS well, we should prevent one-time style additions and apply it globally!!&lt;/p&gt;
&lt;h3&gt;
  
  
  7.3.3 Atomic CSS as a Framework
&lt;/h3&gt;

&lt;p&gt;To apply it globally, it's &lt;strong&gt;essential to have a framework&lt;/strong&gt; that allows using predefined classes.&lt;br&gt;
This article doesn't aim to create a CSS framework itself, so we'll skip that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ajm5iekl97a2u5oix2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ajm5iekl97a2u5oix2y.png" alt="Theme UI" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, &lt;strong&gt;mapping CSS properties to design tokens&lt;/strong&gt; is an important part as a meta-design system.&lt;br&gt;
We need to provide a way to &lt;a href="https://jxnblk.com/blog/two-steps-forward/" rel="noopener noreferrer"&gt;map according to the theme specifications&lt;/a&gt; of &lt;a href="https://github.com/system-ui/theme-ui" rel="noopener noreferrer"&gt;Theme UI&lt;/a&gt; or &lt;a href="https://github.com/styled-system/styled-system" rel="noopener noreferrer"&gt;Styled System&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  7.3.4 Atomic CSS as Output
&lt;/h3&gt;

&lt;p&gt;As seen in 6.1.3 Style Output and Apply, even if the input is not Atomic CSS, Atomic CSS can be generated in the output.&lt;br&gt;
Here, we argue that we should have global atomic CSS as a single source of truth, so we'll skip this as well.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxxmrbnw2496c87algsqa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxxmrbnw2496c87algsqa.png" alt="On-demand generated" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, &lt;strong&gt;&lt;a href="https://antfu.me/posts/reimagine-atomic-css" rel="noopener noreferrer"&gt;generating all styles&lt;/a&gt;&lt;/strong&gt; to create a single source of truth for mapping CSS properties to design tokens is &lt;strong&gt;inefficient&lt;/strong&gt;.&lt;br&gt;
It will become unbearable due to the &lt;strong&gt;Combinatorial Explosion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Styles should be &lt;strong&gt;generated&lt;/strong&gt; only for the &lt;strong&gt;rules used on-demand&lt;/strong&gt;, according to a set of rules that map CSS properties to design tokens based on &lt;strong&gt;theme specifications&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Yes, we need &lt;strong&gt;on-demand global atomic CSS&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  7.4 Variants
&lt;/h3&gt;

&lt;p&gt;Atomic CSS is convenient as it can be written without the need to name classes.&lt;br&gt;
However, what about when we need to &lt;strong&gt;handle complex states&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Variants&lt;/strong&gt;(Modifier) are visual &lt;strong&gt;representation that compresses&lt;/strong&gt; the Option, State, and Context discussed in the design system.&lt;/p&gt;

&lt;p&gt;It's also known for its API introduced by &lt;a href="https://stitches.dev/" rel="noopener noreferrer"&gt;Stitches&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wtcfeid43z8otyhtp36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wtcfeid43z8otyhtp36.png" alt="Stitches" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Stitches &lt;a href="https://stitches.dev/docs/variants" rel="noopener noreferrer"&gt;Variants API&lt;/a&gt; is &lt;strong&gt;innovative&lt;/strong&gt;.&lt;br&gt;
It allows for &lt;strong&gt;declarative&lt;/strong&gt; description of &lt;strong&gt;each&lt;/strong&gt; state style of the &lt;strong&gt;modifier&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// base styles&lt;/span&gt;

  &lt;span class="na"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;violet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blueviolet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;:hover&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;darkviolet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;gray&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gainsboro&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;:hover&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lightgray&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"violet"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Button&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What's even more impressive is that you can declaratively express everything from the &lt;strong&gt;default value&lt;/strong&gt; of a Variant to when &lt;strong&gt;interactions&lt;/strong&gt; occur &lt;strong&gt;between Variants&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Button&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;button&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

  &lt;span class="na"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;violet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;violetStyles&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;gray&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;grayStyles&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;outlined&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;true&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;outlineVariants&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="na"&gt;defaultVariants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;violet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="na"&gt;compoundVariants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;violet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;outlined&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;css&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blueVariantsviolet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;borderColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;darkviolet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;:hover&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gray&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;outlined&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;css&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;gray&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;borderColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;lightgray&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;:hover&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;black&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"violet"&lt;/span&gt; &lt;span class="na"&gt;outlined&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    Button
  &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now &lt;strong&gt;BEM can be expressed&lt;/strong&gt; through the Variants API.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Block:&lt;/strong&gt; File&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Element:&lt;/strong&gt; Each component&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modifier:&lt;/strong&gt; Variants included in the component&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can immediately &lt;strong&gt;adhere to all constraints&lt;/strong&gt; without relying on rule-based tools such as &lt;a href="https://en.bem.info/toolbox/bem-tools/" rel="noopener noreferrer"&gt;BEM Tools&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In traditional Atomic CSS, a tool called &lt;a href="https://cva.style/docs" rel="noopener noreferrer"&gt;CVA(Class Variance Authority)&lt;/a&gt; makes this possible.&lt;br&gt;
Since we will be using CSS in JS approach, our method will be slightly different.&lt;/p&gt;
&lt;h3&gt;
  
  
  7.5 Layers for Style
&lt;/h3&gt;

&lt;p&gt;For the &lt;strong&gt;expression&lt;/strong&gt; of style(CSS) to actually appear, there must be &lt;strong&gt;elements(HTML) as content&lt;/strong&gt;, and &lt;strong&gt;dynamic application(JavaScript)&lt;/strong&gt; should also be considered.&lt;br&gt;
To prevent &lt;strong&gt;repetitive styles&lt;/strong&gt;, pre/post-processors or JavaScript are also needed. (&lt;a href="https://www.bigscal.com/blogs/frontend/are-html-css-and-javascript-enough-for-front-end-framework/" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0e8iul6xaon5q9fg2zpv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0e8iul6xaon5q9fg2zpv.png" alt="HTML, CSS, JavaScript" width="591" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is &lt;strong&gt;similar to the relationship&lt;/strong&gt; between JSX and State.&lt;/p&gt;

&lt;p&gt;For the &lt;strong&gt;expression of JSX&lt;/strong&gt; to actually render, there must be &lt;strong&gt;state as dynamic content&lt;/strong&gt;. &lt;br&gt;
&lt;strong&gt;CSS is essential&lt;/strong&gt; for visual styling, as JSX and state management alone cannot fully express design aesthetics.&lt;br&gt;
To achieve &lt;strong&gt;consistent and maintainable styling&lt;/strong&gt;, CSS should be strategically integrated with JSX and state management, creating a unified approach to building user interfaces.&lt;/p&gt;

&lt;p&gt;From a &lt;strong&gt;JavaScript perspective&lt;/strong&gt;, the layers would be as follows:&lt;br&gt;
Referencing &lt;a href="https://react-spectrum.adobe.com/architecture.html" rel="noopener noreferrer"&gt;Adobe Spectrum Architecture&lt;/a&gt; and &lt;a href="https://www.adebayosegun.com/blog/the-future-of-chakra-ui" rel="noopener noreferrer"&gt;The future of Chakra UI&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;JSX:&lt;/strong&gt; Binds HTML/Widget and JS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;State hook:&lt;/strong&gt; Logic independent of view platform&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Behavior hook:&lt;/strong&gt; Handles events, accessibility, internationalization, etc. for platform APIs (DOM, React Native, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Headless Component:&lt;/strong&gt; Provides binding of JSX and hooks for use&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Component:&lt;/strong&gt; Component blocks including design&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;From a &lt;strong&gt;style perspective&lt;/strong&gt;, it appears as follows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3oyupo2pin4ag8lkw8i9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3oyupo2pin4ag8lkw8i9.png" alt="Layers for Style - StyleStack" width="358" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Literal:&lt;/strong&gt; CSS pre/post-processors or CSS-in-JS, considering repetitive use of CSS, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Theme:&lt;/strong&gt; Design token values and customization for Color, Typography, Spaces, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic:&lt;/strong&gt; Atomic styles that map to visual values&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variants:&lt;/strong&gt; Styles for reusable blocks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styled Component:&lt;/strong&gt; Binding with JSX components&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This will be referred to as &lt;strong&gt;&lt;code&gt;StyleStack&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  7.6 Combination with Methodologies and Folder Structure
&lt;/h3&gt;

&lt;p&gt;Let's combine the &lt;strong&gt;StyleStack Layer&lt;/strong&gt; with &lt;strong&gt;SCALE CSS methodology&lt;/strong&gt; for management.&lt;br&gt;
The &lt;strong&gt;methodologies&lt;/strong&gt; focus more on &lt;strong&gt;Form than Substance&lt;/strong&gt;, while the &lt;strong&gt;style layers&lt;/strong&gt; focus more on &lt;strong&gt;Expression than Content&lt;/strong&gt;, so there will inevitably be some &lt;strong&gt;discrepancies&lt;/strong&gt; despite seeming similar. (&lt;a href="https://equivalentexchange.blog/2010/11/29/hjelmslevs-net/" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftujvde5owtuns7hmlkeb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftujvde5owtuns7hmlkeb.png" alt="Hjelmslev matrix" width="450" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you need more explanation about the relationship between &lt;strong&gt;Expression-Content and Form-Substance&lt;/strong&gt;, I recommend reading &lt;a href="https://altugi.wordpress.com/2012/10/20/rock-paper-scissors-a-linguistic-approach-to-games/" rel="noopener noreferrer"&gt;Rock-Paper-Scissors: A Linguistic Approach to Games&lt;/a&gt;.&lt;br&gt;
Basically, it follows the perspective of &lt;a href="https://en.wikipedia.org/wiki/Louis_Hjelmslev" rel="noopener noreferrer"&gt;Hjelmslev&lt;/a&gt;'s semiotics.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Literal:&lt;/strong&gt; Closer to elements constituting Substance, so it's &lt;strong&gt;not here&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Theme:&lt;/strong&gt; Corresponds to &lt;strong&gt;&lt;code&gt;Configs&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic:&lt;/strong&gt; Belongs to &lt;strong&gt;&lt;code&gt;Utils&lt;/code&gt;&lt;/strong&gt;, right?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variants:&lt;/strong&gt; Modifiers, so they'll belong to &lt;strong&gt;&lt;code&gt;Layouts&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;Components&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styled Components:&lt;/strong&gt; Also close to binding to Elements, so they'll belong to &lt;strong&gt;&lt;code&gt;Layouts&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;Components&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;Bases&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;Exceptions&lt;/code&gt;&lt;/strong&gt; don't have separate matches.&lt;br&gt;
Bases are &lt;strong&gt;Content&lt;/strong&gt; made from &lt;code&gt;Literal&lt;/code&gt;, and Exceptions are &lt;strong&gt;closer to Content&lt;/strong&gt; that occurs at the component level.&lt;/p&gt;

&lt;p&gt;For StyleStack layers and SCALE CSS methodology to complement each other, they should &lt;strong&gt;each have Content and Substance&lt;/strong&gt;, right?&lt;br&gt;
For &lt;strong&gt;style layers&lt;/strong&gt; to have Content, people need to write the content, so there's &lt;strong&gt;nothing to do right away&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;On the other hand, how about making the &lt;strong&gt;methodology into Substance&lt;/strong&gt;?&lt;br&gt;
It's possible to some extent by &lt;strong&gt;creating a Form&lt;/strong&gt; for the &lt;strong&gt;folder structure&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configs:&lt;/strong&gt; It's better to separate &lt;strong&gt;global variables&lt;/strong&gt; and &lt;strong&gt;design tokens&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Utils:&lt;/strong&gt; It's better to separate &lt;strong&gt;Atomic CSS (core-style)&lt;/strong&gt; and simple &lt;strong&gt;utilities&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bases:&lt;/strong&gt; Usually, &lt;strong&gt;reset/normalization is imported from libraries&lt;/strong&gt;, so it's okay to define it together in &lt;strong&gt;global css&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layouts:&lt;/strong&gt; Use as is. However, for page templates, as mentioned earlier, using &lt;code&gt;app/&lt;/code&gt; or &lt;code&gt;layouts/page-template&lt;/code&gt; is also good.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Components:&lt;/strong&gt; Use as is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exceptions:&lt;/strong&gt; In cases where &lt;strong&gt;&lt;code&gt;!important&lt;/code&gt;&lt;/strong&gt; is used, &lt;strong&gt;gathering and managing&lt;/strong&gt; them together is one approach.
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/
├── styles/
│   ├── constants/: Configs - Global variables
│   ├── theme/: Configs - Design Tokens definitions
│   ├── core-styles/: Utils - Atomic CSS definitions
│   ├── utils/: Utils - Mixins and style-related functions
│   └── expetions/: Exeptions - Collection of exceptions
├── app/
│   ├── layout.tsx: Layouts - Page templates
│   ├── page.tsx
│   ├── global.css: Bases - Normalization and global styles
│   └── [pages]/
├── assets/
├── components/
├── layouts/
└── .../
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Now, let's &lt;strong&gt;focus more on Expression(StyleStack layer)&lt;/strong&gt; and think about it.&lt;/p&gt;
&lt;h2&gt;
  
  
  8. Why CSS in JS?
&lt;/h2&gt;

&lt;p&gt;Now that we've finished defining the &lt;strong&gt;StyleStack layer&lt;/strong&gt;, we need to implement a natural connection from &lt;strong&gt;&lt;code&gt;Literal&lt;/code&gt; to &lt;code&gt;Styled Component&lt;/code&gt;&lt;/strong&gt;. (&lt;a href="https://x.com/cssinjs/status/1253795287010873346" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F954e8tg11ic1gzq1sz1h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F954e8tg11ic1gzq1sz1h.png" alt="CSS in JS" width="350" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;First, should we use &lt;strong&gt;pre/post-processors or Javascript&lt;/strong&gt; to extend Literal CSS?&lt;br&gt;
One of the original advantages of CSS in JS, &lt;strong&gt;isolation&lt;/strong&gt;, has been offset by &lt;strong&gt;CSS Modules and &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/@layer" rel="noopener noreferrer"&gt;&lt;code&gt;@layer&lt;/code&gt;&lt;/a&gt;&lt;/strong&gt;.&lt;br&gt;
Conversely, since the features of &lt;strong&gt;post-processors can be used in CSS in JS&lt;/strong&gt;, we don't consider them.&lt;/p&gt;
&lt;h3&gt;
  
  
  8.1 Preprocessors
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Learning curve:&lt;/strong&gt; Since it's an &lt;strong&gt;extension of CSS&lt;/strong&gt;, it's easy to &lt;strong&gt;adapt&lt;/strong&gt; and existing CSS code can be used as is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Highlighting and auto-completion:&lt;/strong&gt; You can use the highlighting and auto-completion provided by the &lt;strong&gt;editor&lt;/strong&gt; as is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mixins and CSS-specific syntax:&lt;/strong&gt; Control flow and &lt;code&gt;@content&lt;/code&gt; allow you to &lt;strong&gt;easily add styles&lt;/strong&gt; just by &lt;strong&gt;&lt;a href="https://stylus-lang.com/docs/keyframes.html" rel="noopener noreferrer"&gt;declaring styles where needed&lt;/a&gt;&lt;/strong&gt; without object manipulation or returns. Less's &lt;a href="https://lesscss.org/features/#merge-feature" rel="noopener noreferrer"&gt;property merging&lt;/a&gt; and Stylus's &lt;a href="https://stylus-lang.com/docs/variables.html#property-lookup" rel="noopener noreferrer"&gt;Property lookup&lt;/a&gt; are also &lt;strong&gt;interesting features&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS-specific utilities:&lt;/strong&gt; It includes &lt;strong&gt;features&lt;/strong&gt; like SASS's &lt;a href="https://sass-lang.com/documentation/modules/color/" rel="noopener noreferrer"&gt;color module&lt;/a&gt; and &lt;a href="https://sass-lang.com/documentation/values/calculations/" rel="noopener noreferrer"&gt;&lt;code&gt;calc()&lt;/code&gt; optimization&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ecosystem:&lt;/strong&gt; There's &lt;strong&gt;infrastructure&lt;/strong&gt; like &lt;a href="https://stylelint.io/" rel="noopener noreferrer"&gt;Stylelint&lt;/a&gt; and &lt;a href="https://github.com/addyosmani/critical" rel="noopener noreferrer"&gt;Critical CSS&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  8.2 CSS in JS
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Code sharing:&lt;/strong&gt; You can immediately use all of &lt;strong&gt;Javascript's functions, variables, and rich libraries&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Javascript:&lt;/strong&gt; You only need to learn Javascript. Also, Javascript provides more robust capabilities for &lt;strong&gt;complex object manipulation and flow control&lt;/strong&gt; compared to preprocessor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;References:&lt;/strong&gt; Dependencies are &lt;strong&gt;explicit&lt;/strong&gt;, and features like go-to-definition and refactoring can be used immediately. Vue partially supports this, but it's not possible when nested. It's also a great help in &lt;strong&gt;removing zombie code&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic styles:&lt;/strong&gt; Features like values changing according to &lt;strong&gt;props or compound variants&lt;/strong&gt; are easy to write and integrate in CSS in JS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Co-location:&lt;/strong&gt; You can write styles in the &lt;strong&gt;same file&lt;/strong&gt; as the component.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  8.3 So, Why CSS in JS
&lt;/h3&gt;

&lt;p&gt;Here's a famous quote from biology and design:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://slcc.pressbooks.pub/humanbiology/chapter/chapter-12-organ-systems-of-the-human-body/" rel="noopener noreferrer"&gt;Structure Determines Function&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Form_follows_function" rel="noopener noreferrer"&gt;Form follows function&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmu4fxritwlinsuamdmz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmu4fxritwlinsuamdmz.png" alt="Function follows structure and determines form" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Isn't it similar to the relationship between &lt;strong&gt;HTML(structure), JS(function) and CSS(form)&lt;/strong&gt;?&lt;/p&gt;

&lt;p&gt;JS is the best way to connect them, like JSX, CSS-in-JS.&lt;/p&gt;

&lt;p&gt;Many of the &lt;strong&gt;advantages available&lt;/strong&gt; in preprocessors can be relatively easily achieved by &lt;strong&gt;investing in the tooling infrastructure&lt;/strong&gt; of CSS in JS.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Highlighting and auto-completion:&lt;/strong&gt; It's possible with tools like &lt;a href="https://marketplace.visualstudio.com/items?itemName=styled-components.vscode-styled-components" rel="noopener noreferrer"&gt;vscode-styled-components&lt;/a&gt;, and there are precedents for &lt;a href="https://marketplace.visualstudio.com/items?itemName=paulmolluzzo.convert-css-in-js" rel="noopener noreferrer"&gt;copy and paste&lt;/a&gt; as well.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CSS-specific utilities:&lt;/strong&gt; Can be complemented with a nice library called &lt;a href="https://github.com/styled-components/polished" rel="noopener noreferrer"&gt;polished&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ecosystem:&lt;/strong&gt; &lt;a href="https://github.com/callstack/linaria" rel="noopener noreferrer"&gt;linaria&lt;/a&gt; has proven that source maps, linting, etc. can be used.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With a little effort, you can even &lt;strong&gt;mimic usage similar to &lt;code&gt;@mixin&lt;/code&gt;&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;mediaQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;breakpoint&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;breakpoints&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;tablet&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@media (min-width: 768px) and (max-width: 1023px)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;desktop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@media (min-width: 1024px)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;breakpoint&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;breakpoints&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;breakpoints&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;breakpoint&lt;/span&gt;&lt;span class="p"&gt;]]:&lt;/span&gt; &lt;span class="nx"&gt;styles&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// or use throw&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;warn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Unknown breakpoint: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;breakpoint&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Usage example&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;responsiveElement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="nx"&gt;px&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;mediaQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tablet&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)({&lt;/span&gt;
    &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;18px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;mediaQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;desktop&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)({&lt;/span&gt;
    &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;20px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Of course, go-to-definition is &lt;strong&gt;not exclusive&lt;/strong&gt; to CSS in JS. It's possible through &lt;a href="https://marketplace.visualstudio.com/items?itemName=clinyong.vscode-css-modules" rel="noopener noreferrer"&gt;CSS Module extensions&lt;/a&gt;.&lt;br&gt;
However, there are &lt;strong&gt;many constraints&lt;/strong&gt; in sharing Javascript variables and using libraries, dynamic styles, and co-location (possible in SFC).&lt;br&gt;
Crucially, there's also the point that &lt;strong&gt;JavaScript runtime is ultimately necessary for creating Styled Components&lt;/strong&gt;, which is the final step of StyleStack.&lt;/p&gt;

&lt;p&gt;I think there's still &lt;strong&gt;a lot of room for improvement in CSS in JS&lt;/strong&gt; infrastructure, and it has relatively fewer constraints.&lt;br&gt;
For these reasons, despite quite liking preprocessors like Sass, I believe investing in CSS in JS is the right path.&lt;/p&gt;
&lt;h2&gt;
  
  
  9. Introduce project &lt;code&gt;mincho&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;I would like to introduce you to the project that will proceed based on the content discussed so far.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/mincho-js/mincho" rel="noopener noreferrer"&gt;mincho-js/mincho&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5ezie22vcj68qy86gwr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw5ezie22vcj68qy86gwr.png" alt="Mincho Logo" width="350" height="350"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  9.1 Motivation
&lt;/h3&gt;

&lt;p&gt;The original motivation for starting my project was to &lt;strong&gt;unify the Atomic CSS and SemanticCSS methodologies&lt;/strong&gt;. From a semiotic approach, I believed that this could be sufficiently represented as Expression and Content using the &lt;a href="https://www.semanticscholar.org/paper/Hjelmslev's-semiotic-model-of-language%3A-An-exegesis-Taverniers/aea82d14a5887daa4f1d647ae5387d4e71543e86" rel="noopener noreferrer"&gt;Sign function&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75ehfwtsabyzc7xkzwp0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75ehfwtsabyzc7xkzwp0.png" alt="Sign function" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(In this model too, form follows function.)&lt;/p&gt;

&lt;p&gt;The project name was decided early on.&lt;br&gt;
In Korea, &lt;strong&gt;&lt;a href="https://en.wikipedia.org/wiki/Mint_chocolate" rel="noopener noreferrer"&gt;mint chocolate&lt;/a&gt; is abbreviated as 'Mincho(민초)'&lt;/strong&gt;, and along with &lt;a href="https://en.wikipedia.org/wiki/Vanilla" rel="noopener noreferrer"&gt;vanilla&lt;/a&gt;, it's one of my favorite ice cream flavors.&lt;br&gt;
Mint chocolate is unique in its combination of contrasting flavors, harmonizing the cool and refreshing taste of mint with the sweet and smooth taste of chocolate.&lt;br&gt;
This is where the idea came from:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbztz95kmc5udsb649h2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbztz95kmc5udsb649h2n.png" alt="Mincho bongbong icecream" width="560" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The combination of Atomic CSS (Good) + Variant (Good) = Better resembles mint chocolate.&lt;/li&gt;
&lt;li&gt;I planned to base it on a library called &lt;a href="https://vanilla-extract.style/" rel="noopener noreferrer"&gt;Vanilla Extract&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;It's a flavor I like. &lt;a href="https://edition.cnn.com/2020/02/09/entertainment/bong-joon-ho-parasite/index.html" rel="noopener noreferrer"&gt;The most personal is the most creative&lt;/a&gt;, isn't it? 😹&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  9.2 Why use Vanilla Extract?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Vanilla Extract was chosen as the foundation&lt;/strong&gt; for this project for several reasons.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6m5egu0t0pfppaol60g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq6m5egu0t0pfppaol60g.png" alt="Vanilla extract" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Type-Safe:&lt;/strong&gt; It was created with a &lt;a href="https://vanilla-extract.style/" rel="noopener noreferrer"&gt;focus on type safety&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero-runtime:&lt;/strong&gt; As mentioned in '6.1.1 Integration', this is very important considering the future of RSC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API:&lt;/strong&gt; The basic design, such as the &lt;a href="https://vanilla-extract.style/documentation/style-composition/" rel="noopener noreferrer"&gt;Composition&lt;/a&gt; API, is very clean.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Features:&lt;/strong&gt; Existing features like &lt;a href="https://vanilla-extract.style/documentation/api/style/" rel="noopener noreferrer"&gt;Style&lt;/a&gt;, &lt;a href="https://vanilla-extract.style/documentation/api/style-variants/" rel="noopener noreferrer"&gt;StyleVariants&lt;/a&gt;, &lt;a href="https://vanilla-extract.style/documentation/theming/" rel="noopener noreferrer"&gt;Theme&lt;/a&gt;, and &lt;a href="https://vanilla-extract.style/documentation/packages/recipes/" rel="noopener noreferrer"&gt;Recipe&lt;/a&gt; are sufficiently powerful and worth referencing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Constraints:&lt;/strong&gt; &lt;a href="https://vanilla-extract.style/documentation/styling/#complex-selectors" rel="noopener noreferrer"&gt;Prevents encapsulation-breaking&lt;/a&gt; operations like &lt;code&gt;.selector &amp;gt; *&lt;/code&gt; at build time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Potential:&lt;/strong&gt; Although co-location is not currently available, referring to &lt;a href="https://github.com/macaron-css/macaron" rel="noopener noreferrer"&gt;Macaron&lt;/a&gt; suggests it should be possible.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  9.3 Brief Plan
&lt;/h3&gt;

&lt;p&gt;We cannot provide all features from the beginning, we plan to achieve them step by step.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Natural CSS in TypeScript:&lt;/strong&gt; We will bind various CSS preprocessing features to be specialized for TypeScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A CSS in JS for Scalable:&lt;/strong&gt; Supports and integrates StyleStack(Theme, Atomic CSS, Variants, and Styled Component) layers, making it possible to manage large-scale styles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build your own design system:&lt;/strong&gt; It functions as a framework for creating design systems through Figma plugins and Document system, among others.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As of writing this, the 'Natural CSS in TypeScript' phase is nearing completion, and I hope to achieve &lt;code&gt;A CSS in JS for Scalable&lt;/code&gt; within this year.&lt;/p&gt;

&lt;p&gt;As it is &lt;strong&gt;currently a Work In Progress (WIP)&lt;/strong&gt;, the API is unstable.&lt;br&gt;
A &lt;strong&gt;major API overhaul is planned&lt;/strong&gt; around the completion of the &lt;code&gt;A CSS in JS for Scalable&lt;/code&gt; phase, which will comprehensively consider a small API surface, improved type safety, SSR (and Server Component) support, and Vanilla Extract compatibility.&lt;br&gt;
For example, while we strive to ensure maximum compatibility with Vanilla Extract's usage, &lt;strong&gt;differences may arise as the project progresses&lt;/strong&gt;, and there are inevitable &lt;strong&gt;differences in how things operate&lt;/strong&gt;.&lt;br&gt;
Therefore, we &lt;strong&gt;intentionally named the functions differently&lt;/strong&gt; from Vanilla Extract(generally making them more concise), and we plan to create a separate &lt;code&gt;compat&lt;/code&gt; package for compatible APIs.&lt;/p&gt;

&lt;p&gt;Below is a describe of our ideas regarding the &lt;strong&gt;direction of StyleStack's API design and subsequent plans&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  10. CSS-friendly CSS in JS
&lt;/h2&gt;

&lt;p&gt;What does it mean to be &lt;strong&gt;specialized in CSS processing&lt;/strong&gt;?&lt;br&gt;
Besides the tooling infrastructure mentioned earlier, we can also consider &lt;strong&gt;syntax optimized&lt;/strong&gt; for CSS.&lt;/p&gt;

&lt;p&gt;Let's &lt;strong&gt;imagine CSS in JS&lt;/strong&gt; from scratch according to various conditions.&lt;/p&gt;
&lt;h3&gt;
  
  
  10.1 Template String vs Object Style
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://oleg008.medium.com/template-strings-vs-objects-in-cssinjs-4028ecc420b2" rel="noopener noreferrer"&gt;Template Strings vs. Objects in CSSinJS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the world of CSS In JS, there are &lt;strong&gt;two ways to express CSS&lt;/strong&gt;:&lt;br&gt;
Template string and Object style.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Template strings&lt;/strong&gt; seem better for simple use.&lt;br&gt;
This is because you can use CSS properties and syntax as they are.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvierj6d2ng5u8bbx49v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffvierj6d2ng5u8bbx49v.png" alt="Template string and Object style" width="800" height="140"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, the &lt;strong&gt;object style&lt;/strong&gt; is the same expression method as &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleRule/style" rel="noopener noreferrer"&gt;CSSOM&lt;/a&gt; and is a better method when &lt;strong&gt;a lot of&lt;/strong&gt; interpolation is needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs52m2b99og2lfu554svt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs52m2b99og2lfu554svt.png" alt="lot of interpolation is needed" width="800" height="122"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When using TypeScript, there is also the advantage of supporting types.&lt;br&gt;
The reason for using CSS In JS is basically to handle &lt;strong&gt;many rules and to interact&lt;/strong&gt; with JS.&lt;br&gt;
Therefore, when using CSS In JS, it's &lt;strong&gt;recommended&lt;/strong&gt; to primarily use the &lt;strong&gt;Object style&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If there are &lt;strong&gt;few design rules and interaction&lt;/strong&gt; with JS is unnecessary, it's &lt;strong&gt;better to use a CSS preprocessor&lt;/strong&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  10.2 Overcoming Syntax
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;fundamental limitation of CSS In JS&lt;/strong&gt; is that CSS syntax is not literal.&lt;/p&gt;

&lt;p&gt;Because of this, color codes basically don't work with pickers in editors, and CSS units (&lt;code&gt;px&lt;/code&gt;, &lt;code&gt;rem&lt;/code&gt;, &lt;code&gt;vw&lt;/code&gt;, etc.) and values (&lt;code&gt;visible&lt;/code&gt;, &lt;code&gt;space-between&lt;/code&gt;, etc.) cannot be used without treating them as strings.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// Color&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#EEEEEE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

  &lt;span class="c1"&gt;// Unit&lt;/span&gt;
  &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;16px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1rem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

  &lt;span class="c1"&gt;// Value&lt;/span&gt;
  &lt;span class="na"&gt;visibility&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;visible&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;justifyContent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;space-between&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fortunately, there is an extension for &lt;a href="https://marketplace.visualstudio.com/items?itemName=AntiAntiSepticeye.vscode-color-picker" rel="noopener noreferrer"&gt;color picker&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For properties that receive common values like &lt;code&gt;px&lt;/code&gt;, you could define them like JSS's &lt;a href="https://cssinjs.org/jss-plugin-default-unit" rel="noopener noreferrer"&gt;default-unit&lt;/a&gt; or Vanilla Extract's &lt;a href="https://vanilla-extract.style/documentation/styling/#unitless-properties" rel="noopener noreferrer"&gt;unitless property&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// cast to pixels&lt;/span&gt;
  &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;marginTop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

  &lt;span class="c1"&gt;// unitless properties&lt;/span&gt;
  &lt;span class="na"&gt;flexGrow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  10.3 SCSS and Nested Syntax
&lt;/h3&gt;

&lt;p&gt;The area where SCSS took the lead is nested syntax.&lt;br&gt;
As you've seen earlier, it supports &lt;a href="https://sass-lang.com/documentation/style-rules/declarations/#nesting" rel="noopener noreferrer"&gt;attribute&lt;/a&gt; nesting, &lt;a href="https://sass-lang.com/documentation/style-rules/parent-selector/" rel="noopener noreferrer"&gt;parent selector nesting&lt;/a&gt; using &lt;code&gt;&amp;amp;&lt;/code&gt;, and even nesting of &lt;code&gt;@at-rules&lt;/code&gt; like &lt;code&gt;@media&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="nc"&gt;.sample&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="cm"&gt;/* Property Nested */&lt;/span&gt;
    &lt;span class="nl"&gt;size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="na"&gt;weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="cm"&gt;/* Selector Nested */&lt;/span&gt;
  &lt;span class="nt"&gt;a&lt;/span&gt; &lt;span class="k"&gt;&amp;amp;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grey&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="cm"&gt;/* At rule Nested  */&lt;/span&gt;
  &lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dark&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is made possible by using several rules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nesting occurs when it's an object rather than a regular value, and since &lt;strong&gt;&lt;code&gt;kebab-case&lt;/code&gt; is converted to &lt;code&gt;camelCase&lt;/code&gt;&lt;/strong&gt;, nested properties also follow the rules&lt;/li&gt;
&lt;li&gt;If an attribute contains &lt;strong&gt;&lt;a href="https://emotion.sh/docs/object-styles#child-selectors" rel="noopener noreferrer"&gt;&lt;code&gt;&amp;amp;&lt;/code&gt; like in Emotion&lt;/a&gt;&lt;/strong&gt;, it is treated as a selector&lt;/li&gt;
&lt;li&gt;Simple selectors like &lt;code&gt;"&amp;amp;:hover"&lt;/code&gt; can be used as &lt;code&gt;:hover&lt;/code&gt;, &lt;strong&gt;reducing unnecessary &lt;code&gt;&amp;amp;&lt;/code&gt;&lt;/strong&gt;, similar to vanilla extract's &lt;a href="https://vanilla-extract.style/documentation/styling/#simple-pseudo-selectors" rel="noopener noreferrer"&gt;Simple pseudo selectors&lt;/a&gt;, for &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes" rel="noopener noreferrer"&gt;Pseudo-classes&lt;/a&gt; and &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements" rel="noopener noreferrer"&gt;Pseudo-elements&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;font&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;Size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;Weight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bold&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;a &amp;amp;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grey&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;:hover&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@media (prefers-color-scheme: dark)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's think about how to make it a little more convenient.&lt;br&gt;
Like Panda CSS's &lt;a href="https://panda-css.com/docs/concepts/conditional-styles" rel="noopener noreferrer"&gt;Conditional Styles&lt;/a&gt;, we can &lt;strong&gt;use &lt;code&gt;_&lt;/code&gt; instead of &lt;code&gt;:&lt;/code&gt;&lt;/strong&gt; and use camelCase to make it immediately usable in properties. (Only &lt;code&gt;_&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt; are special characters that can be used immediately in JavaScript properties)&lt;/p&gt;

&lt;p&gt;If there's an issue with the Panda CSS approach, it's the ad-hoc nature of inserting arbitrary classes, such as &lt;code&gt;_dark&lt;/code&gt; meaning &lt;code&gt;&amp;amp;.dark, .dark &amp;amp;&lt;/code&gt;.&lt;br&gt;
This might be acceptable for framework presets, but it's not suitable for applying as a literal syntax.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#EEEEEE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;_hover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;__before&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grey&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="c1"&gt;// Or&lt;/span&gt;
  &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#EEEEEE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;_hover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;__before&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grey&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When &lt;strong&gt;nesting at-rules&lt;/strong&gt;, we could group them together if they're the same rule, or we could utilize Conditional Styles.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#EEEEEE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@media&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;(min-width: 768px) and (max-width: 1023px)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;(min-width: 1024px)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grey&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="c1"&gt;// Or&lt;/span&gt;
  &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#EEEEEE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@media (min-width: 768px) and (max-width: 1023px)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@media (min-width: 1024px)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grey&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Of course, excessive use of nesting can cause problems, so it would be good to set a maximum nesting count as an ESLint rule or similar.&lt;/p&gt;

&lt;h3&gt;
  
  
  10.4 Less and Merge properties
&lt;/h3&gt;

&lt;p&gt;One of the main characteristics of Less is that it's &lt;a href="https://lesscss.org/features/#variables-feature-lazy-evaluation" rel="noopener noreferrer"&gt;lazy&lt;/a&gt;.&lt;br&gt;
However, since JavaScript is strict by default, I think this approach is not suitable for applying to CSS in JS.&lt;/p&gt;

&lt;p&gt;However, the &lt;strong&gt;&lt;a href="https://lesscss.org/features/#merge-feature" rel="noopener noreferrer"&gt;Merge properties&lt;/a&gt; feature&lt;/strong&gt; appears to be quite useful.&lt;br&gt;
This is because long properties like &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/box-shadow" rel="noopener noreferrer"&gt;box-shadow&lt;/a&gt; or &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/transform" rel="noopener noreferrer"&gt;transform&lt;/a&gt; were difficult to write in a single line.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="nc"&gt;.sample&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="cm"&gt;/* Merge with Comma */&lt;/span&gt;
  &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inset&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="mh"&gt;#555&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="cm"&gt;/* Merge with Space */&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="na"&gt;_&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="err"&gt;+&lt;/span&gt;&lt;span class="na"&gt;_&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;15deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.sample&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;inset&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;#555&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt; &lt;span class="no"&gt;black&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;scale&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;15deg&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As mentioned earlier, only &lt;code&gt;_&lt;/code&gt; and &lt;code&gt;$&lt;/code&gt; can be used as special characters in JavaScript.&lt;br&gt;
Since space is similar to &lt;code&gt;_&lt;/code&gt;, it would be good to add &lt;code&gt;$&lt;/code&gt; to commas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Since you can't have the same key multiple times, values are represented as arrays&lt;/li&gt;
&lt;li&gt;If it ends with &lt;code&gt;$&lt;/code&gt;, join with &lt;code&gt;,&lt;/code&gt;, if it ends with &lt;code&gt;_&lt;/code&gt;, join with a space
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;boxShadow&lt;/span&gt;&lt;span class="na"&gt;$&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;inset 0 0 10px #555&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0 0 20px black&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;transform_&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;scale(2)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rotate(15deg)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  10.5 Stylus and References
&lt;/h3&gt;

&lt;p&gt;Stylus provides several features for referencing.&lt;br&gt;
Both &lt;a href="https://stylus-lang.com/docs/selectors.html#partial-reference" rel="noopener noreferrer"&gt;Partial Reference&lt;/a&gt; and &lt;a href="https://stylus-lang.com/docs/selectors.html#relative-reference" rel="noopener noreferrer"&gt;Relative Reference&lt;/a&gt; seem to have a high potential for causing mistakes.&lt;br&gt;
Moreover, given the nature of CSS in JS, which is designed around components and doesn't require much nesting, the likelihood of needing these is low.&lt;/p&gt;

&lt;p&gt;However, &lt;strong&gt;&lt;a href="https://stylus-lang.com/docs/variables.html#property-lookup" rel="noopener noreferrer"&gt;property value referencing&lt;/a&gt;&lt;/strong&gt; could be beneficial.&lt;br&gt;
It seems useful as it can eliminate unnecessary variables, and if there's no reference target, it can be displayed as an &lt;strong&gt;error at build time&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;marginLeft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@width&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;marginTop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;calc(-(@width / 2))&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  9.6 PostCSS and CSS Extensions
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://postcss.org/" rel="noopener noreferrer"&gt;PostCSS&lt;/a&gt; uses standard CSS syntax, so it can be used together with CSS in JS.&lt;/p&gt;

&lt;p&gt;Among them, &lt;a href="https://github.com/csstools/postcss-plugins/tree/main/plugin-packs/postcss-preset-env" rel="noopener noreferrer"&gt;postcss-preset-env&lt;/a&gt; extends various syntaxes by default.&lt;br&gt;
For example, there are convenient &lt;a href="https://preset-env.cssdb.org/features/#media-query-ranges" rel="noopener noreferrer"&gt;media query ranges&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@media (480px &amp;lt;= width &amp;lt; 768px)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;fontFamily&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system-ui&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;480px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;767.98px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nc"&gt;.sample&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nl"&gt;font-family&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;system-ui&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;-apple-system&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Segoe&lt;/span&gt; &lt;span class="n"&gt;UI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Roboto&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Cantarell&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Noto&lt;/span&gt; &lt;span class="n"&gt;Sans&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  11. Scalable CSS in JS
&lt;/h2&gt;

&lt;p&gt;In CSS-friendly CSS in JS, we explored methods to appropriately express CSS in Javascript.&lt;br&gt;
Now, we need to manage &lt;strong&gt;CSS interactions with other CSS and Javascript&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Since runtime caused problems with scalability, we will try to deal with Zero runtime or Near Zero Runtime cases whenever possible.&lt;/p&gt;
&lt;h3&gt;
  
  
  11.1 Composition
&lt;/h3&gt;

&lt;p&gt;In practice, &lt;strong&gt;using multiple CSS classes&lt;/strong&gt; together is more common than applying just one.&lt;/p&gt;

&lt;p&gt;In this case, we can use &lt;a href="https://vanilla-extract.style/documentation/style-composition/" rel="noopener noreferrer"&gt;Composition&lt;/a&gt;.&lt;br&gt;
If you want to focus only on class names, &lt;a href="https://github.com/lukeed/clsx" rel="noopener noreferrer"&gt;clsx&lt;/a&gt; is also a good option.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;primary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}]);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;secondary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;aqua&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.styles_base__1hiof570&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.styles_primary__1hiof571&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.styles_secondary__1hiof572&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;aqua&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vanilla Extract's method excellently reduces CSS output.&lt;br&gt;
However, there are specificity issues. It would be more intuitive if the &lt;strong&gt;last style was always applied&lt;/strong&gt;, as it is in &lt;a href="https://emotion.sh/docs/composition" rel="noopener noreferrer"&gt;Emotion&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;danger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yellow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;style&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;danger&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;// `base` is applied&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can partially solve this by declaring and merging objects, or by directly specifying the color(since &lt;code&gt;.sample&lt;/code&gt; is declared after &lt;code&gt;.base&lt;/code&gt;). However, we need to consider the potential increase in output size with these approaches.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;danger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yellow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;style&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;danger&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="c1"&gt;// or&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;yellow&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;style&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since Atomic CSS also has the &lt;a href="https://weser.io/blog/the-shorthand-longhand-problem-in-atomic-css" rel="noopener noreferrer"&gt;Shorthand-Longhand&lt;/a&gt; problem, we should always keep specificity issues in mind when dealing with composition.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.2 UI = f( State )
&lt;/h3&gt;

&lt;p&gt;As React and &lt;a href="https://docs.flutter.dev/data-and-backend/state-mgmt/declarative" rel="noopener noreferrer"&gt;Flutter&lt;/a&gt; assert, UI can be thought of as a function.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff6tty5e1um5282j4buns.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff6tty5e1um5282j4buns.png" alt="UI = f( State )" width="762" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, is there any reason &lt;strong&gt;why Style shouldn't be a function?&lt;/strong&gt;&lt;br&gt;
This is the same approach as &lt;a href="https://fela.js.org/docs/latest/intro/principles" rel="noopener noreferrer"&gt;Fela's principles&lt;/a&gt;, and following this philosophy, Flutter implements even &lt;a href="https://api.flutter.dev/flutter/widgets/Padding-class.html" rel="noopener noreferrer"&gt;Padding as a widget&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bgColor&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Sample&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;className&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;sample&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;bgColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;content&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.sample&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--sample-bgColor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nc"&gt;.SampleComponent.sample&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--sample-bgColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's not good to have different usages or return values from a single function.&lt;br&gt;
Therefore, interfaces should be separated.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Return string(class name)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="c1"&gt;//  Return function&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dynamic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;bg&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;bg&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  11.3 Making it Declarative
&lt;/h3&gt;

&lt;p&gt;The previous example would work well in CSS in JS with runtime, but not in zero-runtime CSS in JS.&lt;br&gt;
As seen in the cases of &lt;a href="https://stylexjs.com/docs/learn/styling-ui/defining-styles/#dynamic-styles" rel="noopener noreferrer"&gt;StyleX&lt;/a&gt; and &lt;a href="https://github.com/mui/pigment-css?tab=readme-ov-file#coming-from-emotion-or-styled-components" rel="noopener noreferrer"&gt;PigmentCSS&lt;/a&gt;, dynamic styles are quite limited.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dynamic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;(({&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="nx"&gt;color&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;bg&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;bg&lt;/span&gt;
&lt;span class="p"&gt;}));&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also, traversing the AST to evaluate dynamic styles is a rather arduous task.&lt;br&gt;
Is it possible to create a declarative approach &lt;strong&gt;similar to the Variants&lt;/strong&gt; example previously mentioned as an &lt;strong&gt;effective declarative API&lt;/strong&gt;?&lt;br&gt;
The above cases could be represented as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;dynamic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;base&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;background&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}}]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You might want arbitrary Props only when using specific variants.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Same behavior&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#EEEEEE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;background&lt;/span&gt;
      &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;white&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#EEEEEE&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;background&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nf"&gt;sample2&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;red&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It would be convenient if we could create &lt;a href="https://github.com/topics/styled-components" rel="noopener noreferrer"&gt;Styled Components&lt;/a&gt; with Props specified based on Rules, wouldn't it?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;div&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="nx"&gt;sample2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;flex&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;vertical&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;true&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;flexdirection&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;column&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Sample&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Container&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"white"&lt;/span&gt; &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"black"&lt;/span&gt; &lt;span class="na"&gt;vertical&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      text
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Container&lt;/span&gt;&lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By creating it this way, you can make &lt;strong&gt;styled components as conveniently as with &lt;a href="https://github.com/styled-system/styled-system" rel="noopener noreferrer"&gt;Styled System&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.4 Atomic CSS
&lt;/h3&gt;

&lt;p&gt;We've briefly explored simple and dynamic concepts, and addressed Variants, which transformed BEM, a prominent semantic CSS methodology, into a declarative approach.&lt;/p&gt;

&lt;p&gt;Recall the &lt;strong&gt;primary objective of Atomic CSS&lt;/strong&gt; in comparison to semantic CSS.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Styles should be &lt;strong&gt;generated&lt;/strong&gt; only for the &lt;strong&gt;rules used on-demand&lt;/strong&gt;, according to a set of rules that map CSS properties to design tokens based on &lt;strong&gt;theme specifications&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;How can we ensure that styles are generated only for the rules being used?&lt;br&gt;
Looking at various issues(&lt;a href="https://github.com/vanilla-extract-css/vanilla-extract/discussions/91" rel="noopener noreferrer"&gt;#91&lt;/a&gt;, &lt;a href="https://github.com/vanilla-extract-css/vanilla-extract/discussions/992" rel="noopener noreferrer"&gt;#992&lt;/a&gt;, &lt;a href="https://github.com/vanilla-extract-css/vanilla-extract/discussions/1132" rel="noopener noreferrer"&gt;#1132&lt;/a&gt;, &lt;a href="https://github.com/vanilla-extract-css/vanilla-extract/discussions/1237" rel="noopener noreferrer"&gt;#1237&lt;/a&gt;) with Vanilla Extract, it doesn't seem easy.&lt;/p&gt;

&lt;p&gt;A potential approach involves &lt;strong&gt;creating rules and utilizing&lt;/strong&gt; them with the previously defined &lt;code&gt;css()&lt;/code&gt;, &lt;code&gt;rules()&lt;/code&gt;, and &lt;code&gt;styled()&lt;/code&gt; functions, while caching each property-value pair.&lt;br&gt;
By creating it this way, you can achieve Tailwind's usage and Windi CSS's &lt;a href="https://windicss.org/features/attributify.html" rel="noopener noreferrer"&gt;Attributify Mode&lt;/a&gt; in a near on-demand manner without the complex &lt;a href="https://unocss.dev/config/rules#dynamic-rules" rel="noopener noreferrer"&gt;regular expressions of UnoCSS&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineRules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="cm"&gt;/* Something */&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;inline&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;px&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;indigo-800&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}]);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;px&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;white&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt; &lt;span class="na"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white-100&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Sample3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;div&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;saple2&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While '11.1 Composition' may cause &lt;strong&gt;specificity issues, it can mitigate&lt;/strong&gt; the problem by behaving similarly to &lt;a href="https://github.com/dcastil/tailwind-merge/blob/v2.1.0/docs/what-is-it-for.md" rel="noopener noreferrer"&gt;tailwind-merge&lt;/a&gt; at build time.&lt;/p&gt;

&lt;p&gt;While not yet fully established, we can propose a Draft API as follows:&lt;br&gt;
When strict mode is true, only shortcuts and toggles can be used instead of properties.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineRules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// Whether to allow properties attributes - allow only toggles or shortcuts&lt;/span&gt;
  &lt;span class="na"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

  &lt;span class="c1"&gt;// Restrictions on features available in CSS&lt;/span&gt;
  &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Allow only values in arrays&lt;/span&gt;
    &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;inline&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;paddingLeft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;paddingRight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;

    &lt;span class="c1"&gt;// Allow only values in objects&lt;/span&gt;
    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;indigo-800&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rgb(55, 48, 163)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;

    &lt;span class="c1"&gt;//Entire properties&lt;/span&gt;
    &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;shortcuts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;pl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;paddingLeft&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;pr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;paddingRight&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;px&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pl&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pr&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;color&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;background&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;toggles&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;inline&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However, mapping every element individually may prove cumbersome.&lt;br&gt;
The availability of &lt;strong&gt;predefined sets&lt;/strong&gt;, similar to the &lt;a href="https://theme-ui.com/theme-spec" rel="noopener noreferrer"&gt;ThemeUI spec&lt;/a&gt;, would greatly enhance convenience.&lt;br&gt;
You might want to map not only the property values but also shortcuts and toggles like tailwind.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineRules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// Restrictions on features available in CSS&lt;/span&gt;
  &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;themeUISpec&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;indigo-800&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rgb(55, 48, 163)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;// color, background, accentColor, ...&lt;/span&gt;
    &lt;span class="na"&gt;space&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;// margin, padding, inset, top, ..&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
   &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;twindShorcutSpec&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;// Predefined shortcuts and toggles like the tailwind API&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The provision of such diverse presets would significantly &lt;strong&gt;simplify the creation and utilization of Atomic CSS&lt;/strong&gt;.&lt;br&gt;
And, like PandaCSS's Conditional Styles, it will be necessary to provide various conditions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;css&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineRules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;defaultCondition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;light&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vertical&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;conditions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;light&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;dark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;.dark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;.dark &amp;amp;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;osLight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
    &lt;span class="na"&gt;osDark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@media&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;(prefers-color-scheme: dark)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;horizontal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;[data-orientation=horizontal]&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;vertical&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;[data-orientation=vertical]&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;compoundConditions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;when&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;light&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;osLight&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;.pureLight&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;when&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;osDark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;.pureDark&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  11.5 Theme
&lt;/h3&gt;

&lt;p&gt;Let's discuss the Theme concept mentioned in Atomic CSS in more detail.&lt;br&gt;
&lt;strong&gt;Themes are mappings of design tokens&lt;/strong&gt;, and as we saw in Atomic CSS, they typically have two structures.&lt;br&gt;
Of course, we could also follow the &lt;a href="https://tr.designtokens.org/format/" rel="noopener noreferrer"&gt;W3C Design Token Format&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;theme&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;spaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;black-100&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white-100&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#fff&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue-500&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#07c&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We need to consider the scalability across primitive tokens, semantic tokens, and component tokens.&lt;br&gt;
For primitive tokens, we can create &lt;strong&gt;subgroups for categories&lt;/strong&gt; like color:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[,&lt;/span&gt; &lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;spaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;black&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;white&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#fff&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
      &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#07c&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's consider semantic tokens.&lt;br&gt;
While they can be isolated like component tokens, semantic tokens are often used &lt;strong&gt;globally at the application level&lt;/strong&gt;.&lt;br&gt;
Therefore, we need to design them to handle derivable tokens.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[,&lt;/span&gt; &lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// Main values&lt;/span&gt;
  &lt;span class="na"&gt;values&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;spaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;black&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="c1"&gt;// ...&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;white&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#fff&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
        &lt;span class="c1"&gt;// ...&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="na"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="c1"&gt;// ...&lt;/span&gt;
        &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#07c&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;

  &lt;span class="c1"&gt;// Derived values&lt;/span&gt;
  &lt;span class="na"&gt;alias&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;spaces&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;colors&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;spaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;small&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;spaces&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;medium&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;spaces&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;large&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;spaces&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white-100&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;blue-500&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Component tokens should be isolated by component and be derivable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[,&lt;/span&gt; &lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="cm"&gt;/* Something */&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buttonPrimary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;While it may seem we've covered most aspects of tokens, there's more to consider.&lt;br&gt;
We also need to consider applying &lt;strong&gt;tokens in modes (conditions) such as Dark and Light&lt;/strong&gt;.&lt;br&gt;
It would be fine to manually combine Light and Dark in &lt;code&gt;css()&lt;/code&gt; or &lt;code&gt;rules()&lt;/code&gt;, but if we want values that automatically switch based on conditions, we run into circular dependency issues with Atomic CSS(&lt;code&gt;defineRules&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;I'm currently considering how to express this aspect more elegantly.&lt;br&gt;
However, if we forgo automatic conversion based on conditions, the current structure should suffice.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;css&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineRules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
  &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;paddingLeft&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spaces&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;paddingRight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;spaces&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// ...&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A potential solution is to make the result of &lt;code&gt;defineRules()&lt;/code&gt; include &lt;code&gt;theme()&lt;/code&gt; as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  11.6 Looking Back
&lt;/h3&gt;

&lt;p&gt;It seems we've achieved to some extent the concept of the &lt;code&gt;StyleStack&lt;/code&gt; layers we defined earlier, '7.5 Layers for Style'.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3oyupo2pin4ag8lkw8i9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3oyupo2pin4ag8lkw8i9.png" alt="Layers for Style - StyleStack" width="358" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Literal:&lt;/strong&gt; Provides various CSS-specific syntax of CSS preprocessors, considering the syntactic limitations of JavaScript. Use &lt;code&gt;css()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Theme:&lt;/strong&gt; Design token values and customization for Color, Typography, Spaces, etc. Use &lt;code&gt;theme()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic:&lt;/strong&gt; Atomic styles that map to visual values. Use &lt;code&gt;defineRules()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Variants:&lt;/strong&gt; Styles for reusable blocks. Use &lt;code&gt;rules()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styled Component:&lt;/strong&gt; Binding with JSX components. Use &lt;code&gt;styled()&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We have created a hypothetical syntax and library API that is declarative and easy to write/manage.&lt;br&gt;
Personally, I find the result clean and appealing, and there are &lt;strong&gt;several principles behind it&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Be declarative&lt;/strong&gt; rather than listing out logic&lt;/li&gt;
&lt;li&gt;APIs for each layer &lt;strong&gt;should be isomorphic&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expression and content presuppose each other&lt;/strong&gt;, so they must be considered&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The law of excluded middle&lt;/strong&gt; applies when hierarchies(perspectives) differ&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As a result, the API is very clean and consistent.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Theme Syntax&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[,&lt;/span&gt; &lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;spaces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;black&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;white&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#fff&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;blue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
      &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#07c&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;buttonPrimary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;colors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;primary&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Literal Syntax&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;base&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#444&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;props&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;background&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;css&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pure-class-name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;sample1&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;buttonPrimary&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;}]);&lt;/span&gt;

&lt;span class="c1"&gt;// Atomic Syntax&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;css&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;atomic&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineRules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;themeUISpec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
   &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;twindShorcutSpec&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;atomic&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;uppercase&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;px&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;_hover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;buttonPrimary&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;}]);&lt;/span&gt;

&lt;span class="c1"&gt;// Variants Syntax&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;variants&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// ... &lt;/span&gt;
  &lt;span class="na"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;outlined&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;true&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1px solid currentColor&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;transparent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;accent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
      &lt;span class="na"&gt;pink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pink&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample4&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;outlined&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;accent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pink&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}]);&lt;/span&gt;

&lt;span class="c1"&gt;// Atomic Variants Syntax&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;atomicRules&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineRules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;themeUISpec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;tokens&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
   &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nf"&gt;twindShorcutSpec&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;atomicVariants&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;atomicRules&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="c1"&gt;// ... &lt;/span&gt;
  &lt;span class="na"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;outlined&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;true&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;base&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;current&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;transparent&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;accent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
      &lt;span class="na"&gt;pink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pink-500&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;white&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sample5&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;atomicVariants&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;outlined&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;accent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pink&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}]);&lt;/span&gt;

&lt;span class="c1"&gt;// Styled Component Syntax&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Sample6&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;button&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;sample4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* Something like rules() */&lt;/span&gt; &lt;span class="p"&gt;}]);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;element1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Sample6&lt;/span&gt; &lt;span class="na"&gt;outlined&lt;/span&gt; &lt;span class="na"&gt;accent&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"pink"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Button&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Sample5&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Atomic Styled Component Syntax&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;styled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;atomicStyled&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;defineRules&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="cm"&gt;/* Something like atomicRules() */&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;Sample6&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;atomicStyled&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;div&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="nx"&gt;sample5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* Something like atomic rules() */&lt;/span&gt; &lt;span class="p"&gt;}]);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;element2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Sample6&lt;/span&gt; &lt;span class="na"&gt;px&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;bg&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"indigo-600"&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Above all, it is possible to use only the parts of StyleStack with &lt;strong&gt;"as much abstraction as you want"&lt;/strong&gt;.&lt;br&gt;
This is an important characteristic that &lt;strong&gt;enables progressive&lt;/strong&gt; enhancement and makes &lt;strong&gt;scalability and migration&lt;/strong&gt; easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. CSS in JS for Design Systems
&lt;/h2&gt;

&lt;p&gt;It seems quite good for programmers to manage styles.&lt;br&gt;
Then, &lt;strong&gt;how about collaborators?&lt;/strong&gt; (&lt;a href="https://medium.com/ideas-by-idean/everything-you-need-to-know-about-design-systems-f6e82982be27" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4j88l3oovntg81fng032.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4j88l3oovntg81fng032.png" alt="Design system" width="720" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Designers primarily focus on making design decisions and creating the visual aspects of components and applications, rather than coding.&lt;br&gt;
This leads to &lt;strong&gt;some discrepancies in integration&lt;/strong&gt; with design tools, documentation, and so on.&lt;/p&gt;

&lt;p&gt;Not only designers but also &lt;strong&gt;marketers can be considered&lt;/strong&gt;.&lt;br&gt;
&lt;strong&gt;Brand guidelines&lt;/strong&gt; should be integrated into the style guide, and they will want to see &lt;strong&gt;A/B tests and user feedback on UI/UX&lt;/strong&gt; at a glance.&lt;br&gt;
They may also want to use &lt;strong&gt;design assets and templates&lt;/strong&gt; for newsletters, social media posts, and banners, as well as manage &lt;strong&gt;styles for each marketing campaign&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There's also a need to follow certain rules with other developers.&lt;br&gt;
For example, the depth of nested styles and the order of style alignment mentioned earlier.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.1 Figma
&lt;/h3&gt;

&lt;p&gt;Among the various design tools available, &lt;a href="https://www.figma.com/" rel="noopener noreferrer"&gt;Figma&lt;/a&gt; is widely recognized as one of the best for UI design. Therefore, this section focuses on Figma-based workflows. (&lt;a href="https://www.figma.com/blog/figmas-new-icon/" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwe9c4tq760pgi6buyze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwe9c4tq760pgi6buyze.png" alt="Figma logo" width="350" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the problems with design was the &lt;strong&gt;Combinatorial Explosion&lt;/strong&gt;.&lt;br&gt;
Let's take an example.&lt;br&gt;
GitHub's &lt;a href="https://primer.style/components/button" rel="noopener noreferrer"&gt;button component&lt;/a&gt; has the following conditions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structures:&lt;/strong&gt; It has leadingVisual, label, trailingVisual, and trailingAction elements, which can appear simultaneously. However, there's no case where all elements are absent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shapes:&lt;/strong&gt; There are Primary, Secondary, Invisible, and Danger colors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;States:&lt;/strong&gt; There are Rest, Hover, Disabled, Pressed, and Focus states.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contexts:&lt;/strong&gt; There are Inactive and Loading contexts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Color Scheme:&lt;/strong&gt; There are support light and dark mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If we calculate the number of cases, it's (2&lt;sup&gt;4&lt;/sup&gt;−1)×4×5×2×2=1200.&lt;br&gt;
However, &lt;strong&gt;no designer would want to create 1200 components&lt;/strong&gt; just for buttons.&lt;/p&gt;

&lt;p&gt;Therefore, I'd like to have the following flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Designers and developers discuss components together(Need wireframe).&lt;/li&gt;
&lt;li&gt;Designers create components including major visual options, while developers implement functionality. After finishing, generate initial styles using &lt;strong&gt;Figma to Code&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;After receiving an explanation from the designer, the developer analyzes the visual decisions and performs &lt;strong&gt;state compression to reduce&lt;/strong&gt; the number of cases as much as possible,&lt;/li&gt;
&lt;li&gt;After applying design tokens, etc., create it with &lt;strong&gt;Code to Figma&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;The designer checks if the component has been created as intended, and if there are any missing rules, updates the representative component.&lt;/li&gt;
&lt;li&gt;Obtain implementation information for that component with &lt;strong&gt;Figma to Code&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Apply visual rules and then update the rest of the components with Code to Figma&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This requires two main plugins. (&lt;a href="https://www.figma.com/ko-kr/blog/plugins-are-coming-to-figma/" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ivar5g7ubnj5rshq867.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3ivar5g7ubnj5rshq867.png" alt="Figma plugin" width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fortunately, there seem to be &lt;a href="https://medium.com/@ajay.singh07/10-figma-plugins-to-convert-designs-into-html-and-css-code-de6752bbbd78" rel="noopener noreferrer"&gt;many examples&lt;/a&gt; of &lt;a href="https://www.figma.com/community/search?resource_type=plugins&amp;amp;sort_by=relevancy&amp;amp;query=figma+to+code&amp;amp;editor_type=all&amp;amp;price=all&amp;amp;creators=all" rel="noopener noreferrer"&gt;Figma to Code&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code to Figma:&lt;/strong&gt; &lt;a href="https://code.to.design/" rel="noopener noreferrer"&gt;Code to Design&lt;/a&gt;, &lt;a href="https://www.uxpin.com/studio/blog/how-to-turn-code-into-design/" rel="noopener noreferrer"&gt;UxPin&lt;/a&gt;, &lt;a href="https://storybook.js.org/blog/figma-plugin-for-storybook/" rel="noopener noreferrer"&gt;Storybook&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Figma to Code:&lt;/strong&gt; &lt;a href="https://www.animaapp.com/" rel="noopener noreferrer"&gt;Anima&lt;/a&gt;, &lt;a href="https://www.builder.io/m/design-to-code" rel="noopener noreferrer"&gt;Builder.io&lt;/a&gt;, &lt;a href="https://grida.co/" rel="noopener noreferrer"&gt;Grida&lt;/a&gt;, &lt;a href="https://github.com/KlausSchaefers/figma-low-code" rel="noopener noreferrer"&gt;Figma-Low-Code&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In addition to these plugins, AI-powered tools can significantly enhance the process of modifying and creating designs. For instance, &lt;a href="https://github.com/jayhack/text-to-figma" rel="noopener noreferrer"&gt;text-to-figma&lt;/a&gt; allows designers to generate Figma designs from text descriptions, streamlining the design process.&lt;/p&gt;

&lt;p&gt;To ensure &lt;strong&gt;smooth integration with Figma&lt;/strong&gt;, particularly with features like &lt;a href="https://help.figma.com/hc/en-us/articles/360040451373-Explore-auto-layout-properties" rel="noopener noreferrer"&gt;AutoLayout&lt;/a&gt;, &lt;a href="https://help.figma.com/hc/en-us/articles/360039957734-Apply-constraints-to-define-how-layers-resize" rel="noopener noreferrer"&gt;Constraints&lt;/a&gt;, &lt;a href="https://help.figma.com/hc/en-us/articles/360039956914-Adjust-alignment-rotation-and-position" rel="noopener noreferrer"&gt;Position&lt;/a&gt;, an &lt;strong&gt;opinionated CSS framework might be necessary&lt;/strong&gt;.&lt;br&gt;
This framework would need to be compatible with Figma's design paradigms while also being suitable for code-based development. A detailed discussion on suitable CSS frameworks for Figma integration will be addressed in a separate article to maintain conciseness in this overview.&lt;/p&gt;

&lt;h3&gt;
  
  
  12.2 Documentation
&lt;/h3&gt;

&lt;p&gt;Style guides are typically created by designers to ensure consistency in design across a project or organization.&lt;br&gt;
To facilitate the creation and maintenance of these style guides, &lt;strong&gt;easy-to-use documentation tools&lt;/strong&gt; are essential.&lt;br&gt;
&lt;a href="https://zeroheight.com/" rel="noopener noreferrer"&gt;Zeroheight&lt;/a&gt;, &lt;a href="https://www.frontify.com/" rel="noopener noreferrer"&gt;Frontify&lt;/a&gt;, and &lt;a href="https://www.supernova.io/" rel="noopener noreferrer"&gt;Supernova&lt;/a&gt; are representative examples. (&lt;a href="https://zeroheight.com/help/guides/tips-on-organizing-your-design-files-for-zeroheight/" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwiqbkkzdxlyxvm6ne9jp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwiqbkkzdxlyxvm6ne9jp.png" alt="Document cover page" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For developers' component documentation, there are &lt;a href="https://storybook.js.org/" rel="noopener noreferrer"&gt;Storybook&lt;/a&gt;, &lt;a href="https://histoire.dev/" rel="noopener noreferrer"&gt;Histoire&lt;/a&gt;, &lt;a href="https://ladle.dev/" rel="noopener noreferrer"&gt;Ladle&lt;/a&gt;, and &lt;a href="https://patternlab.io/" rel="noopener noreferrer"&gt;Pattern Lab&lt;/a&gt;, but they are insufficient for designer.&lt;/p&gt;

&lt;p&gt;The documentation system should at least be capable of the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Displaying &lt;strong&gt;design tokens and code sample&lt;/strong&gt; together&lt;/li&gt;
&lt;li&gt;Providing and &lt;strong&gt;testing interactive component examples with states&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Explaining &lt;strong&gt;design intentions and technical implementation&lt;/strong&gt; details in parallel&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive document editor&lt;/strong&gt; for easy modifications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search integrated&lt;/strong&gt; with something like Algolia search&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version control&lt;/strong&gt; tracking&lt;/li&gt;
&lt;li&gt;Integrated with &lt;strong&gt;Figma&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Particularly for &lt;strong&gt;version control tracking, integration with Git&lt;/strong&gt; is necessary, similar to i18n services(&lt;a href="https://crowdin.com/" rel="noopener noreferrer"&gt;crowdin&lt;/a&gt;, &lt;a href="https://lokalise.com/" rel="noopener noreferrer"&gt;lokalise&lt;/a&gt;, &lt;a href="https://pontoon.mozilla.org/" rel="noopener noreferrer"&gt;pontoon&lt;/a&gt; .etc).&lt;/p&gt;

&lt;p&gt;If we expand a bit further, we could support the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Tools:&lt;/strong&gt; Internationalization(i18n) support, A/B Testing, responsive testing, accessibility checks, and performance testing tool integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboards:&lt;/strong&gt; For style usage statistics and user behavior patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaboration and communication:&lt;/strong&gt; Such as real-time comments/feedback and task assignment and tracking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manage:&lt;/strong&gt; Role-based access control system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authoring tools:&lt;/strong&gt; Allow content writers to instantly create outputs according to templates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom:&lt;/strong&gt; Arrange and decorate the page. You might also want to include a style tile(&lt;a href="https://webdesign.tutsplus.com/style-tiles-an-alternative-to-full-design-comps--webdesign-7232a" rel="noopener noreferrer"&gt;1&lt;/a&gt;, &lt;a href="https://madebymunsters.com/design/style-tiles-make-for-quick-design-exploration/" rel="noopener noreferrer"&gt;2&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  12.3 Development Tools
&lt;/h3&gt;

&lt;p&gt;For a comprehensive design system, a robust tooling infrastructure for developers is essential, including: (&lt;a href="https://tailwindcss.com/docs/editor-setup" rel="noopener noreferrer"&gt;image source&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehqg9y7f5r4edgon0g2r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fehqg9y7f5r4edgon0g2r.png" alt="Tailwind VS Code Extension" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Integration of tools such as &lt;strong&gt;Stylelint and Sourcemap&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ESLint plugins/rules&lt;/strong&gt; for CSS in JS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Highlighting and auto-completion&lt;/strong&gt; in the editor's value string at the same level as CSS, and conversion between kebab-case and camelCase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual regression testing&lt;/strong&gt; tools integrated with Figma/Storybook&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspector&lt;/strong&gt; like &lt;a href="https://unocss.dev/tools/inspector" rel="noopener noreferrer"&gt;unocss&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;It's still in a very early stage, and the API is unstable.&lt;br&gt;
However, I hope that someday the API will stabilize and tooling infrastructure will be provided, allowing everyone to freely express styles and easily create and maintain design systems!&lt;/p&gt;

&lt;p&gt;Thank you for reading this long post.&lt;br&gt;
If you found this project interesting or helpful, I would appreciate if you could &lt;strong&gt;star the &lt;a href="https://github.com/mincho-js/mincho" rel="noopener noreferrer"&gt;project&lt;/a&gt;&lt;/strong&gt;.&lt;br&gt;
If you'd like to test it out and help us improve it, &lt;strong&gt;please reach out on &lt;a href="https://twitter.com/alstjr7375" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/strong&gt; or email &lt;strong&gt;me at &lt;a href="mailto:alstjr7375@daum.net"&gt;alstjr7375@daum.net&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;More References: (Unfortunately, the articles/videos are in Korean)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://velog.io/@teo/css-history-1" rel="noopener noreferrer"&gt;Understanding why CSS has become difficult through its history&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Design Systems, Beyond Form: &lt;a href="https://www.youtube.com/watch?v=21eiJc90ggo" rel="noopener noreferrer"&gt;Video&lt;/a&gt; / &lt;a href="https://speakerdeck.com/soyoung210/dijain-siseutem-hyeongtaereul-neomeoseo" rel="noopener noreferrer"&gt;Presentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Cross-Platform Design System, A 1.5-Year Record: &lt;a href="https://www.youtube.com/watch?v=obQvttzgSzY" rel="noopener noreferrer"&gt;Video&lt;/a&gt; / &lt;a href="https://drive.google.com/file/d/1CebOKya2k5gRXaOskZyP6OTxQa41PJLQ/view" rel="noopener noreferrer"&gt;Presentation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>css</category>
    </item>
  </channel>
</rss>
