# Tokens

> Part of mCSS (mcss.dev). Rendered page: https://mcss.dev/docs/tokens

| File name             | Source        |
| --------------------- | ------------- |
| `settings.tokens.css` | [Github][src] |

[src]: https://github.com/minimaldesign/mCSS/blob/main/src/styles/framework/settings.tokens.css

**Design tokens** are the "atoms" of a design system. They define the design elements of a user interface, such as colors, typography, and spacing.

In mCSS, tokens are CSS custom properties that provide a flexible, coherent, and harmonious set of values designed to make implementing UI/UX projects fast and easy.

## How to use tokens

When you start a new project, open `settings.tokens.css` and change the values of as many tokens as necessary to match the design you're planning to implement. (Things like spacing might not need to change, but you'll almost certainly need to customize your `base` and `primary` colors for instance.) For deviations you want to keep swappable, put the overrides in a [theme](/docs/themes) instead of editing the defaults.

## Interface tokens

<div class="docs_oversizedTable">

| File name         | Source            |
| ----------------- | ----------------- |
| `settings.ui.css` | [Github][srcUi]   |

</div>

[srcUi]: https://github.com/minimaldesign/mCSS/blob/main/src/styles/framework/settings.ui.css

Interface tokens offer an additional layer of abstraction over the raw tokens. They only ever take another token for value and standardize UI decisions in logical groups: semantic aliases like `--ui-border-color` (with a value of `--base-200`) or `--success-*`, plus every component's token defaults (`--bt-*`, `--card-*`, ...). This gives tokens meaning and context, which makes them more intuitive to use, and it's what makes [themes](/docs/themes) powerful: override one interface token and every rule that consumes it follows.

`elements.*` and `global.*` files tend to use interface tokens, while `component.*` files mix them with low level tokens. There are no hard and fast rules about the type of token you should use in your custom component. Just try to think where else this style is used in the design and if it comes up in many places with the same context, a new interface token is probably the best option.

## Color

