<?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: Eduardo Ferreira</title>
    <description>The latest articles on DEV Community by Eduardo Ferreira (@eduferfer).</description>
    <link>https://dev.to/eduferfer</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%2F454245%2F99d3e0e4-b3f4-48b7-ba36-92a2132d1ea1.jpeg</url>
      <title>DEV Community: Eduardo Ferreira</title>
      <link>https://dev.to/eduferfer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/eduferfer"/>
    <language>en</language>
    <item>
      <title>How-to: CSS Table Swipe Interaction</title>
      <dc:creator>Eduardo Ferreira</dc:creator>
      <pubDate>Thu, 13 May 2021 21:59:47 +0000</pubDate>
      <link>https://dev.to/eduferfer/how-to-css-table-swipe-interaction-3ih3</link>
      <guid>https://dev.to/eduferfer/how-to-css-table-swipe-interaction-3ih3</guid>
      <description>&lt;p&gt;Table rows or list items often have actions associated to them, such as deleting, sharing and editing. When designing for touch devices, designers can take advantage of swipe gestures to allow users to quickly perform common actions without having to navigate to a different page or open drawers or modal dialogs.&lt;/p&gt;

&lt;p&gt;Gesture based interactions are supported by native mobile languages, but can be tricky to implement in HTML/CSS/JS and are often over-done with excessive use of JavaScript, which can cause low performance and chunky interactions.&lt;/p&gt;

&lt;p&gt;In this post, I will walk through 3 simple steps to build a swipe gesture interaction using solely HTML, CSS and a little bit of JS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Note: the demos in this post should be used on touch devices.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Basic requirements
&lt;/h2&gt;

&lt;p&gt;Let’s start by defining what we want to build. Our swipe snippet should allow the user to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use touch to swipe a table row either right or left.&lt;/li&gt;
&lt;li&gt;Unveil an action (icon and coloured background) when the user swipes.&lt;/li&gt;
&lt;li&gt;Automatically restore scroll position when the user releases the finger.&lt;/li&gt;
&lt;li&gt;Trigger an action when the user releases the finger (in case they have swiped far enough).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. Setting the swipe-able element
&lt;/h2&gt;

&lt;p&gt;As a first step, let’s create our swipe-able element and add basic styles to it. To style it, it is given a class named &lt;code&gt;.swipe-element&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To set the stage for the swipe interaction, we can wrap the element around a div with the class name of &lt;code&gt;.swipe-container&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To reduce the visual clutter, the &lt;code&gt;.swipe-container&lt;/code&gt; should have the scrollbar hidden.&lt;/li&gt;
&lt;li&gt;To automatically restore scroll position, the &lt;code&gt;.swipe-container&lt;/code&gt; should have &lt;code&gt;scroll-snap-type: x mandatory&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;To indicate which element should be in focus when automatically restoring the scroll position, the &lt;code&gt;swipe-element&lt;/code&gt; should have &lt;code&gt;scroll-snap-align: start&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/css-swipe-1?embed=1&amp;amp;&amp;amp;" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Adding the left and right actions
&lt;/h2&gt;

&lt;p&gt;With the container and scrolling logic in place, the next step is to add the actions.&lt;/p&gt;

&lt;p&gt;The icons used in this example are from the Material Icons font.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As a wrapper for the icon, the &lt;code&gt;.action&lt;/code&gt; div, as well as the previously added &lt;code&gt;.swipe-element&lt;/code&gt; should have &lt;code&gt;min-width: 100%&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;i&lt;/code&gt; icon should have &lt;code&gt;position: sticky&lt;/code&gt; to ensure it is always visible as soon as the user starts swiping.&lt;/li&gt;
&lt;li&gt;the &lt;code&gt;.right&lt;/code&gt; action should have &lt;code&gt;justify-content: flex-end&lt;/code&gt; to make the icon stick to the right side.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/css-swipe-2?embed=1&amp;amp;&amp;amp;" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Triggering the action
&lt;/h2&gt;

&lt;p&gt;When the user releases the finger, our element should check how far the user has swiped and trigger an action in case they have done it far enough.&lt;/p&gt;

&lt;p&gt;There should be a distinction between left and right swipe, so the application can handle them independently.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To start, an &lt;code&gt;ontouchend&lt;/code&gt; event listener should be added to the &lt;code&gt;.swipe-container&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;In a function called &lt;code&gt;handleSwipe()&lt;/code&gt;, we should first define the &lt;code&gt;minDistance&lt;/code&gt; the user should swipe for the action to be triggered.&lt;/li&gt;
&lt;li&gt;After that, we should calculate the &lt;code&gt;swipeDistance&lt;/code&gt; by simply subtracting the container’s &lt;code&gt;clientWidth&lt;/code&gt; from its &lt;code&gt;scrollLeft&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Negative values represent a left swipe, while positive ones indicate a right one. In case the &lt;code&gt;swipeDistance&lt;/code&gt; is smaller than &lt;code&gt;minDistance * -1&lt;/code&gt;, we should trigger the left action, and if it is greater than &lt;code&gt;minDistance&lt;/code&gt;, the right action should be triggered instead.&lt;/li&gt;
&lt;li&gt;In case the user hasn’t swiped either left or right further than the minDistance, nothing should be triggered.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;iframe src="https://stackblitz.com/edit/css-swipe-3?embed=1&amp;amp;&amp;amp;" width="100%" height="500"&gt;
&lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Using standard CSS selectors, we have built a swipe-able element that can be used for enhancing the user experience of lists and tables on mobile devices.&lt;/p&gt;

&lt;p&gt;With some tweaks and a little bit of imagination, this snippet can be modified or extended to show only one action or indicating visually whether the user has swiped far enough, for example.&lt;/p&gt;

&lt;p&gt;This component is also available as a plug-and-play in the &lt;a href="https://kor-ui.com/components/swipe-actions"&gt;Kor UI library&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>javascript</category>
      <category>ux</category>
    </item>
    <item>
      <title>Designing Color Systems — Transparent vs. Solid Shades
</title>
      <dc:creator>Eduardo Ferreira</dc:creator>
      <pubDate>Sat, 01 May 2021 01:25:15 +0000</pubDate>
      <link>https://dev.to/eduferfer/designing-color-systems-transparent-vs-solid-shades-267g</link>
      <guid>https://dev.to/eduferfer/designing-color-systems-transparent-vs-solid-shades-267g</guid>
      <description>&lt;p&gt;From communicating visual hierarchy to expressing brand identity, colors play a key role in the design of products and design systems.&lt;/p&gt;

&lt;p&gt;While some existing systems prefer the &lt;strong&gt;use of transparency&lt;/strong&gt; for color shades, others rely solely on &lt;strong&gt;solid color palettes&lt;/strong&gt;. In this post I will compare the two approaches and share my thoughts on the pros and cons of each.&lt;/p&gt;




&lt;h2&gt;
  
  
  Usage of color shades
&lt;/h2&gt;

&lt;p&gt;Shades are used mostly for two purposes: &lt;strong&gt;indicating states&lt;/strong&gt; such as hover, active or disabled and &lt;strong&gt;indicating hierarchy&lt;/strong&gt;, such as for primary and secondary text.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uDtqRPSL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2AJf-jSnNEFypw357SatIPfg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uDtqRPSL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2AJf-jSnNEFypw357SatIPfg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Benchmarking design systems
&lt;/h2&gt;

&lt;p&gt;Analysing four popular and well established design systems shows that there is no unanimity regarding  which is the best. While &lt;strong&gt;Google’s Material&lt;/strong&gt; and &lt;strong&gt;Adobe’s Spectrum&lt;/strong&gt; prefer to use &lt;strong&gt;transparency&lt;/strong&gt;, &lt;strong&gt;IBM’s Carbon&lt;/strong&gt; and &lt;strong&gt;GitHub’s Primer&lt;/strong&gt; stick to &lt;strong&gt;solid colors&lt;/strong&gt; instead.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rayzvMdb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2Ag5AS0rtuqpZanF9KhYAxzA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rayzvMdb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2Ag5AS0rtuqpZanF9KhYAxzA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparing the two approaches
&lt;/h2&gt;

