Documentation

Colors & Theme


Finalcss includes a vast, beautiful color palette, carefully crafted and tested for dark mode and accessibility. You are free to add or remove colors from the list by editing 📂 scss/_theme.scss file


Color modes

Default (light) mode is default color of theme because it is assigned to :root element as css variable list
You can also use following classes/attributes for part of page to keep it as light/default mode.
data-theme="light" attribute,
theme-light class name

Dark mode is activated when there is [data-theme=dark] attribute or .theme-dark class names. For ex. class="theme-dark" will override all colors inside the element to make dark.

Dark/Light toggle button adds or removes classname or attribute into html element


Neutral (monochrome) colors:



Example component

Here is a component example. On the left side it is in default mode.
On the right there is class="... theme-dark" class name given to parent div




Color palette:

Each of following color has its dark variant.
Color will be changed to dark variant when parent tag has class name theme-dark or attribute data-theme="dark"



Static colors:

If you don't want colors to be changed on dark theme, then use static color variables of css. just use -static keyword after color name.
For ex: --primary-300-static is always remain #a5b4fc on any theme. --neutral-0-static always white color and it will not affected by changing theme. Because there is no override on theme-dark { ... } color list


If you designed a component using utility classes like bg-neutral-100, border and text-secondary class names, all of them will be changed if parent tag has theme-dark class name. But if you don't want them to be changed, then add theme-static class name to parent element.



How does color system work?

All colors are defined inside the 📂 scss/_theme.scss file.
There are two groups: Default (light) theme colors and Dark theme colors which overrides default/light mode.

The list of colors inside the 📂scss/_theme.scss file is converted into CSS variables. You can find it at the top of final.css or final.min.css

Generated list of CSS variables

All component and utility classes use colors from css variables list