Check out [tints.dev](https://www.tints.dev) if you want to make your own palettes programmatically.

<div class="grid" col="1" col-lg="2">
  <div class="grid_item">
  ### Base

| Token      | Value   | Demo                                      |
| ---------- | ------- | ----------------------------------------- |
| `base-0`   | #fff    | <div class="docs_box bgc-base-0"></div>   |
| `base-50`  | #f6f7f9 | <div class="docs_box bgc-base-50"></div>  |
| `base-100` | #edeef1 | <div class="docs_box bgc-base-100"></div> |
| `base-200` | #d6dbe1 | <div class="docs_box bgc-base-200"></div> |
| `base-300` | #b2bbc7 | <div class="docs_box bgc-base-300"></div> |
| `base-400` | #8897a8 | <div class="docs_box bgc-base-400"></div> |
| `base-500` | #697a8e | <div class="docs_box bgc-base-500"></div> |
| `base-600` | #546375 | <div class="docs_box bgc-base-600"></div> |
| `base-700` | #4a5666 | <div class="docs_box bgc-base-700"></div> |
| `base-800` | #3c4550 | <div class="docs_box bgc-base-800"></div> |
| `base-900` | #353c45 | <div class="docs_box bgc-base-900"></div> |
| `base-950` | #23282e | <div class="docs_box bgc-base-950"></div> |

  </div>
  <div class="grid_item">
  ### Primary

| Token         | Value   | Demo                                         |
| ------------- | ------- | -------------------------------------------- |
| `primary-50`  | #f0f9ff | <div class="docs_box bgc-primary-50"></div>  |
| `primary-100` | #e0f2fe | <div class="docs_box bgc-primary-100"></div> |
| `primary-200` | #bae6fd | <div class="docs_box bgc-primary-200"></div> |
| `primary-300` | #7dd3fc | <div class="docs_box bgc-primary-300"></div> |
| `primary-400` | #38bdf8 | <div class="docs_box bgc-primary-400"></div> |
| `primary-500` | #0ea5e9 | <div class="docs_box bgc-primary-500"></div> |
| `primary-600` | #0284c7 | <div class="docs_box bgc-primary-600"></div> |
| `primary-700` | #0369a1 | <div class="docs_box bgc-primary-700"></div> |
| `primary-800` | #075985 | <div class="docs_box bgc-primary-800"></div> |
| `primary-900` | #0c4a6e | <div class="docs_box bgc-primary-900"></div> |
| `primary-950` | #082f49 | <div class="docs_box bgc-primary-950"></div> |

  </div>
  <div class="grid_item">
  ### Feedback

| Token       | Value   | Demo                                       |
| ----------- | ------- | ------------------------------------------ |
| `yes-100`   | #d5f6e8 | <div class="docs_box bgc-yes-100"></div>   |
| `yes-200`   | #afebd4 | <div class="docs_box bgc-yes-200"></div>   |
| `yes-300`   | #7adbbd | <div class="docs_box bgc-yes-300"></div>   |
| `yes-400`   | #46c4a0 | <div class="docs_box bgc-yes-400"></div>   |
| `yes-500`   | #13886d | <div class="docs_box bgc-yes-500"></div>   |
| `no-100`    | #ffe4e6 | <div class="docs_box bgc-no-100"></div>    |
| `no-200`    | #fecdd3 | <div class="docs_box bgc-no-200"></div>    |
| `no-300`    | #fda4af | <div class="docs_box bgc-no-300"></div>    |
| `no-400`    | #fb7185 | <div class="docs_box bgc-no-400"></div>    |
| `no-500`    | #e11d48 | <div class="docs_box bgc-no-500"></div>    |
| `maybe-100` | #fff7d6 | <div class="docs_box bgc-maybe-100"></div> |
| `maybe-200` | #fff0b3 | <div class="docs_box bgc-maybe-200"></div> |
| `maybe-300` | #ffd64a | <div class="docs_box bgc-maybe-300"></div> |
| `maybe-400` | #ffc220 | <div class="docs_box bgc-maybe-400"></div> |
| `maybe-500` | #f9a007 | <div class="docs_box bgc-maybe-500"></div> |

  </div>
</div>

## Dimension

Dimension tokens can be used anywhere you need to set `margin`, `padding`, `width`, `height`, etc.

<div class="docs_oversizedTable">

| Token   | Value | Demo                                 |
| ------- | ----- | ------------------------------------ |
| `xs1`   | 4px   | <div class="docs_box w-xs1"></div>   |
| `xs2`   | 8px   | <div class="docs_box w-xs2"></div>   |
| `xs3`   | 12px  | <div class="docs_box w-xs3"></div>   |
| `sm1`   | 16px  | <div class="docs_box w-sm1"></div>   |
| `sm2`   | 20px  | <div class="docs_box w-sm2"></div>   |
| `sm3`   | 24px  | <div class="docs_box w-sm3"></div>   |
| `md1`   | 28px  | <div class="docs_box w-md1"></div>   |
| `md2`   | 32px  | <div class="docs_box w-md2"></div>   |
| `md3`   | 36px  | <div class="docs_box w-md3"></div>   |
| `lg1`   | 40px  | <div class="docs_box w-lg1"></div>   |
| `lg2`   | 44px  | <div class="docs_box w-lg2"></div>   |
| `lg3`   | 48px  | <div class="docs_box w-lg3"></div>   |
| `xl1`   | 56px  | <div class="docs_box w-xl1"></div>   |
| `xl2`   | 64px  | <div class="docs_box w-xl2"></div>   |
| `xl3`   | 80px  | <div class="docs_box w-xl3"></div>   |
| `xxl1`  | 96px  | <div class="docs_box w-xxl1"></div>  |
| `xxl2`  | 112px | <div class="docs_box w-xxl2"></div>  |
| `xxl3`  | 128px | <div class="docs_box w-xxl3"></div>  |
| `mega1` | 160px | <div class="docs_box w-mega1"></div> |
| `mega2` | 192px | <div class="docs_box w-mega2"></div> |
| `mega3` | 224px | <div class="docs_box w-mega3"></div> |
| `giga1` | 256px | <div class="docs_box w-giga1"></div> |
| `giga2` | 288px | <div class="docs_box w-giga2"></div> |
| `giga3` | 320px | <div class="docs_box w-giga3"></div> |
| `tera1` | 384px | <div class="docs_box w-tera1"></div> |
| `tera2` | 480px | <div class="docs_box w-tera2"></div> |
| `tera3` | 520px | <div class="docs_box w-tera3"></div> |

</div>

## Aspect ratio

| Token           | Value   | Demo                                       |
| --------------- | ------- | ------------------------------------------ |
| `ar-square`     | 1       | <div class="docs_box ar-square"></div>     |
| `ar-landscape`  | 4/3     | <div class="docs_box ar-landscape"></div>  |
| `ar-portrait`   | 3/4     | <div class="docs_box ar-portrait"></div>   |
| `ar-widescreen` | 16/9    | <div class="docs_box ar-widescreen"></div> |
| `ar-golden`     | 1.618/1 | <div class="docs_box ar-golden"></div>     |

## Typography

### Font stack

There are 3 font stacks set up by default for the `font-family` CSS Property.

| Token       | Value                                                                                                                                                           |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `text`      | ui-sans-serif, system-ui, sans-serif                                                                                                                            |
| `display`   | Avenir, Montserrat, Corbel, URW Gothic, source-sans-pro, ui-sans-serif, sans-serif                                                                              |
| `monospace` | Dank Mono, Inconsolata, Fira Mono, SF Mono, Monaco, Droid Sans Mono, Source Code Pro, Cascadia Code, Menlo, Consolas, DejaVu Sans Mono, ui-monospace, monospace |

These stacks are optimized for fonts available on device, to maximize for speed and alleviate any layout shifts or flashes. You can find more stacks at [Modern Font Stacks](https://modernfontstacks.com).

If you'd like to bring in your own fonts or [Google fonts](https://fonts.google.com), you can override the `display` and `text` tokens inside your theme file.

<Notice type="info" title="Note" class="mb-sm3">
  In case you're curious, `ui-sans-serif` is the system default, `sans-serif` is
  the browser default, and `system-ui` is the system default, wether serif or
  sans-serif.
</Notice>

### Font size

Check out [typescale.com ](https://typescale.com) if you need help creating your own sizes.

<div class="docs_oversizedTable">

| Token          | Value    | Demo                                           |
| -------------- | -------- | ---------------------------------------------- |
| `text-xs`      | 0.694rem | <div class="text-xs">Sample demo text</div>    |
| `text-sm`      | 0.833rem | <div class="text-sm">Sample demo text</div>    |
| `text-md`      | 1rem     | <div class="text-md">Sample demo text</div>    |
| `text-lg`      | 1.2rem   | <div class="text-lg">Sample demo text</div>    |
| `text-xl`      | 1.44rem  | <div class="text-xl">Sample demo text</div>    |
| `display-sm`   | 1.728rem | <div class="display-sm">Sample demo text</div> |
| `display-md`   | 2.074rem | <div class="display-md">Sample demo text</div> |
| `display-lg`   | 2.488rem | <div class="display-lg">Sample demo text</div> |
| `display-xl`   | 2.986rem | <div class="display-xl">Sample demo text</div> |
| `display-mega` | 3.583rem | <div class="display-mega">Demo text</div>      |
| `display-giga` | 4.299rem | <div class="display-giga">Demo text</div>      |

</div>

### Heading sizes

Headings use dedicated fluid tokens: each `--heading-*` interpolates with `clamp()` from a minimum size (at 480px viewports and below) to a maximum size (from 1024px up), so the type scale tightens on small screens without media queries. The preferred value mixes `rem` with `vw`, which keeps browser text zoom working. Override any of these in your own theme to change how a heading level scales.

<div class="docs_oversizedTable">

| Token       | Min (≤480px)         | Max (≥1024px)           |
| ----------- | -------------------- | ----------------------- |
| `heading-1` | `text-xl` (1.44rem)  | `display-md` (2.074rem) |
| `heading-2` | `text-lg` (1.2rem)   | `display-sm` (1.728rem) |
| `heading-3` | `text-lg` (1.2rem)   | `text-xl` (1.44rem)     |
| `heading-4` | `text-md` (1rem)     | `text-lg` (1.2rem)      |
| `heading-5` | `text-md` (1rem)     | `text-md` (static)      |
| `heading-6` | `text-md` (1rem)     | `text-md` (static)      |

</div>

### Font weight

| Token         | Value | Demo                                            |
| ------------- | ----- | ----------------------------------------------- |
| `extra-light` | 200   | <div class="font-extra-light">Sample demo text</div> |
| `light`       | 300   | <div class="font-light">Sample demo text</div>       |
| `book`        | 400   | <div class="font-book">Sample demo text</div>        |
| `semi-bold`   | 600   | <div class="font-semi-bold">Sample demo text</div>   |
| `bold`        | 700   | <div class="font-bold">Sample demo text</div>        |
| `black`       | 900   | <div class="font-black">Sample demo text</div>       |

### Letter spacing

| Token          | Value   | Demo                                             |
| -------------- | ------- | ------------------------------------------------ |
| `tracking-sm`  | -0.05em | <div class="tracking-sm">Sample demo text</div>  |
| `tracking-md`  | 0.025em | <div class="tracking-md">Sample demo text</div>  |
| `tracking-lg`  | 0.05em  | <div class="tracking-lg">Sample demo text</div>  |
| `tracking-xl`  | 0.075em | <div class="tracking-xl">Sample demo text</div>  |
| `tracking-xxl` | 0.15em  | <div class="tracking-xxl">Sample demo text</div> |

### Line height

| Token         | Value | Demo                                                                |
| ------------- | ----- | ------------------------------------------------------------------- |
| `leading-xs`  | 1     | <div class="docs_lineHeightDemo leading-xs">Sample demo text</div>  |
| `leading-sm`  | 1.15  | <div class="docs_lineHeightDemo leading-sm">Sample demo text</div>  |
| `leading-md`  | 1.375 | <div class="docs_lineHeightDemo leading-md">Sample demo text</div>  |
| `leading-lg`  | 1.5   | <div class="docs_lineHeightDemo leading-lg">Sample demo text</div>  |
| `leading-xl`  | 1.75  | <div class="docs_lineHeightDemo leading-xl">Sample demo text</div>  |
| `leading-xxl` | 2     | <div class="docs_lineHeightDemo leading-xxl">Sample demo text</div> |

## Borders

  <div class="grid" col="1" col-lg="2">
    <div class="grid_item docs_radius">

### Border radius

| Token          | Value | Demo        |
| -------------- | ----- | ----------- |
| `radius-sm`    | 3px   | <div></div> |
| `radius-md`    | 5px   | <div></div> |
| `radius-lg`    | 8px   | <div></div> |
| `radius-xl`    | 12px  | <div></div> |
| `radius-xxl`   | 16px  | <div></div> |
| `radius-round` | 1e5px | <div></div> |

    </div>
    <div class="grid_item docs_border">

      ### Border width

| Token        | Value | Demo        |
| ------------ | ----- | ----------- |
| `border-sm`  | 1px   | <div></div> |
| `border-md`  | 2px   | <div></div> |
| `border-lg`  | 4px   | <div></div> |
| `border-xl`  | 8px   | <div></div> |
| `border-xxl` | 12px  | <div></div> |

    </div>

  </div>

## Drop Shadow

It wouldn't be super useful to list the values here. You can look at them [on Github][githubShadows] if you're curious.

[githubShadows]: https://github.com/minimaldesign/mCSS/blob/main/src/styles/framework/settings.tokens.css#L217

  <div class="docs_shadow">

| Token        | Demo        |
| ------------ | ----------- |
| `shadow-sm`  | <div></div> |
| `shadow-md`  | <div></div> |
| `shadow-lg`  | <div></div> |
| `shadow-xl`  | <div></div> |
| `shadow-xxl` | <div></div> |

  </div>

## Opacity

| Token | Value | Demo                                     |
| ----- | ----- | ---------------------------------------- |
| `o-0` | 0     | <span class="o-0">Opacity level 0</span> |
| `o-1` | 0.2   | <span class="o-1">Opacity level 1</span> |
| `o-2` | 0.4   | <span class="o-2">Opacity level 2</span> |
| `o-3` | 0.6   | <span class="o-3">Opacity level 3</span> |
| `o-4` | 0.8   | <span class="o-4">Opacity level 4</span> |
| `o-5` | 1     | <span class="o-5">Opacity level 5</span> |

## Z-index

| Token      | Value       |
| ---------- | ----------- |
| `z-bottom` | -1000000000 |
| `z-0`      | 0           |
| `z-1`      | 10          |
| `z-2`      | 20          |
| `z-3`      | 30          |
| `z-4`      | 40          |
| `z-5`      | 50          |
| `z-top`    | 1000000000  |

## Transition

| Token             | Value             |
| ----------------- | ----------------- |
| `transition`      | 220ms ease-in-out |
| `transition-fast` | 100ms ease-in-out |