&lt;h3&gt;
  
  
  a) Amount of colors
&lt;/h3&gt;

&lt;p&gt;The use of solid shades increase significantly the amount of variables required in a system, and can therefore make it harder to maintain and consume in comparison to the transparency approach.&lt;/p&gt;

&lt;p&gt;In the example below, to define the states of a menu item would require &lt;strong&gt;2 variables using transparency (blue)&lt;/strong&gt; while it would take &lt;strong&gt;8 unique solid colors (pink)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q7qObchP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2AP14d0m-fmqIxe8M3OyoYJg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q7qObchP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2AP14d0m-fmqIxe8M3OyoYJg.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  b) Theme-ability
&lt;/h3&gt;

&lt;p&gt;Directly related to the amount of color variables, &lt;strong&gt;the use of transparency makes it easier to create and apply themes&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;When using solid colors, switching from a light to a dark theme would require the creation of several new color values, while it would only require switching one variable when using transparency, as shown below, since the blending of foreground and background is done automatically by the use of the alpha channel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DzjPf2ev--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2AwZw15_KP_v503htG18VB1g.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DzjPf2ev--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2AwZw15_KP_v503htG18VB1g.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  c) Layering
&lt;/h3&gt;

&lt;p&gt;Like Material Design, many design systems are based on a layered user interfaces. This usually means that ‘deeper’ layers appear darker while the ones close to the surface are shown in lighter colors (or the opposite in some cases).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transparent shades (left) adapt easier&lt;/strong&gt; to different backgrounds, since they keep the contrast between the element and its background mostly consistent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solid colors (right)&lt;/strong&gt;, on the other hand, appear darker or lighter depending on which layer they are placed on top.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U9YMfpOA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2APLowQiLDgKB8-cOMAGPzjg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U9YMfpOA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2APLowQiLDgKB8-cOMAGPzjg.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  d) Accessibility
&lt;/h3&gt;

&lt;p&gt;The contrast between font and background is also affected by which approach you choose, and that has a high impact on the accessibility of the UI.&lt;/p&gt;

&lt;p&gt;Solid shades give higher control by keeping the background stable and is therefore more suitable for that purpose, although good contrast ratios can still be ensured with transparency, for example by limiting the amount and color values of the layers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GwYumekk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2AiJJgH5VMDYX4dzyk-XmWuA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GwYumekk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2800/1%2AiJJgH5VMDYX4dzyk-XmWuA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;While both approaches have their pros and cons, color systems based on transparencies are easier to use, maintain and scale.&lt;/p&gt;

&lt;p&gt;Mature color systems usually offer a mix of both, such as applying solid swatches to containers and transparency to component states and content.&lt;/p&gt;

&lt;p&gt;As mentioned on points c) and d), it is important to keep in mind the contrast ratio between container background, component background and content (especially text), so usability and accessibility are not compromised for the sake of ease of maintainance.&lt;/p&gt;

</description>
      <category>ux</category>
      <category>uiweekly</category>
      <category>design</category>
      <category>ui</category>
    </item>
    <item>
      <title>Design Systems — Designing UI Component APIs</title>
      <dc:creator>Eduardo Ferreira</dc:creator>
      <pubDate>Thu, 29 Apr 2021 08:35:32 +0000</pubDate>
      <link>https://dev.to/eduferfer/design-systems-designing-component-apis-2h94</link>
      <guid>https://dev.to/eduferfer/design-systems-designing-component-apis-2h94</guid>
      <description>&lt;p&gt;Not so long ago, user interfaces for the web were built mostly using standard HTML and CSS. The rise of frameworks such as React, Vue, Angular and Polymer made it possible to &lt;strong&gt;wrap and re-use UI components&lt;/strong&gt; across parts of the same application or even between products.&lt;/p&gt;

&lt;p&gt;Components found their perfect match with &lt;strong&gt;Design Systems&lt;/strong&gt;, and allowed them to evolve from style guides or reference style sheets to full-blown libraries with modular assets containing &lt;strong&gt;Application Programming Interfaces (APIs)&lt;/strong&gt; for setting a component’s appearance, content and behaviour.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Components vs. CSS-Only
&lt;/h2&gt;

&lt;p&gt;Design systems can be implemented as component libraries or CSS-only stylesheets. While both have their pros and cons, in this post I will focus on the component-based approach.&lt;/p&gt;

&lt;p&gt;Among the many advantages of using components over CSS-only libraries, these are the ones I consider the most valuable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Design can be kept consistent&lt;/strong&gt; by only exposing the parts which are supposed to be customised.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Product code becomes easier to read and maintain&lt;/strong&gt; through the encapsulation of logic, styles and markup inside components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conflicting class names and other definitions can be avoided&lt;/strong&gt; since they are isolated inside the component’s scope.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As an example, let us take a look at Material Design’s button implemented both ways. If only label, icon and type are customisable, a component approach only exposes the necessary APIs while a CSS-only approach exposes all the complexity:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AwhbXv83ob-aapk0xKjrKww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AwhbXv83ob-aapk0xKjrKww.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;





&lt;h2&gt;
  
  
  2. Why should designers care?
&lt;/h2&gt;

&lt;p&gt;Since APIs are not visible to the final users, it may not be clear why UX designers should be involved in designing them.&lt;/p&gt;

&lt;p&gt;Components are first assembled by product teams before reaching the final users, and the API is the main interface between a component and product designers or developers consuming it. From this perspective, developers and designers are the first users of a Design System and their experience should be considered as well.&lt;/p&gt;

&lt;p&gt;A well designed API will increase the developer’s experience, reducing the risk that they will implement their own solutions and therefore increasing productivity and enhancing the consistency of the final product.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Factors to consider
&lt;/h2&gt;

&lt;p&gt;When designing a component and its corresponding API, some key factors should be considered to ensure they are easy to consume, consistent with the rest of the system, and easy to scale and maintain in the future.&lt;/p&gt;

&lt;h3&gt;
  
  
  a) Which variations should be offered?
&lt;/h3&gt;

&lt;p&gt;With an overview of all possible use cases, designers can help define which parts of a component should be customisable through the use of &lt;strong&gt;properties&lt;/strong&gt; and which should be kept stable, avoiding unwanted variations and therefore enhancing design consistency.&lt;/p&gt;

&lt;p&gt;On the image below, label and icon are customisable, while icon-color and removable are not designed to be changed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A9qC-utGyDsLrgWJdLN7CgQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A9qC-utGyDsLrgWJdLN7CgQ.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;—&lt;/p&gt;

&lt;h3&gt;
  
  
  b) Which styles should be customisable?
&lt;/h3&gt;

&lt;p&gt;Since consumers do not have access to the encapsulated content, customising styles can only be done through APIs.&lt;/p&gt;

&lt;p&gt;CSS variables can be used for changing single css values (e.g. --border-radius). In case multiple styles should be changed together for a given variation (e.g. alert type changing icon color and font size) a property could be used instead.&lt;/p&gt;

&lt;p&gt;Variables can be defined as a global theme (e.g. --accent-color) and modified for a single component, or new variables can be defined only for a given component (e.g. --footer-padding)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A2DOOveDOZAcgEzmR1f_4lA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2A2DOOveDOZAcgEzmR1f_4lA.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;—&lt;/p&gt;

&lt;h3&gt;
  
  
  c) How will the component evolve in the future?
&lt;/h3&gt;

&lt;p&gt;Components and their APIs evolve over time as new use cases arise. For this reason, they should be &lt;strong&gt;designed for change&lt;/strong&gt;, based on facts or forecasts of how use cases may evolve.&lt;/p&gt;

&lt;p&gt;An API that is not designed with evolution in mind will likely result in &lt;strong&gt;breaking changes&lt;/strong&gt; when new use cases come up.&lt;/p&gt;

&lt;p&gt;On the image below, the &lt;strong&gt;warning&lt;/strong&gt; variation of the dialog could be defined as a warning boolean prop, but if &lt;strong&gt;error&lt;/strong&gt; or &lt;strong&gt;success&lt;/strong&gt; use cases are expected to come up in the future, it could instead be defined as a type="warning" string prop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AOlbA7BUckrFgsl1Xh4F_zg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AOlbA7BUckrFgsl1Xh4F_zg.png"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;—&lt;/p&gt;