:root, [data-theme=light], .theme-light, [data-theme=static], .theme-static {
  --neutral-0: #fff;
  --neutral-50: #f8fafc;
  --neutral-100: #f1f5f9;
  --neutral-200: #e2e8f0;
  --neutral-300: #cbd5e1;
  --neutral-400: #A3B0C2;
  --neutral-500: #6B7C94;
  --neutral-600: #52637A;
  --neutral-700: #334155;
  --neutral-800: #1e293b;
  --neutral-900: #0f172a;
  --neutral-1000: #000;
  --primary-100: #e0e7ff;
  --primary-200: #c7d2fe;
  --primary-300: #a5b4fc;
  --primary-400: #818cf8;
  --primary-500: #6163fe;
  --primary-600: #4f46e5;
  --primary-700: #4338ca;
  --primary-800: #3730a3;
  --primary-900: #312e81;
  --blue-100: #dbeafe;
  --blue-200: #bfdbfe;
  --blue-300: #93c5fd;
  --blue-400: #60a5fa;
  --blue-500: #3780f6;
  --blue-600: #2563eb;
  --blue-700: #1d4ed8;
  --blue-800: #1e40af;
  --blue-900: #112a6e;
  --red-100: #fee2e2;
  --red-200: #fecaca;
  --red-300: #fca5a5;
  --red-400: #f87171;
  --red-500: #ef3232;
  --red-600: #d11616;
  --red-700: #b91c1c;
  --red-800: #991b1b;
  --red-900: #671010;
  --green-100: #DBFFE1;
  --green-200: #bbf7d0;
  --green-300: #86efac;
  --green-400: #4ade80;
  --green-500: #0dab47;
  --green-600: #0d923e;
  --green-700: #15803d;
  --green-800: #166534;
  --green-900: #0a4321;
  --orange-100: #ffedd5;
  --orange-200: #fed7aa;
  --orange-300: #fdba74;
  --orange-400: #fb923c;
  --orange-500: #f97316;
  --orange-600: #d14f09;
  --orange-700: #b13606;
  --orange-800: #87290a;
  --orange-900: #5e1a04;
  --yellow-100: #fff6a5;
  --yellow-200: #ffed4a;
  --yellow-300: #ffe11e;
  --yellow-400: #fed507;
  --yellow-500: #E5B800;
  --yellow-600: #D6A400;
  --yellow-700: #B88700;
  --yellow-800: #996B00;
  --yellow-900: #855800;
  --purple-100: #f3e8ff;
  --purple-200: #e9d5ff;
  --purple-300: #d8b4fe;
  --purple-400: #c084fc;
  --purple-500: #a855f7;
  --purple-600: #9333ea;
  --purple-700: #7e22ce;
  --purple-800: #6b21a8;
  --purple-900: #3f0b68;
  --teal-100: #ccfbf1;
  --teal-200: #99f6e4;
  --teal-300: #5eead4;
  --teal-400: #2dd4bf;
  --teal-500: #14b8a6;
  --teal-600: #0d9488;
  --teal-700: #0f766e;
  --teal-800: #115e59;
  --teal-900: #0c4844;

  --neutral-0-static: #fff;
  --neutral-50-static: #f8fafc;
  --neutral-100-static: #f1f5f9;
  --neutral-200-static: #e2e8f0;
  --neutral-300-static: #cbd5e1;
  --neutral-400-static: #A3B0C2;
  --neutral-500-static: #6B7C94;
  --neutral-600-static: #52637A;
  --neutral-700-static: #334155;
  --neutral-800-static: #1e293b;
  --neutral-900-static: #0f172a;
  --neutral-1000-static: #000;
  --primary-100-static: #e0e7ff;
  --primary-200-static: #c7d2fe;
  --primary-300-static: #a5b4fc;
  --primary-400-static: #818cf8;
  --primary-500-static: #6163fe;
  --primary-600-static: #4f46e5;
  --primary-700-static: #4338ca;
  --primary-800-static: #3730a3;
  --primary-900-static: #312e81;
  --blue-100-static: #dbeafe;
  --blue-200-static: #bfdbfe;
  --blue-300-static: #93c5fd;
  --blue-400-static: #60a5fa;
  --blue-500-static: #3780f6;
  --blue-600-static: #2563eb;
  --blue-700-static: #1d4ed8;
  --blue-800-static: #1e40af;
  --blue-900-static: #112a6e;
  --red-100-static: #fee2e2;
  --red-200-static: #fecaca;
  --red-300-static: #fca5a5;
  --red-400-static: #f87171;
  --red-500-static: #ef3232;
  --red-600-static: #d11616;
  --red-700-static: #b91c1c;
  --red-800-static: #991b1b;
  --red-900-static: #671010;
  --green-100-static: #DBFFE1;
  --green-200-static: #bbf7d0;
  --green-300-static: #86efac;
  --green-400-static: #4ade80;
  --green-500-static: #0dab47;
  --green-600-static: #0d923e;
  --green-700-static: #15803d;
  --green-800-static: #166534;
  --green-900-static: #0a4321;
  --orange-100-static: #ffedd5;
  --orange-200-static: #fed7aa;
  --orange-300-static: #fdba74;
  --orange-400-static: #fb923c;
  --orange-500-static: #f97316;
  --orange-600-static: #d14f09;
  --orange-700-static: #b13606;
  --orange-800-static: #87290a;
  --orange-900-static: #5e1a04;
  --yellow-100-static: #fff6a5;
  --yellow-200-static: #ffed4a;
  --yellow-300-static: #ffe11e;
  --yellow-400-static: #fed507;
  --yellow-500-static: #E5B800;
  --yellow-600-static: #D6A400;
  --yellow-700-static: #B88700;
  --yellow-800-static: #996B00;
  --yellow-900-static: #855800;
  --purple-100-static: #f3e8ff;
  --purple-200-static: #e9d5ff;
  --purple-300-static: #d8b4fe;
  --purple-400-static: #c084fc;
  --purple-500-static: #a855f7;
  --purple-600-static: #9333ea;
  --purple-700-static: #7e22ce;
  --purple-800-static: #6b21a8;
  --purple-900-static: #3f0b68;
  --teal-100-static: #ccfbf1;
  --teal-200-static: #99f6e4;
  --teal-300-static: #5eead4;
  --teal-400-static: #2dd4bf;
  --teal-500-static: #14b8a6;
  --teal-600-static: #0d9488;
  --teal-700-static: #0f766e;
  --teal-800-static: #115e59;
  --teal-900-static: #0c4844;

  --text-color-neutral: var(--neutral-600);
  --text-color-primary: var(--primary-600);
  --text-color-blue: var(--blue-600);
  --text-color-red: var(--red-600);
  --text-color-green: var(--green-600);
  --text-color-orange: var(--orange-600);
  --text-color-yellow: var(--yellow-600);
  --text-color-purple: var(--purple-600);
  --text-color-teal: var(--teal-600);

  --text-color-base: #000;
  --text-color-secondary: var(--neutral-500);
  --text-color-muted: var(--neutral-400);
  --text-color-invert: #fff;

  --alpha-1: rgba(0,20,60,.06);
  --alpha-2: rgba(0,20,60,.10);
  --alpha-3: rgba(0,20,60,.15);

  --bg-color-base: #fff;
  --bg-color-secondary: var(--neutral-100);
  --bg-color-lower: var(--neutral-100);
  --bg-color-raised: #fff;
  --border-color-default: var(--neutral-200);
  
  color: var(--text-color-base);
  background-color: var(--bg-color-base);
}

Dark mode color variables

[data-theme=dark], .theme-dark {
  --neutral-0: #000;
  --neutral-50: #101010;
  --neutral-100: #171717;
  --neutral-200: #242424;
  --neutral-300: #373737;
  --neutral-400: #555555;
  --neutral-500: #737373;
  --neutral-600: #9c9c9c;
  --neutral-700: #c5c5c5;
  --neutral-800: #dddddd;
  --neutral-900: #eeeeee;
  --neutral-1000: #fff;
  --primary-100: #1e1b4b;
  --primary-200: #312e81;
  --primary-300: #3730a3;
  --primary-400: #4338ca;
  --primary-500: #4f46e5;
  --primary-600: #7487ff;
  --primary-700: #8a9ffc;
  --primary-800: #c7d2fe;
  --primary-900: #e0e7ff;
  --blue-100: #091253;
  --blue-200: #0C186E;
  --blue-300: #1e3a8a;
  --blue-400: #006BD6;
  --blue-500: #3c99f6;
  --blue-600: #61bafa;
  --blue-700: #91d9fd;
  --blue-800: #bee9fe;
  --blue-900: #dcf3fe;
  --red-100: #40071A;
  --red-200: #57051F;
  --red-300: #820627;
  --red-400: #CB0B38;
  --red-500: #DF0C3D;
  --red-600: #F21246;
  --red-700: #FF6680;
  --red-800: #fecaca;
  --red-900: #fee2e2;
  --green-100: #052E0D;
  --green-200: #033A0E;
  --green-300: #025D14;
  --green-400: #009419;
  --green-500: #00A81C;
  --green-600: #00BD1F;
  --green-700: #6DF383;
  --green-800: #bbf7d0;
  --green-900: #dcfce7;
  --orange-100: #401A07;
  --orange-200: #4E2004;
  --orange-300: #662D00;
  --orange-400: #CC6900;
  --orange-500: #E07B00;
  --orange-600: #F58700;
  --orange-700: #FFBB33;
  --orange-800: #fed7aa;
  --orange-900: #ffedd5;
  --yellow-100: #573C05;
  --yellow-200: #795706;
  --yellow-300: #916D08;
  --yellow-400: #B38A05;
  --yellow-500: #CCA300;
  --yellow-600: #DFBC0C;
  --yellow-700: #F5CC00;
  --yellow-800: #FFDD00;
  --yellow-900: #FFED4D;
  --purple-100: #320849;
  --purple-200: #46066B;
  --purple-300: #5A038C;
  --purple-400: #910BE9;
  --purple-500: #9F1FF4;
  --purple-600: #AC3DF5;
  --purple-700: #D799FF;
  --purple-800: #e9d5ff;
  --purple-900: #f3e8ff;
  --teal-100: #052E2B;
  --teal-200: #07403C;
  --teal-300: #0C565A;
  --teal-400: #006e6e;
  --teal-500: #009a9a;
  --teal-600: #15bcbc;
  --teal-700: #66DBD1;
  --teal-800: #99f6e4;
  --teal-900: #ccfbf1;

  --text-color-neutral: var(--neutral-700);
  --text-color-primary: var(--primary-700);
  --text-color-blue: var(--blue-700);
  --text-color-red: var(--red-700);
  --text-color-green: var(--green-700);
  --text-color-orange: var(--orange-700);
  --text-color-yellow: var(--yellow-700);
  --text-color-purple: var(--purple-700);
  --text-color-teal: var(--teal-700);

  --text-color-base: #fff;
  --text-color-secondary: var(--neutral-600);
  --text-color-muted: var(--neutral-400);
  --text-color-invert:#000;

  --alpha-1: rgba(255,255,255,.1);
  --alpha-2: rgba(255,255,255,.15);
  --alpha-3: rgba(255,255,255,.2);

  --bg-color-base: var(--neutral-50);
  --bg-color-secondary: var(--neutral-100);
  --bg-color-lower: #000;
  --bg-color-raised: var(--neutral-200);
  --border-color-default: var(--neutral-200);

  color: var(--text-color-base);
  background-color: var(--bg-color-base);

}

You may have noticed, there are some other css color variables like --alpha-1. That is just transparent variants of dark or light, which can be used for components.

There are also additional variables like --text-color-primary or --bg-color-base. Those are helper variables using theme color. The reason to use them, When you use any color for text in default/light mode, they may look fine. But on dark mode text might not be visible well. Because text should be more lighter on dark mode. That's why it is recommended to use color for text specifically made for text colors