&lt;h3&gt;
  
  
  d) Which parts can be isolated?
&lt;/h3&gt;

&lt;p&gt;Complex components are hard to consume. To simplify a component’s API, it is good practice to isolate smaller, reusable elements.&lt;/p&gt;

&lt;p&gt;These elements can be wrapped inside the parent component or manually added by the consumer as child elements, depending on the amount of variation expected (see paragraph about slots below).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AEF0PPIt4KUb-9pk8KJrmtg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AEF0PPIt4KUb-9pk8KJrmtg.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;—&lt;/p&gt;

&lt;h3&gt;
  
  
  e) Where can content be inserted?
&lt;/h3&gt;

&lt;p&gt;Not all functionalities of a component need to be pre-defined and offered through specific APIs.&lt;/p&gt;

&lt;p&gt;For use cases that require more flexibility, consumers should be able to insert custom content inside pre-defined slots (AKA portals, containers or children areas).&lt;/p&gt;

&lt;p&gt;Slots can define how its children elements will appear (e.g. from top to bottom or left to right, with 8px space between them), but the consumers have full control over the style of the inserted elements, since they are not encapsulated.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AOfZEhF7ZIR-WJWWr1NIUFg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn-images-1.medium.com%2Fmax%2F2000%2F1%2AOfZEhF7ZIR-WJWWr1NIUFg.gif"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;





&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;While it is extremely important that components are easy to use for the final users, developers and designers should be considered first-hand users of Design Systems and component libraries, and designing APIs that are easy to consume will significantly improve their experience.&lt;/p&gt;

&lt;p&gt;Designers that understand how components API work can make more meaningful decisions when defining a component, and this will enhance the communication with developers as well.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>html</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Co-designing a Bonsai app with the r/Bonsai community</title>
      <dc:creator>Eduardo Ferreira</dc:creator>
      <pubDate>Fri, 02 Apr 2021 18:33:33 +0000</pubDate>
      <link>https://dev.to/eduferfer/co-designing-a-bonsai-app-with-the-r-bonsai-community-2gi8</link>
      <guid>https://dev.to/eduferfer/co-designing-a-bonsai-app-with-the-r-bonsai-community-2gi8</guid>
      <description>&lt;p&gt;🌐 &lt;a href="https://jooni.app/"&gt;Web App&lt;/a&gt; · 🤖 &lt;a href="https://play.google.com/store/apps/details?id=com.jooni.app"&gt;Play Store&lt;/a&gt; · 🍏 &lt;a href="https://apps.apple.com/ph/app/jooni-bonsai/id1537602737"&gt;App Store&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bonsai can be literally translated as ‘tree planted in a tray’. It is an art form in which practitioners manipulate trees to make them resemble mature specimens but in a miniature form. For shaping the trees, artists perform various types of interventions, which require a considerable amount of knowledge in botany and plant physiology, making bonsai a practice significantly hard to learn.&lt;/p&gt;

&lt;p&gt;In 2020, the COVID-19 lockdown coincided with the beginning of spring in the northern hemisphere, which is the busiest season for bonsai care. As a result, &lt;strong&gt;interest in Bonsai worldwide has almost doubled since March 2020&lt;/strong&gt; according to Google Trends:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bhLVcL9b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AWS1A0ZgqdoWmErWRT8O3-A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bhLVcL9b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AWS1A0ZgqdoWmErWRT8O3-A.png" alt="Google Trends — ‘Bonsai’ interest over time"&gt;&lt;/a&gt;&lt;em&gt;Google Trends — ‘Bonsai’ interest over time&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As I had to spend most of my time at home, I used the opportunity to resume this practice and added some plants to my collection. I quickly realised that in order to track the progress of my trees I had to &lt;strong&gt;document care events in form of notes and pictures&lt;/strong&gt;, and searching for a tool I was surprised that none existed to serve this basic need.&lt;/p&gt;

&lt;p&gt;With the support of another UX designer, a back-end developer and the &lt;a href="https://reddit.com/r/bonsai"&gt;r/Bonsai&lt;/a&gt; community as domain experts, I started working on &lt;a href="https://jooni.app"&gt;Jooni&lt;/a&gt; in June 13, 2020 and the first version of the app was published 8 days after.&lt;/p&gt;

&lt;p&gt;Today the app has &lt;strong&gt;4000+ installs&lt;/strong&gt; on Google’s &lt;a href="https://play.google.com/store/apps/details?id=com.jooni.app"&gt;Play Store&lt;/a&gt; and Apple’s &lt;a href="https://apps.apple.com/ph/app/jooni-bonsai/id1537602737"&gt;App Store&lt;/a&gt;, &lt;strong&gt;1000+ trees&lt;/strong&gt; registered and &lt;strong&gt;429 avg. weekly visitors&lt;/strong&gt;, being the &lt;strong&gt;2nd most popular&lt;/strong&gt; app of its type.&lt;/p&gt;

&lt;p&gt;—&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Bonsai care journey&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u6s7Omzl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3840/1%2AuOTBYPn2qoy-2YddWs2Zgw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u6s7Omzl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3840/1%2AuOTBYPn2qoy-2YddWs2Zgw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From seedling to mature tree, a bonsai specimen can often take &lt;strong&gt;over 20 years of intense care&lt;/strong&gt;. For this reason, it is important that interventions are tracked to monitor progression and help decide what the next steps should be.&lt;/p&gt;

&lt;p&gt;Interventions need to be performed at the right time of the year, and although these rules may vary based on species and location, artists usually follow the schedule shown on the image above.&lt;/p&gt;

&lt;p&gt;—&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Opportunities&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Through online forums and interviews with artists and hobbyists, I have collected opportunities for improving bonsai care through the use of a digital tool. The most valuable findings were:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Communities are key to knowledge sharing among artists&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Plants grow at a very slow rate, and therefore it takes time for an artist to know whether an intervention was successful or not, and for this reason learning solely through own experience is not a very efficient method. As a result, artists often gather in communities such as bonsai clubs or online forums such as Reddit. Jooni should create a strong sense of community and encourage exchange of experiences between artists of all levels.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Beginners are insecure about sharing pictures of their trees&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When beginning in Bonsai, hobbyists are often not confident about sharing pictures of their trees, mostly because they fear criticism from more advanced users. If beginners were more comfortable sharing, they would be able to get guidance at the time they need it the most. To solve this issue, Jooni should make beginners feel safe about sharing their mistakes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Experts often share only the best picture of their trees&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In bonsai exhibitions, books or magazines, experts tend to share only the best pictures of their specimens, and while this can certainly inspire beginners, it will not help them to learn how to achieve that same result with their own trees. To solve this issue, Jooni should encourage experts to share the backstage pictures of their trees.&lt;/p&gt;

&lt;p&gt;—&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;User flow&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5mTYOq2r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3840/1%2AmmDtpNWw3XteCLfCU6M9BQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5mTYOq2r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3840/1%2AmmDtpNWw3XteCLfCU6M9BQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Based on the opportunities identified, the user flow has been defined and served as a basis for designing the user interfaces. It consists of 5 main screens through which the user can navigate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gallery&lt;/strong&gt;: The entry point of the application, contains suggestions of trending trees and allows the user to sort by new or trending entries. On desktop it is shown as a 4 column grid while on mobile it has 1 column only.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Journal&lt;/strong&gt;: Contains an overview of a single specimen, including its thumbnail, name, species, owner, number of likes, comments and list of events.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Event&lt;/strong&gt;: Shows details of a chosen event, mainly its images and notes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Profile&lt;/strong&gt;: Displays all trees posted by a user, the badges earned by her/him, profile picture and other details.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Genus&lt;/strong&gt;: Contains a list of trees belonging to a genus, care guidelines and list of species contained in it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;—&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Releases and feedback loops&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fDRTyT8B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3840/1%2AloLPwbP-f5e2EG8HefZGug.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fDRTyT8B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/3840/1%2AloLPwbP-f5e2EG8HefZGug.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;Reddit&lt;/strong&gt; and &lt;strong&gt;Instagram&lt;/strong&gt; as the main means of communicating with users, we have engaged with the community to provide feedback on newly released and upcoming features, helping us &lt;strong&gt;prioritise our work&lt;/strong&gt; and give us input on their &lt;strong&gt;needs or pain points&lt;/strong&gt;. For more direct input, we set up &lt;strong&gt;video calls&lt;/strong&gt; to talk directly to individual users.&lt;/p&gt;

&lt;p&gt;—&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Solution&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QKiQbW67--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AFN4Nc-emqJHMWA62rgyWIA.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QKiQbW67--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://cdn-images-1.medium.com/max/2000/1%2AFN4Nc-emqJHMWA62rgyWIA.gif" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In an incremental manner, Jooni is continuously evolving based on feedback gathered from the community through social media, forums, app store reviews and data gathered through analytics. Functionalities have been defined to serve the goals and opportunities of the users mentioned before. To highlight some key features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Trees tracked through Jooni are &lt;strong&gt;public by default&lt;/strong&gt;, allowing other users to see and learn from their care history. Trees can be set to private by their owners.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Popular trees uploaded by expert artists are recommended to users so they can &lt;strong&gt;learn best practices&lt;/strong&gt; from experienced peers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users are &lt;strong&gt;awarded badges&lt;/strong&gt; as they complete certain achievements, including positive cases like uploading a popular tree or negative ones such as killing a specimen.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users can &lt;strong&gt;export their progressions&lt;/strong&gt; as images directly to social media such as Instagram, WhatsApp, Reddit or similar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users can &lt;strong&gt;schedule future events&lt;/strong&gt; and get reminded when the date arrives.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users can &lt;strong&gt;set preferences&lt;/strong&gt; such as language (6 in total) and theme (light or dark).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ux</category>
      <category>product</category>
      <category>webdev</category>
      <category>firebase</category>
    </item>
    <item>
      <title>Kor – Building a Design System from scratch</title>
      <dc:creator>Eduardo Ferreira</dc:creator>
      <pubDate>Mon, 22 Feb 2021 14:35:19 +0000</pubDate>
      <link>https://dev.to/eduferfer/kor-building-a-design-system-from-scratch-516n</link>
      <guid>https://dev.to/eduferfer/kor-building-a-design-system-from-scratch-516n</guid>
      <description>&lt;p&gt;&lt;a href="https://kor-ui.com"&gt;🔗 See it live&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In 2020 I planned to spend some of my free time in personal projects for learning new techniques and skills especially related to designing and building digital tools. Having worked on design systems professionally for some years, the logical first step to me was to have a component library that I could reuse across my projects, which would be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lightweight&lt;/strong&gt; by only including the very 'core' components and functionalities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customizable&lt;/strong&gt; for allowing brand expression in different applications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agnostic&lt;/strong&gt; of framework for use on any application stack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Searching for existing solutions out there, I could not find one that would meet all these requirements. Some had too many features I wouldn't need, some did not allow style customization and most of them were based on a specific framework such as React, Vue or Angular.&lt;/p&gt;

&lt;p&gt;I started building &lt;a href="https://kor-ui.com"&gt;Kor&lt;/a&gt; on November 21, 2019 and the first version was published 4 days after. As of today, it has &lt;strong&gt;7,000+ downloads on &lt;a href="https://www.npmjs.com/package/@kor-ui/kor"&gt;npm&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;92 stars on &lt;a href="https://github.com/kor-ui/kor"&gt;GitHub&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;300 monthly &lt;a href="https://kor-ui.com/"&gt;documentation&lt;/a&gt; users&lt;/strong&gt; in average.&lt;/p&gt;




&lt;h2&gt;
  
  
  defining the base rules
&lt;/h2&gt;

&lt;p&gt;Design systems are built on top of principles that are shared across UI components. Having a solid foundation helps ensuring the final solution is coherent and provides a basis for easy customization.&lt;/p&gt;

&lt;h3&gt;
  
  
  dimensions
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nG6z35A8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6us8k5ojkz1le4t6z7kr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nG6z35A8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6us8k5ojkz1le4t6z7kr.gif" alt="dimensions"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Consistent dimensions have a high influence on the perceived harmony of the UI, and the best way to achieve it is by defining a base unit. In the case of Kor, tis unit was defined as &lt;strong&gt;8px&lt;/strong&gt;, a convention followed by most design systems which fits the most common screen resolutions. Usually units are defined as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;8px&lt;/strong&gt;: Space between elements of a component&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;16px&lt;/strong&gt;: Outer component margins&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;24px&lt;/strong&gt;: Size of icons and line height&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In rare cases such as in information-dense user interfaces, the 8px grid can be divided once more, resulting in increments of 4 such as 4, 12 or 20.&lt;/p&gt;

&lt;h3&gt;
  
  
  colors
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m8Vu8mot--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bghrny6i9sgquhudr5ou.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m8Vu8mot--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bghrny6i9sgquhudr5ou.gif" alt="colors"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Colors are used to convey hierarchy, highlight states and draw attention to certain UI components. To reduce complexity and make themes easy to modify, in Kor I have focused on reducing the number of colors to a bare minimum, and a total of 4 categories have been defined:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Base&lt;/strong&gt;: Container backgrounds (such as app bar, cards, page)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Neutral&lt;/strong&gt;: Positive and negative content colors (such as text, divider lines and transparent highlights)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accent&lt;/strong&gt;: Active state highlight and call to action colors&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Functional&lt;/strong&gt;: Confirmation, alert, error and neutral state colors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Default &lt;strong&gt;light&lt;/strong&gt; and &lt;strong&gt;dark&lt;/strong&gt; color schemes were defined and users are encouraged to design new themes by modifying as many color variables as desired.&lt;/p&gt;

&lt;h3&gt;
  
  
  typography
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K4K-L3Pu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tmwef7r9sml9n02tczr6.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K4K-L3Pu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tmwef7r9sml9n02tczr6.gif" alt="typography"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Font styles combine aspects such as typeface, size, line height and color, and are used to convey hierarchy, ensure readability and express brand identity. Keeping the amount of styles concise, 4 font styles have been defined and made customizable through variables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Header 1&lt;/strong&gt;: App bar label and content headings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Header 2&lt;/strong&gt;: Component headings (e.g. tabs, cards)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Body 1&lt;/strong&gt;: Component labels (e.g. tags, checkboxes)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Body 2&lt;/strong&gt;: Component secondary text (e.g. avatar)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  elevation
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wxqTMffY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mlvran9nrxz99pfviu08.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wxqTMffY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mlvran9nrxz99pfviu08.gif" alt="elevation"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Another useful way to keep the UI organized and convey hierarchy of content is through the use of elevations. In Kor comes I have defined 4 layers which are set through the use of colors and shadows.&lt;/p&gt;

&lt;p&gt;The color values for each layer are defined based on the natural effect of light on surfaces, meaning that layers closer to the viewer are brighter than the ones further in both light and dark themes.&lt;/p&gt;

&lt;p&gt;Depending on the visual identity of the app, shadows and colors can be redefined or removed in case a flat appearance is preferred. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Layer 1&lt;/strong&gt;: The background of the page&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 2&lt;/strong&gt;: Side content (panes, nav bars)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 3&lt;/strong&gt;: Content containers (cards, accordions)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Layer 4&lt;/strong&gt;: Overlayed content (notifications, modals)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  iconography
&lt;/h3&gt;

&lt;p&gt;Icons are a very important part of user interfaces and help to create visual rhythm and convey information in a quick way. In Kor I have opted to use the Material Design icons as they are open source, fit the 8px grid and covers most of the common use cases. In addition, users can include their own icon libraries as assets to replace or complement the standard set.&lt;/p&gt;




&lt;h2&gt;
  
  
  building components
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--27tmJh2z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/59w39hu8aqt2k4g2grkw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--27tmJh2z--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/59w39hu8aqt2k4g2grkw.gif" alt="components"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Components are UI units which are generic (can be used in various use cases) and customizable through the use of &lt;strong&gt;properties&lt;/strong&gt;, &lt;strong&gt;slots&lt;/strong&gt; and &lt;strong&gt;events&lt;/strong&gt;. Apps are usually composed of 80% common components such as buttons or inputs and 20% unique ones, such as maps or calendars. In Kor I have focused on the common ones to keep it concise and lightweight.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Properties&lt;/strong&gt; are knobs through which components can be customized (e.g. labels of buttons)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Events&lt;/strong&gt; are triggered by components to the app (e.g. button click)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Slot&lt;/strong&gt; are containers in which custom content can be inserted (e.g. text inside a card)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  a drag &amp;amp; drop sandbox
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q_SbKrga--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hr7285joojmmz2k8rq9p.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q_SbKrga--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hr7285joojmmz2k8rq9p.gif" alt="sandbox"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To help developers who are not so proficient with visual design and designers that are not into coding, I decided to create &lt;a href="https://sandbox.kor-ui.com"&gt;a sandbox&lt;/a&gt; where user interfaces can be created and customized by dragging aand dropping components into a canvas.&lt;/p&gt;

&lt;p&gt;While there are plenty of prototyping tools available, their outcome can usually serve only as a reference for implementation, and most of the needs to be repeated again by the developer, so with this sandbox I experimented with narrowing this gap by generating production-level (or almost) HTML pages in a visual manner.&lt;/p&gt;

&lt;p&gt;This project earned me my very first platinum award 💎 on Reddit, of which I am very proud 😎.&lt;/p&gt;




&lt;h2&gt;
  
  
  documentation, guidance and support
&lt;/h2&gt;

&lt;p&gt;In parallel to designing and developing the design system, I have worked on the main &lt;a href="https://kor-ui.com/"&gt;documentation page&lt;/a&gt; for explaining how to set up, consume and contribute to Kor. The entire web app was made with the component library itself.&lt;/p&gt;

&lt;p&gt;To explain certain features, I have written some posts on &lt;a href="https://dev.to/eduferfer"&gt;dev.to&lt;/a&gt; and &lt;a href="https://medium.com/@eduferfer"&gt;Medium&lt;/a&gt;, which have been published by &lt;strong&gt;UX Planet&lt;/strong&gt;, &lt;strong&gt;JavaScript in Plain English&lt;/strong&gt; and &lt;strong&gt;Level Up Coding&lt;/strong&gt;. Users currently raise feature requests and contribute to Kor directly through GitHub.&lt;/p&gt;

</description>
      <category>ux</category>
      <category>ui</category>
      <category>design</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Kor UI themes #1: Twitch, Github, Spotify</title>
      <dc:creator>Eduardo Ferreira</dc:creator>
      <pubDate>Sat, 03 Oct 2020 12:30:23 +0000</pubDate>
      <link>https://dev.to/eduferfer/kor-ui-themes-1-twitch-github-spotify-2i8e</link>
      <guid>https://dev.to/eduferfer/kor-ui-themes-1-twitch-github-spotify-2i8e</guid>
      <description>&lt;p&gt;In this post we will showcase the three &lt;strong&gt;&lt;a href="https://kor-ui.com/" rel="noopener noreferrer"&gt;Kor UI&lt;/a&gt;&lt;/strong&gt; themes inspired in well-known websites or web apps. We have chosen &lt;strong&gt;Twitch&lt;/strong&gt;, &lt;strong&gt;GitHub&lt;/strong&gt; and &lt;strong&gt;Spotify&lt;/strong&gt; as references because of their harmonious base colors, rich use of accent colors and typography.&lt;/p&gt;

&lt;p&gt;We will cover mainly two aspects of theming: customizing &lt;strong&gt;global variables&lt;/strong&gt; (such as shadows, fonts and colors) and local &lt;strong&gt;component styles&lt;/strong&gt; (such as border radius or tabs size).&lt;/p&gt;




&lt;h2&gt;
  
  
  Theme 1: Twitch
&lt;/h2&gt;

&lt;p&gt;The user interface of Twitch is easily recognisable mainly for its moderate use of purple as an accent color and mostly grayscale base colors with a blue tint. A few component styles had to be set to match those used currently in the app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackblitz.com/edit/kor-ui-theme-twitch" rel="noopener noreferrer"&gt;Link to Stackblitz project&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Key elements of the theme:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Base colors&lt;/strong&gt; were set to blue-ish dark gray tint&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accent color&lt;/strong&gt; was set to a bright purple&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadows&lt;/strong&gt; were removed (except for app and nav bars)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fonts&lt;/strong&gt; were set to the default sans-serif&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tab items&lt;/strong&gt; were set to have accent font color when active or hovered and paddings got removed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inputs&lt;/strong&gt; got their bottom border removed and border radius increased
&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="nt"&gt;html&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*[&lt;/span&gt;&lt;span class="nt"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"dark"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;169&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;112&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;179&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;122&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;159&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;102&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;27&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;16&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;31&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;35&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;44&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;44&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;46&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* outlines */&lt;/span&gt;
  &lt;span class="py"&gt;--shadow-1&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="nt"&gt;html&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* fonts */&lt;/span&gt;
  &lt;span class="py"&gt;--body-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;normal&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24px&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--body-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;normal&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;16px&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24px&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24px&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="c"&gt;/* component styles */&lt;/span&gt;
&lt;span class="nt"&gt;kor-button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;145&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;71&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;155&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;81&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;135&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;61&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;245&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;kor-nav-bar&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;kor-app-bar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--shadow-1&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;1px&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="n"&gt;rgba&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="m"&gt;0&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="m"&gt;.4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;kor-tab-item&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="n"&gt;unset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;unset&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="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;kor-tab-item&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;
&lt;span class="nt"&gt;kor-tab-item&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;active&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--text-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;rgb&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;--accent-1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;kor-input&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="nb"&gt;none&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;4px&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;
  
  
  Theme 2: Github
&lt;/h2&gt;

&lt;p&gt;In the last year, GitHub got a refresh in its UI and the new theme relies heavily on rounded corners and outlined shapes. Accent colors vary from case to case and another unique detail is the fact that the app bar has a mostly dark theme while the rest of the UI is based on a light color scheme.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackblitz.com/edit/kor-ui-theme-github" rel="noopener noreferrer"&gt;Link to Stackblitz project&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Key elements of the theme:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Base color&lt;/strong&gt; of side panels was set to white and page base colors to a lighter shade of gray&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accent color&lt;/strong&gt; was set to a dark shade of green&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadows&lt;/strong&gt; were replaced with thin outlines&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fonts&lt;/strong&gt; were set to the default sans-serif&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;App bar&lt;/strong&gt; theme was set to dark and base color changed to a dark shade of blue&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tab items&lt;/strong&gt; had their active state indicator switched to orange
&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="nt"&gt;html&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="o"&gt;*[&lt;/span&gt;&lt;span class="nt"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"light"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;46&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;164&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;79&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;56&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;174&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;89&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;36&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;154&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;69&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;246&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;248&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;250&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* outlines */&lt;/span&gt;
  &lt;span class="py"&gt;--shadow-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="m"&gt;0px&lt;/span&gt; &lt;span class="n"&gt;rgba&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="m"&gt;0&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="m"&gt;.1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="m"&gt;-1px&lt;/span&gt; &lt;span class="m"&gt;-1px&lt;/span&gt; &lt;span class="m"&gt;0px&lt;/span&gt; &lt;span class="n"&gt;rgba&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="m"&gt;0&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="m"&gt;.1&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;theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"dark"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* access bar */&lt;/span&gt;
  &lt;span class="py"&gt;--base-0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;36&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;41&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;46&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* fonts */&lt;/span&gt;
  &lt;span class="py"&gt;--body-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;normal&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24px&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--body-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;normal&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;16px&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24px&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24px&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="c"&gt;/* component styles */&lt;/span&gt;
&lt;span class="nt"&gt;kor-tab-item&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;249&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;130&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;108&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;
  
  
  Theme 3: Spotify
&lt;/h2&gt;

&lt;p&gt;Spotify’s UI are mostly recognised by the pill-shaped buttons and monochromatic color scheme except for the use of green as the main accent color. The brand typography is also quite unique and recognisable through its circular capitals and wide characters.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stackblitz.com/edit/kor-ui-theme-spotify" rel="noopener noreferrer"&gt;Link to Stackblitz project&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Key elements of the theme:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Base colors&lt;/strong&gt; were slightly adjusted&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accent color&lt;/strong&gt; was set to a dark shade of green&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadows&lt;/strong&gt; were removed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fonts&lt;/strong&gt; were set to ‘Raleway’ (closest open source match to - Spotify’s own ‘Circular’ font)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Buttons&lt;/strong&gt; had their min-width and border-radius increased, while fonts got capitalised&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this post we have covered the basics of how themes can be created using &lt;strong&gt;&lt;a href="https://kor-ui.com/" rel="noopener noreferrer"&gt;Kor UI&lt;/a&gt;&lt;/strong&gt; and we have chosen three popular websites or web apps as examples to showcase how it can be done.&lt;br&gt;
These themes are public and can be used or modified by anybody. If you would like to know more about creating or modifying themes, we recommend checking the following post:&lt;/p&gt;

</description>
      <category>ux</category>
      <category>design</category>
      <category>webdev</category>
      <category>css</category>
    </item>
    <item>
      <title>Design Systems: a glossary for developers &amp; designers</title>
      <dc:creator>Eduardo Ferreira</dc:creator>
      <pubDate>Sun, 27 Sep 2020 19:04:02 +0000</pubDate>
      <link>https://dev.to/eduferfer/design-systems-a-glossary-for-developers-designers-27nh</link>
      <guid>https://dev.to/eduferfer/design-systems-a-glossary-for-developers-designers-27nh</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;👋🏾 Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Design systems are interdisciplinary by nature. They are built and consumed by designers and developers, therefore it is important for common terminologies to exist to support the communication between these two disciplines and other related actors.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: while some of the concepts are explained in a way that is more related to the context of web development, most of them are applicable to other contexts as well.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;📖 Glossary&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this post we will present some key concepts from design and development, explain their meaning in the context of design systems and point to any ambiguity that may exist.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Foundation/Essentials/Principles&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6UnRnP_T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2j7sejx6wg533zhfqsvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6UnRnP_T--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/2j7sejx6wg533zhfqsvw.png" alt=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Example of Material Design foundations&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Every design system is built on top of a set of fundamental rules which are shared across components or other parts. These rules can relate to visual design (e.g. &lt;strong&gt;animation&lt;/strong&gt;, &lt;strong&gt;colors&lt;/strong&gt;, &lt;strong&gt;typography&lt;/strong&gt;) or define more abstract principles such as &lt;strong&gt;brand personality&lt;/strong&gt; or &lt;strong&gt;writing style&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Components&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ShkMdvfD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rqnbzxme3sxckukemyti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ShkMdvfD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rqnbzxme3sxckukemyti.png" alt=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Example of Kor UI button component&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Perhaps the most used term, components are individual units (such as &lt;strong&gt;buttons&lt;/strong&gt;, &lt;strong&gt;inputs&lt;/strong&gt;, &lt;strong&gt;tabs&lt;/strong&gt;) that have defined appearances and interaction paradigms. Components can have different variations and be customized through APIs (Application Programming Interfaces).&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Patterns&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--d5_y8sDG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jk1yggdtxa5n5fboy4k0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--d5_y8sDG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jk1yggdtxa5n5fboy4k0.png" alt=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Example of Carbon Design login pattern&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Patterns define how different components can be combined in a certain way to serve specific user goals that are often repeated across screens or applications. For example, input fields, icons and buttons can be combined in a certain way to serve the goal of signing into an application. Examples of patterns are &lt;strong&gt;forms&lt;/strong&gt;, &lt;strong&gt;navigation&lt;/strong&gt; and &lt;strong&gt;onboarding&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: UX patterns should not be mistaken with ‘design patterns’ in software engineering, which are also common ways of solving problems but specifically related to the context of engineering.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Properties&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q3H7DL-M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kus93wfjswfbvmmf1ks9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q3H7DL-M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/kus93wfjswfbvmmf1ks9.png" alt=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Example of Kor UI card properties&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Components can be modified through the use of properties (or ‘props’, for short). In the example of a button component, the text &lt;strong&gt;label&lt;/strong&gt;, &lt;strong&gt;icon&lt;/strong&gt; and &lt;strong&gt;disabled&lt;/strong&gt; state can all be set through properties and combined to define a variation of that element.&lt;/p&gt;

&lt;p&gt;Properties have types. For example, &lt;code&gt;label&lt;/code&gt; can be set as a &lt;code&gt;string&lt;/code&gt;, allowing any character to be entered, while &lt;code&gt;disabled&lt;/code&gt; has a &lt;code&gt;boolean&lt;/code&gt; type, allowing only true or false as value.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Slots&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6kC9dBFX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yjrvli8sqggq1xb64dx2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6kC9dBFX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yjrvli8sqggq1xb64dx2.png" alt=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Example of Kor UI card slots&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Components can have slots in which content can be inserted. For example, a card can have a &lt;strong&gt;top&lt;/strong&gt; slot for tabs, a &lt;strong&gt;center&lt;/strong&gt; slot for text and a &lt;strong&gt;bottom&lt;/strong&gt; slot for buttons.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Events&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FomQJrPW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4cdskc0hok3kplllp3cz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FomQJrPW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4cdskc0hok3kplllp3cz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Example of Kor UI tag events&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Events are triggered by components in given circumstances. They are used by applications to react to user interactions or changes in the components. In web technologies (HTML), all components fire a set of standard events such as &lt;strong&gt;click&lt;/strong&gt; or &lt;strong&gt;mouseover&lt;/strong&gt;, but components can define their own custom events such as &lt;strong&gt;expanded&lt;/strong&gt;, &lt;strong&gt;collapsed&lt;/strong&gt; or &lt;strong&gt;checked&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Tokens/Variables&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Design tokens or CSS variables are sets of values shared across components. For example, the &lt;strong&gt;body font size&lt;/strong&gt; token can be defined as &lt;code&gt;14px&lt;/code&gt;, or the &lt;strong&gt;accent color&lt;/strong&gt; token set to &lt;code&gt;#51AA51&lt;/code&gt; to reduce repetition and increase the ease of customization.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Classes&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Classes can have two meanings. In CSS, classes are used to &lt;strong&gt;add styles&lt;/strong&gt; on top of the standard ones, and this can be a way of theming design systems.&lt;/p&gt;

&lt;p&gt;On the other hand, in software development classes are objects used for &lt;strong&gt;encapsulating data&lt;/strong&gt; such as the definition of properties and functions. In this sense, components or utilities can be exported as classes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Binding&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When consuming a design system, one of the tasks performed by front-end developers is called binding (or data-binding), which means &lt;strong&gt;linking components to variables&lt;/strong&gt; stored on a database or application.&lt;/p&gt;

&lt;p&gt;Binding can happen from the component to the variable (e.g. editing an input field sets a variable to the value of the input) or from the variable to the component (e.g. the label of a button is a translated string coming from the database). Both types of binding can happen simultaneously, configuring a &lt;strong&gt;two-way data-binding&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Framework&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Applications are usually built on top of frameworks that take care of tasks such as routing, data-binding or translation. For example, when building web apps, frameworks such as &lt;strong&gt;Angular&lt;/strong&gt;, &lt;strong&gt;React&lt;/strong&gt; or &lt;strong&gt;Vue&lt;/strong&gt; are commonly used. While some frameworks can also come with component libraries, they are not intended to replace design systems but rather complement them.&lt;/p&gt;

&lt;p&gt;Frameworks can also be used to build the components themselves, but a component built based on a given framework does not always have to be consumed by that same framework. For example, LitElement, Angular or Vue can generate components that can be consumed by any other.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✔️ &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;While the explanations and terminologies listed in this post are based on the most common practices, you should be aware that they can defer across teams or institutions.&lt;/p&gt;

&lt;p&gt;We hope this information will be useful for you and hope to see you soon in our upcoming posts :)&lt;/p&gt;

</description>
      <category>ux</category>
      <category>design</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building a dev.to clone using Kor UI</title>
      <dc:creator>Eduardo Ferreira</dc:creator>
      <pubDate>Sun, 27 Sep 2020 11:22:52 +0000</pubDate>
      <link>https://dev.to/eduferfer/building-a-dev-to-clone-using-kor-ui-44j8</link>
      <guid>https://dev.to/eduferfer/building-a-dev-to-clone-using-kor-ui-44j8</guid>
      <description>&lt;p&gt;This story is the first on a series where we will clone the front-end of existing websites or web apps to showcase some features of Kor UI and how they can be used to achieve various goals in UI design and development.&lt;/p&gt;




&lt;h2&gt;
  
  
  🗺️ Overview
&lt;/h2&gt;

&lt;p&gt;Dev.to is a website focused on community discussions around topics related to software development. We have chosen the home page as a basis for our project because of its richness of layout and content.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EURoVOKG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/figbmn3tf97auu4dom6n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EURoVOKG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/figbmn3tf97auu4dom6n.png" alt="Left: original; Right: Kor UI clone"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Left: original; Right: Kor UI clone&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In total, &lt;strong&gt;34 Kor components&lt;/strong&gt; have been used, &lt;strong&gt;8 standard HTML elements&lt;/strong&gt; (e.g. div, br) and only &lt;strong&gt;27 CSS rules have been applied&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The technology chosen by us for the project was Angular (with SCSS stylesheets) and the codebase can be found in the &lt;a href="https://stackblitz.com/edit/kor-ui-clone-devto"&gt;Stackblitz project&lt;/a&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  🎨 Part 1: Setting up the theme
&lt;/h2&gt;

&lt;p&gt;The dev.to visual language is already quite close to the default styles of Kor UI, but there are some differences which have been handled through customisation in 3 levels: &lt;strong&gt;colors&lt;/strong&gt;, &lt;strong&gt;fonts&lt;/strong&gt; and &lt;strong&gt;component styles&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this case we have chosen to extend the default &lt;strong&gt;dark theme&lt;/strong&gt; since many styles are shared and wouldn’t need to be defined from scratch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RIchF-Ai--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zoa6hapkjm6oxnhs1vau.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RIchF-Ai--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zoa6hapkjm6oxnhs1vau.png" alt="Left: Standard Kor UI dark theme; Right: Custom theme&amp;lt;br&amp;gt;
Colors"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Left: Standard Kor UI dark theme; Right: Custom theme&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Colors
&lt;/h3&gt;

&lt;p&gt;The most obvious divergence between the default colors and the ones used by dev.to is concerning the blue-ish &lt;strong&gt;base colors&lt;/strong&gt;. The luminosity of both schemes are similar, but the hues have been tweaked to match exactly the intended visual appearance.&lt;/p&gt;

&lt;p&gt;In addition, the main &lt;strong&gt;accent color&lt;/strong&gt; has been tweaked to match the purple tone used in dev.to (see for example on the button or active tab highlights).&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="o"&gt;*[&lt;/span&gt;&lt;span class="nt"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"dark"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* accent colors changed from blue to purple */&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;123&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;133&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;130&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;113&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;110&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;245&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="err"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* base colors changed from dark gray to dark blue tones */&lt;/span&gt;
  &lt;span class="py"&gt;--base-0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;26&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;52&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;13&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;19&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;26&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;29&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;39&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;26&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;38&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;52&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;45&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;45&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;45&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;
  
  
  Fonts
&lt;/h3&gt;

&lt;p&gt;The typographic style in dev.to differs from the default Kor UI theme in 2 main points: &lt;strong&gt;font sizes&lt;/strong&gt; and &lt;strong&gt;font family&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Since fonts are bigger in dev.to, the values of font size have been increased by 2px in all text styles. For example, the main body font has been changed from 14px to 16px.&lt;/p&gt;

&lt;p&gt;The font family has also changed from Open Sans to sans-serif (custom fonts haven’t been loaded for convenience’s sake).&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="o"&gt;*[&lt;/span&gt;&lt;span class="nt"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"dark"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* font sizes and family have been tweaked */&lt;/span&gt;
  &lt;span class="py"&gt;--body-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;normal&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24px&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--body-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;normal&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;16px&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24px&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24px&lt;/span&gt; &lt;span class="nb"&gt;sans-serif&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="nb"&gt;sans-serif&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;
  
  
  Component Styles
&lt;/h3&gt;

&lt;p&gt;A few components had to have their default styles customised to match the design of the ones used in dev.to. Here is a complete list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Primary buttons&lt;/strong&gt; had their font color set to black instead of white.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tabs&lt;/strong&gt; had their bottom border removed and the vertical/horizontal sizes of tab items have been reduced&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Menu items&lt;/strong&gt; had text color changed to purple (accent) when hovered&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tags&lt;/strong&gt; had their border removed and font color changed to a lighter shade
&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;/* standard component style changes */&lt;/span&gt;
&lt;span class="nt"&gt;kor-button&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"primary"&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="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--neutral-2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;kor-tabs&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="n"&gt;unset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="err"&gt;kor-tab-item&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&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="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;min-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;unset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;kor-menu-item&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--text-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;rgb&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;--accent-1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nt"&gt;kor-tag&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="n"&gt;unset&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="err"&gt;&amp;amp;:not(:hover)&lt;/span&gt; &lt;span class="err"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;--text-1&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;--text-2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="err"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  📐 Part 2: Defining the layout
&lt;/h2&gt;

&lt;p&gt;In viewports wider than 1280px, the content of the website becomes centered on the page instead of spanning from edge to edge. For this reason, a horizontal padding has been added to both &lt;code&gt;kor-app-bar&lt;/code&gt; and to the &lt;code&gt;kor-grid&lt;/code&gt; itself.&lt;/p&gt;

&lt;p&gt;Since the homepage of dev.to is based on a 2-dimensional grid, the &lt;code&gt;kor-grid&lt;/code&gt; component has been used and set to have &lt;code&gt;grid-template-columns: 240px 2fr 1fr&lt;/code&gt;, as shown on the image below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ALbswAGu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l4x459faauahmtg5mngp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ALbswAGu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/l4x459faauahmtg5mngp.png" alt="Layout"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🏁 Conclusion
&lt;/h2&gt;

&lt;p&gt;In this post we have showcased the flexibility of Kor UI and how developers and designers can customize themes to achieve unique visual appearance for expressing their brand’s personality.&lt;/p&gt;

&lt;p&gt;Besides showing how color and fonts can be changed, we have seen that individual components can have their appearance modified without compromising their behaviour.&lt;/p&gt;

&lt;p&gt;Furthermore, we have shown how complex layouts can be achieved through minimal settings and the use of components such as the Grid.&lt;/p&gt;

&lt;p&gt;In the next stories of this series we will cover more diverse use cases, including mobile apps. We hope you have found the information useful and hope to see you next time!&lt;/p&gt;

</description>
      <category>css</category>
      <category>html</category>
      <category>webdev</category>
      <category>ux</category>
    </item>
    <item>
      <title>Theming with Kor UI</title>
      <dc:creator>Eduardo Ferreira</dc:creator>
      <pubDate>Wed, 19 Aug 2020 13:02:16 +0000</pubDate>
      <link>https://dev.to/eduferfer/theming-with-kor-ui-2hgl</link>
      <guid>https://dev.to/eduferfer/theming-with-kor-ui-2hgl</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8Dmnq5QX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wu30vxsejjtamnwamzdz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8Dmnq5QX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/wu30vxsejjtamnwamzdz.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Theming web apps is especially useful for 2 purposes: &lt;strong&gt;enhancing brand expression&lt;/strong&gt; and &lt;strong&gt;improving user experience&lt;/strong&gt;. In this guide, I will share some best practices on creating and applying custom themes using &lt;strong&gt;&lt;a href="https://kor-ui.com"&gt;Kor UI&lt;/a&gt;&lt;/strong&gt; to help improve your app in both of these points.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏷️ Enhancing brand expression
&lt;/h2&gt;

&lt;p&gt;For companies developing apps based on an open source design system such as Kor UI, it is important that the visual appearance of UI components expresses the brand identity through elements such as fonts or colors.&lt;/p&gt;

&lt;p&gt;While the re-use of components and patterns reduces the learning curve for users, having a UI that is excessively uniform with those of other similar products can be a missed opportunity for brand expression.&lt;/p&gt;

&lt;h2&gt;
  
  
  ❤️ Improving user experience
&lt;/h2&gt;

&lt;p&gt;Users of web or mobile apps nowadays expect them to allow setting preferred color schemes either automatically (e.g. based on preferred browser or OS theme) or manually (e.g. through user preference settings).&lt;/p&gt;

&lt;p&gt;It is also important to mention that theming is a powerful method of improving accessibility for users with color blindness or other types of visual impairments, or even to improve readability of text for apps being used in places with excessive or low ambient light.&lt;/p&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;🎨 Customizing colors&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;As a starting point to understand how to customize colors, let's take a look into how the default themes are defined, which variables are available: and how they are categorized:&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="o"&gt;*[&lt;/span&gt;&lt;span class="nt"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"dark"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* neutral colors are used mostly for text, icons, and lines */&lt;/span&gt;
  &lt;span class="py"&gt;--neutral-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--neutral-2&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="m"&gt;0&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="c"&gt;/* accent colors are used mostly for indicating active states in components */&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;240&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;70&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;110&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;250&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;230&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* base colors are used in containers and follow a layering approach */&lt;/span&gt;
  &lt;span class="py"&gt;--base-0&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="m"&gt;0&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="py"&gt;--base-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;15&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;35&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;35&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--base-4&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;45&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;45&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;45&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* functional colors are used for indicating status */&lt;/span&gt;
  &lt;span class="py"&gt;--functional-blue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;220&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--functional-red&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;220&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--functional-yellow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;220&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;160&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--functional-green&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;160&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;40&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="c"&gt;/* text colors are used to define the font/icon colors and define hierarchy through opacity */&lt;/span&gt;
  &lt;span class="py"&gt;--text-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&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;--neutral-1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="m"&gt;.90&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="py"&gt;--text-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&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;--neutral-1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="m"&gt;.60&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="py"&gt;--text-3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&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;--neutral-1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="m"&gt;.20&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c"&gt;/* shadow colors are used for the layering of cards, app bar and other containers */&lt;/span&gt;
  &lt;span class="py"&gt;--shadow-1&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;2px&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt; &lt;span class="n"&gt;rgba&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="m"&gt;0&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="m"&gt;.2&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;1px&lt;/span&gt; &lt;span class="m"&gt;4px&lt;/span&gt; &lt;span class="n"&gt;rgba&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="m"&gt;0&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="m"&gt;.15&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;Here are some tips when customizing each of the 6 existing color categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Neutral colors&lt;/strong&gt; should take into consideration the lightness of the theme. If a theme is mostly dark (e.g. dark blue), set &lt;code&gt;--neutral-1&lt;/code&gt; to be white (or another light color) and &lt;code&gt;--neutral-2&lt;/code&gt; to be black (or another dark color).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accent colors&lt;/strong&gt; should convey a call-to-action and therefore have sufficient contrast with the background (base) colors. It is not good practice using colors that could clash with the functional ones (red, green, blue) as this could lead to user error or confusion.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base colors&lt;/strong&gt; are used as the background of containers and by default follow a layered approach, meaning that the deepest layers (&lt;code&gt;--base-1&lt;/code&gt;) are darker than the ones closer to the surface (&lt;code&gt;--base-4&lt;/code&gt;). If your app does not intend to use layering, you can just set all base colors to be the same.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Functional colors&lt;/strong&gt; should convey meaning to the user (e.g. an error has happened) and therefore it is not recommended to change them drastically. Always look for accessibility or safety standards when updating them to avoid for example that users will ignore error messages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Text colors&lt;/strong&gt; should also go from strongest (&lt;code&gt;--text-1&lt;/code&gt;, headline text) to lightest (&lt;code&gt;--text-3&lt;/code&gt;, disabled text).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadow color&lt;/strong&gt; is defined following the &lt;code&gt;box-shadow&lt;/code&gt; definition (&lt;code&gt;offset-x | offset-y | blur-radius | color&lt;/code&gt;). If you would like to use outlines instead of shadows, you can define it as &lt;code&gt;0 0 1px rgba(0, 0, 0, .4)&lt;/code&gt;, for example.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Modifying vs. creating a theme
&lt;/h2&gt;

&lt;p&gt;Kor UI comes with two pre-defined themes ready to be used: &lt;strong&gt;light&lt;/strong&gt; and &lt;strong&gt;dark&lt;/strong&gt;. When creating a new theme you should decide whether you would like to modify these defaults or create another one from scratch.&lt;/p&gt;

&lt;p&gt;If you go for the first approach, you have the option of only modifying a few variables while keeping the others as-is, and if you go for the second you would need to define all of them:&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;/* here, only the accent colors are modified on the default dark theme */&lt;/span&gt;
&lt;span class="o"&gt;*[&lt;/span&gt;&lt;span class="nt"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"dark"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;240&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;110&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;110&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;250&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--accent-1c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;90&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;230&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* while here all the variables have to be defined and a new name has to be given */&lt;/span&gt;
&lt;span class="o"&gt;*[&lt;/span&gt;&lt;span class="nt"&gt;theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"high-contrast"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c"&gt;/* ... */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After a new theme has been created, you can use it just like the default ones:&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;html&lt;/span&gt; &lt;span class="na"&gt;theme=&lt;/span&gt;&lt;span class="s"&gt;"high-contrast"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; ... &lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  &lt;strong&gt;🗛 Customizing fonts&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;The definition of fonts in Kor UI is done on a document level, and two font families can be declared: one for headings (display) and another one for body text.&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="o"&gt;/*&lt;/span&gt; 
&lt;span class="k"&gt;@font-face&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="s2"&gt;'my-body-font'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;src&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url('./assets/fonts/body-font.woff2')&lt;/span&gt; &lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;'woff2'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@font-face&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="s2"&gt;'my-display-font'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;src&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sx"&gt;url('./assets/fonts/display-font.woff2')&lt;/span&gt; &lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;'woff2'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--body-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;normal&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24px&lt;/span&gt; &lt;span class="s2"&gt;'my-body-font'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--body-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;normal&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;16px&lt;/span&gt; &lt;span class="s2"&gt;'my-body-font'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt; &lt;span class="m"&gt;16px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24px&lt;/span&gt; &lt;span class="s2"&gt;'my-display-font'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;--header-2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bold&lt;/span&gt; &lt;span class="m"&gt;14px&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="m"&gt;24px&lt;/span&gt; &lt;span class="s2"&gt;'my-display-font'&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="s2"&gt;'my-body-font'&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The steps to modify the default fonts are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Import font-face&lt;/strong&gt; if you are not using a standard browser or system font. The files should be provided as an asset of you application and imported through css using the &lt;a href="https://www.w3schools.com/cssref/css3_pr_font-face_rule.asp"&gt;&lt;code&gt;@font-face&lt;/code&gt;&lt;/a&gt; rule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update the variables&lt;/strong&gt; to match you newly imported font. The variable is defined following the css &lt;code&gt;font&lt;/code&gt; definition (&lt;code&gt;font-weight | font-size/line-height | font-family&lt;/code&gt;). If you want body and header fonts to be the same, just use the same font family for all four variables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assign the default &lt;code&gt;html&lt;/code&gt; font-family&lt;/strong&gt; to be your newly defined body font.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;In this guide we have covered the basics of customizing themes in Kor UI. Further customization is available by applying css to the components themselves (e.g. modifying the border radius of buttons) to make it fit even more your brand identity.&lt;/p&gt;

&lt;p&gt;In a following post I will share some tips and best practices on applying themes based on user preference, browser presets, persistent theming and so on. I hope you enjoyed my first post and until next time!&lt;/p&gt;

</description>
      <category>design</category>
      <category>ux</category>
      <category>webdev</category>
      <category>css</category>
    </item>
  </channel>
</rss>
