## Getting started

You can get started using mini.css in one of many ways. It is published on npm and yarn, so you can easily download it, using your preferred package manager:

    npm install mini.css

    yarn add mini.css

Alternatively, you can use either rawgit or cdnjs to import mini.css into your HTML page's `<head>` tag:

    <link rel="stylesheet" href="https://cdn.rawgit.com/Chalarangelo/mini.css/v3.0.1/dist/mini-default.min.css">

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mini.css/3.0.1/mini-default.min.css">

After adding mini.css to your project, remember to also add the following line inside your HTML page's `<head>` tag to utilize the viewport meta tag:

    <meta name="viewport" content="width=device-width, initial-scale=1">

mini.css is crafted with long-term support in mind, so expect it to be compatible with all modern browsers, as well as their future versions. However, most legacy and proxy browsers, such as Internet Explorer, Opera Mini, IE Mobile and UC Browser are not officially supported, meaning certain features may not be displayed properly or behave exactly as expected.

### Edge15

### Firefox35

### Chrome49

### Safari9.1

### Opera36

### Android56

Browser versions officially supported

## Common textual elements

mini.css utilizes the ruleset of Normalize.css v7.0.0 to reliably deal with inconsistencies between browsers, while applying some tasteful defaults on top, such as using native font stack to figure out the best font for each device, setting the background and foreground colors, as well as the size of the text to `16px` and its line height to `1.5`.

All of the most common HTML5 elements, such as paragraphs, links, bold, small and slanted text, have been styled by default using clean, modern typography to make your pages look cool and stand out from the rest of the internet.

### Example

This is a paragraph with some sample text. Did you know that the latest version of mini.css is codenamed Gluon? Well, now you do!

Remember that mini.css is totally free, no fine print involved!

### Sample code

    <p>This is a paragraph. with some <strong>bold text</strong> and some <em>italics text</em>.</p>
    <a href="#">This is a link.</a>
    <small>This is some small text.</small>
    <sub>Subscript</sub>
    <sup>Superscript</sup>
    <hr/>

### Best practices

    /* Do not do this (use Sass instead) */
    html {
      font-size: 14px;
    }

Don't: Avoid altering the base font size of `16px` directly in your CSS code, as it can cause problems with the display of certain elements.

### Customization

- Text color can be changed globally by changing the value of the `--fore-color` variable.
- Background color can be changed globally by changing the value of the `--back-color` variable.
- Border color can be changed globally by changing the value of the `--border-color` variable. This affects the color of `<hr>` elements.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.
- You can change the color of links by changing the values of the `--a-link-color` and `--a-visited-color` variables.

## Headings

All of the HTML5 heading elements are styled, using a customizable ratio and simple rules, providing a clean base for your web app's titles. Apart from the headings themselves, customized rules are provided for displaying subheadings or explanatory text below your web app's headings.

### Example

# Heading 1Subheading

## Heading 2Subheading

### Heading 3Subheading

#### Heading 4Subheading

##### Heading 5Subheading

###### Heading 6Subheading

### Sample code

    <h1>Heading 1 <small>Subheading</small></h1>
    <h2>Heading 2 <small>Subheading</small></h2>
    <h3>Heading 3 <small>Subheading</small></h3>
    <h4>Heading 4 <small>Subheading</small></h4>
    <h5>Heading 5 <small>Subheading</small></h5>
    <h6>Heading 6 <small>Subheading</small></h6>

### Customization

- Text color can be changed globally by changing the value of the `--fore-color` variable. This will affect the color of the headings' main text.
- Secondary text color can be changed globally by changing the value of the `--secondary-fore-color` variable. This will affect the color of subheadings.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- You can change the ratio of headings' size by chaning the value of the `--heading-ratio` variable. Bear in mind that the value of this variable must be unitless to work properly.

## Images & captions

Image elements are responsive by default, automatically scaling down as necessary to display properly on smaller devices. Images retain their original aspect ratio and they will never scale above their original size.

If you want to add captions to images, you can use HTML5 figure elements, along with their related captions.

### Example

Image caption

### Sample code

    <img src="image.png" alt="Image description"/>

    <figure>
      <img src="image.png" alt="Image description"/>
      <figcaption>Image caption</figcaption>
    </figure>

### Notes

- While not mandatory, it is considered a good practice to always add a `alt` attribute to image elements on your web apps.

### Customization

- You can change the text color of `<figcaption>` elements by changing the value of the `--secondary-fore-color` variable.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.

## Lists

List elements, both unordered and ordered, are minimally styled to match with the rest of the framework's aesthetics. Their margins and padding are reset to properly align with the rest of the common HTML5 elements, providing a stable foundation for all of your web app's lists.

### Example

- Apple
- Orange
- Strawberry

1. Wake up
2. Eat breakfast
3. Go to work

### Sample code

    <ul>
      <li>Apple</li>
      <li>Orange</li>
      <li>Strawberry</li>
    </ul>
    <ol>
      <li>Wake up</li>
      <li>Eat breakfast</li>
      <li>Go to work</li>
    </ol>

### Customization

- Text color can be changed globally by changing the value of the `--fore-color` variable.
- Background color can be changed globally by changing the value of the `--back-color` variable.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.

## Code & quotations

Code blocks and quotation elements are styled using custom rules that help make them stand out from the rest of the text, while inline code and keyboard input tags are minimally styled, aiming not to break the flow of regular text.

### Example

This is some text with some inline `source code` and some keyboard `input`.

    function sum(num1, num2){
      return num1 + num2;
    }

> This is some text quoted from elsewhere.

### Sample code

    <p>This is some text with some inline <code>source code</code> and some keyboard <kbd>input</kbd>.</p>
    <pre>function sum(num1, num2){
      return num1 + num2;
    }</pre>
    <blockquote cite="www.quotation.source">This is some text quoted from elsewhere.</blockquote>

### Notes

- The `cite` attribute of `<blockquote>` elements is not mandatory and can be omitted. The element's sizing will be automatically adjusted according to the presence of the `cite` attribute.

### Customization

- Text color can be changed globally by changing the value of the `--fore-color` variable. This will affect the text color of `<code>` and `<pre>` elements and background color of `<kbd>` elements.
- Background color can be changed globally by changing the value of the `--back-color` variable. This will affect the background color of `<blockquote>` elements and text color of `<kbd>`.
- You can change the background color of `<code>` and `<pre>` elements by changing the value of the `--secondary-back-color` variable.
- You can change the text color of `<blockquote>` elements by changing the value of the `--secondary-fore-color` variable.
- You can change the border color of `<pre>` and `<blockquote>` elements by changing the value of the `--secondary-border-color` variable.
- You can change the border color of the left border of `<pre>` elements by changing the value of the `--pre-color` variable.
- You can change the border color of the left border of `<blockquote>` elements by changing the value of the `--blockquote-color` variable.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.
- Universal border radius for elements can be changed globally by changing the value of the `--universal-border-radius` variable.

## Grid system

The grid system of mini.css utilizes the Flexbox layout to provide you with a simple, modern, responsive layout system for your web apps. Like most modern CSS frameworks' grid systems, it is composed of three main components - containers, rows and columns:

- The container (`.container`) is the outermost layer of the grid system and serves as a fluid wrapper, which can be used as the basis for your layout.
- Inside the container, you can add one or more rows (`.row`), which will in turn house the columns.
- Columns (`col-*-*`) are placed inside rows and they can be customized to display differently on different screen sizes, make use of fluid layouts, use offsets or change ordering.

### Example

1
11
2
10
3
9
4
8
5
7
6
6
12
fluid
fluid

### Sample code

    <div class="container">
      <div class="row">
        <div class="col-sm-1"></div>  <div class="col-sm-11"></div>
      </div>
      <div class="row">
        <div class="col-sm-2"></div>  <div class="col-sm-10"></div>
      </div>
      <div class="row">
        <div class="col-sm-3"></div>  <div class="col-sm-9"></div>
      </div>
      <div class="row">
        <div class="col-sm-4"></div>  <div class="col-sm-8"></div>
      </div>
      <div class="row">
        <div class="col-sm-5"></div>  <div class="col-sm-7"></div>
      </div>
      <div class="row">
        <div class="col-sm-6"></div>  <div class="col-sm-6"></div>
      </div>
      <div class="row">
        <div class="col-sm-12"></div>
      <div class="row">
        <div class="col-sm"></div>  <div class="col-sm"></div>
      </div>
    </div>

You can use the grid system to create a responsive media object in one of many ways. Below is a simple example of a two-column media object with an image and some text:

    <div class="row">
      <div class="col-sm-2">
        <img src="image.png" alt="Image description"/>
      </div>
      <div class="col-sm">
        <h2>Media object heading</h2>
        <p>Media object content...</p>
      </div>
    </div>

### Modifiers

#### Screen sizes and width

Each column class is defined by specifying a screen size (small - `sm`, medium - `md` or large - `lg`) and a column width (a value between `1` and `12` or you can omit it for a fluid column), separated by dashes (e.g. `.col-sm-6` for a 6-wide column on a small screen). Using these you can apply different layouts for different screen sizes, by altering the width of columns, using multiple classes. Note that column widths are applied recursively, meaning that if you do not specify a width for a specific screen size the column will use the width applied for the previous largest screen size.

##### Example

###### Small screen layout

sm-12
sm-12 md-8
sm-12 md-4
sm-12

###### Medium/Large screen layout

sm-12
sm-12 md-8
sm-12 md-4
sm-12

##### Sample code

    <div class="container">
      <div class="row">
        <div class="col-sm-12 col-md-3 col-lg-2"></div>
        <div class="col-sm-12 col-md-5 col-lg-7"></div>
        <div class="col-sm-12 col-md-4 col-lg-3"></div>
      </div>
      <div class="row">
        <div class="col-sm col-lg-10"></div>
        <div class="col-sm-4 col-md"></div>
      </div>
    </div>

#### Predefined layouts

Rows can be modified to apply predefined layouts to the columns inside them, effectively reducing the amount of work required for simple layouts. To create a predefined layout, you can add a class to a row (`.cols-*-*`), specifying a screen size and width for the columns inside it (or omitting the width for fluid columns), similarly to the way columns are defined (e.g. `.row.cols-sm-6` will cause all elements inside the row to be 6-wide on a small screen). Columns inside a predefined layout do not require any further classes to display and, much like normal column layouts, their widths are applied recursively.

##### Sample code

    <div class="row cols-sm-6">
      <div>
        <p>This paragraph is inside a 6-wide column.</p>
      </div>
      <div>
        <p>This paragraph is inside a 6-wide column.</p>
      </div>
    </div>

#### Column offsets

Columns can be moved to the right, by applying offset classes (`.col-*-offset-*`), defining a screen size and an offset (a value between `0` and `11`, e.g. `.col-sm-offset-3` will move a column 25% to the right on a small screen). Like all other column modifiers, offsets are applied recursively.

##### Example

11
10
9
8
7
6
5
4
3
2
1
0

##### Sample code

    <div class="row">
      <div class="col-sm-8 col-sm-offset-2 col-md-offset-1 col-lg-offset-0"></div></div>
    <div class="row">
      <div class="col-sm col-sm-offset-3 col-md-offset-4 col-lg-offset-0"></div>
    </div>
    <div class="row">
      <div class="col-sm-4 col-md-offset-5"></div>
    </div>

#### Column reordering

Columns can be reordered on different screen sizes, by applying a reordering class (`.col-*-*`), defining a screen size and the order (first, normal or last, e.g. `.col-sm-last` will move a column to the end of its row on a small screen). Like all other column modifiers, reordering is applied recursively.

##### Example

###### Small screen layout

md-last
md-first

###### Medium/Large screen layout

md-first
md-last

##### Sample code

    <div class="row">
      <div class="col-sm col-md-last col-lg-normal"></div>
      <div class="col-sm col-sm-first col-md-last"></div>
      <div class="col-sm col-md-first col-lg-normal"></div>
    </div>

### Best practices

    <div class="col-sm-3">
      <div class="container"></div>
    </div>
    <div class="col-sm-3">
      <div class="row"></div>
    </div>
    <div class="col-sm-3 row">
      <div class="col-sm-6"></div>  <div class="col-sm-6"></div>
    </div>

Do: A column can contain a container or a row inside it, or even be a row at the same time. In the latter case, it will act as a column for its parent row and as a row for its children.

    <div class="row">
      <div class="col-sm-12"></div>
      <div class="col-sm"></div>  <div class="col-sm-4"></div>
    </div>

Do: You can mix fluid columns with fixed, if you like. Fluid columns will adapt to the size of the container left for them. You can also use columns whose total width exceeds `12` (100%). The remaining content will flow below the rest, allowing you to specify multiple blocks of content inside the same row if you need to.

    <div class="row">
      <div class="col-sm-12 col-md-6"></div>
      <div class="col-sm-12 col-md-6"></div>
    </div>

Do: You can change the layout of your content for different displays, laying out your content vertically on smaller screens or horizontally on larger screens. If your columns exceed a total width of `12` (100%) on some displays, they will wrap accordingly.

    <div class="row">
      <div class="col-sm col-lg-3 col-md-last"></div>
      <div class="col-sm-6 col-md-offset-2"></div>
    </div>

Do: You do not need to specify a column's width or reapply offset and reordering modifiers if they are the same as the previous screen size.

    <div class="row cols-sm-12 cols-md-6">
      <div></div>  <div></div>
    </div>

Do: You can add multiple predefined layout classes for different screen sizes, allowing you to build responsive predefined layouts.

    <div class="row">
      <div class="col-sm-8 col-sm-offset-1 col-md-offset-0"></div>
      <div class="col-sm-last col-md-normal"></div>
    </div>

Do: To remove a previously applied offset from a column (i.e. one applied from the layout from a smaller screen size) or to make sure no offsets are active on a column, you can set its offset to `0` for a specific screen size. Similarly, to remove previously applied reordering modifiers from a column, you can set its order to `normal`.

    <div class="col-sm">
      <div class="col-sm"></div>
    </div>

Don't: Avoid placing a column directly inside another column. Always use a row to wrap columns, instead.

    <div class="container">
      <div class="row">
        <div class="col-sm"></div>
        <p>Do not do this.</p>
      </div>
      <p>Do not do this.</p>
    </div>

Don't: Avoid mixing rows and columns with normal content that is not wrapped on the respective level of the grid layout.

    <div class="row">
      <div class="col-md"></div>
    </div>
    <div class="row cols-md"></div>

Don't: Never omit the class that specifies a column's width for the small screen size. You can omit all other classes and modifiers, except for this. This also applies to predefined layouts.

    <div class="row cols-sm-6">
      <div class="row cols-sm-4"></div>
    </div>

Don't: Avoid combining normal column width modifiers with predefined layouts, as the predefined layout will most likely override the width modifier of the column.

### Notes

- mini.css uses a mobile-first approach in its grid system, so you do not have to rewrite the same layout for all three screen sizes. Leaving a column's size, offset or order unspecified for a screen size will use the style applied for the previous largest screen size recursively. This also applies to predefined layouts.
- The specific breakpoints for small, medium and large screen sizes are as follows:
  - small: less than `768px` wide
  - medium: more than or equal to `768px` wide and less than `1280px` wide
  - large: `1280px` wide or more
- In many cases, you can omit the container and just use rows and columns. You only need to make sure that all of your rows have the same parent element.
- You can use fluid columns to create columns whose width is not a multiple of 1/12th of the screen's width (e.g. if you have 7 fluid columns in a row, each one of them will be 1/7th of the screen's width).
- Predefined layouts can be combined with most of the features of the grid system, such as offsets and reordering, however they do not combine very well with regular columns.
- You should only apply offset and reordering modifiers to the columns that you need and for the screen sizes that are necessary. Remember to also specify a column width or use a predefined layout before applying these modifiers.

### Customization

- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable. This only affects the padding of the container.

## Cards

mini.css provides you with cards (`.card`), general-purpose containers that help you organize the content of your web apps. Cards should be used in combination with the grid system, meaning that they need to be placed inside a grid's rows to work properly. Layouts created with cards are responsive, realigning according to the available size on the screen.

### Example

### Card 1

This is a basic card with some sample content.

### Card 2

This is another card with some sample content.

### Card 3

This is one more card with some sample content.

### Sample code

    <div class="row">
      <div class="card"></div>
      <div class="card"></div>
    </div>

### Modifiers

#### Alternative sizes

You can create small (`.small`, `240px` wide) or large (`.large`, `480px` wide) cards by applying the appropriate modifiers to a card. Apart from that, you can also create fluid (`.fluid`) cards, that take up as much space as is available, however you will have to place these cards inside a grid layout's columns, effectively adding one extra step for them to display properly.

##### Example

### Small Card

Small cards are `240px` wide.

### Large Card

Large cards are `480px` wide.

### Fluid Card

Fluid cards scale their width based on the column that contains them.

##### Sample code

    <div class="row">
      <div class="card small"></div>
      <div class="card large"></div>
      <div class="col-sm-12">
        <div class="card fluid"></div>
      </div>
    </div>

#### Color variants

You can display warning (`.warning`) or error (`.error`) messages using cards, simply by adding the appropriate color modifiers to a card.

##### Example

### Warning Card

Warning cards are used to display important information to users.

### Error Card

Error cards are used to display error messages to users.

##### Sample code

    <div class="row">
      <div class="card warning"></div>
      <div class="card error"></div>
    </div>

### Best practices

    <div class="card">
      <div class="row">
        <div class="card"></div>
      </div>
    </div>

Do: You can create rows inside a card, which can in turn contain other cards.

    <div class="card row"></div>
    <div class="card col-sm"></div>

Don't: An element cannot be a card and a row or column at the same time.

    <div>
      <div class="card"></div>
    </div>

Don't: Never forget to wrap your cards inside a row and your fluid cards inside a row and a column.

    <div class="row">
      <div class="card"></div>
      <div class="card fluid"></div>
    </div>

Don't: Try not to combine fixed-width and fluid cards. Instead, combine fixed-width cards with columns and place fluid cards inside them.

    <div class="card warning error"></div>

Don't: Avoid applying two color modifiers on the same card.

### Notes

- Due to the fact that fluid cards stretch to fill their parent container, they might not fully respect their margins sometimes, although this should not cause any noticable problems in your web apps' layouts.

### Customization

- Text color for cards can be changed by changing the value of the `--card-fore-color` variable.
- Background color for cards can be changed by changing the value of the `--card-back-color` variable.
- Border color for cards can be changed by changing the value of the `--card-border-color` variable.
- You can customize the colors of different color variants by changing the values of the related variables in their respective definitions.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal border radius for elements can be changed globally by changing the value of the `--universal-border-radius` variable.

## Card sections

Card content is usually organized in smaller sections (`.section`) to be more easily digestible. A card section can be any valid HTML5 element with the appropriate class applied to it.

### Example

### Title section

This is a section with some textual content.

### Sample code

    <div class="card">
      <div class="section"></div>
      <div class="section"></div>
    </div>

### Modifiers

#### Media sections

You can create sections for media (`.media`), such as images or videos (using an `<img>` or a `<iframe>` element respectively). These sections are styled appropriately for presentation of media content, meaning that the content will scale appropriately to fill up the available space.

##### Example

### Card with image

### Card with video

##### Sample code

    <div class="card">
      <img src="image.png" class="section media"/>
    </div>

#### Color variants

You can create sections with a darker (`.dark`) background, by applying the appropriate modifier.

##### Example

### Normal section

### Dark section

##### Sample code

    <div class="card">
      <div class="section dark"></div>
    </div>

#### Additional spacing

You can create sections with additional spacing (`.double-padded`), by applying the appropriate modifier.

##### Example

### Normal spacing

### Additional spacing

##### Sample code

    <div class="card">
      <div class="section double-padded"></div>
    </div>

### Best practices

    <div class="card">
      <div class="section"></div>
      <p>This should have been a section!</p>
    </div>

Don't: Avoid mixing regular content with content in sections. Instead, wrap all of your card's contents in sections.

### Notes

- While not mandatory, it is highly suggested that you wrap all of your cards' contents in one or more sections.
- Remember that a section can be any valid HTML5 element, so you can apply them to headings, paragraphs, input elements etc.
- Media sections have a default height of `200px`.
- Due to the media sections using `object-fit`, you might want to use a polyfill for better browser support (recommended: image polyfill, video polyfill).
- Depending on the source website, some embedded videos might not display properly as media sections.

### Customization

- Text color for cards and card sections can be changed by changing the value of the `--card-fore-color` variable.
- Background color for cards and card sections can be changed by changing the value of the `--card-back-color` variable.
- Border color for cards and card sections can be changed by changing the value of the `--card-border-color` variable.
- You can customize the colors of different color variants by changing the values of the related variables in their respective definitions.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.

## Forms & input

Forms, labels and common HTML5 input elements have been styled using clean, modern rules, improving the accessibility and usability of your web apps' forms.

### Example

Sample form
Text
Password
Number
Select
Checkbox
Radio
Textarea
Invalid
Disabled
Readonly

### Sample code

    <form>
      <fieldset>
        <legend>Simple form</legend>
        <label for="username">Username</label>
        <input type="text" id="Username" placeholder="Username"/>
        <label for="password">Password</label>
        <input type="password" id="password" placeholder="Password"/>
      </fieldset>
    </form>

### Best practices

    <form>
      <fieldset>
        <legend>Simple form</legend>
        <div> class="row">
          <div> class="col-sm-12 col-md-6">
            <label for="username">Username</label>
            <input type="text" id="Username" placeholder="Username"/>
          </div>
          <div> class="col-sm-12 col-md-6">
            <label for="password">Password</label>
            <input type="password" id="password" placeholder="Password"/>
          </div>
        </div>
      </fieldset>
    </form>

Do: Form inputs are inline by defaut, however you can combine forms with the grid system to create aligned forms.

### Notes

- Using the `<fieldset>` and `<legend>` elements is highly recommended, as it improves semantic markup and accessibility.
- Some input elements, such as date & time, color and range types, are not supported and, as a result, do not have a default style defined for them. You can define said styles manually if you need to use them in your web app.

### Customization

- Text color for forms and legend elements can be changed by changing the value of the `--form-fore-color` variable.
- Background color for forms can be changed by changing the value of the `--form-back-color` variable.
- Border color for forms and fieldset elements can be changed by changing the value of the `--form-border-color` variable.
- Text color for input elements can be changed by changing the value of the `--input-fore-color` variable.
- Background color for input elements can be changed by changing the value of the `--input-back-color` variable.
- Border color for input elements can be changed by changing the value of the `--input-border-color` variable.
- Border color for focused and invalid input elements can be changed by changing the value of the `--input-focus-color` and `--input-invalid-color` variables respectively.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.
- Universal border radius for elements can be changed globally by changing the value of the `--universal-border-radius` variable.

## Buttons

Buttons and button-like input elements have been styled by default to be consistent across browsers. You can also style other elements, such as links or form labels, to look like buttons, using the appropriate class (`.button`) or the button role.

### Example

Link Label

### Sample code

    <button>Button</button>
    <input type="button" value="Button" />
    <input type="reset" value="Button" />
    <input type="submit" value="Button" />
    <a href="#" class="button">Link</a>
    <a href="#" role="button">Link</a>
    <label class="button">Label</label>
    <label role="button">Label</label>

### Modifiers

#### Color variants

To make your buttons stand out, you can give them a primary (`.primary`), secondary (`.secondary`), tertiary (`.tertiary`) or inversed (`.inverse`) color palette.

##### Example

##### Sample code

    <button class="primary">Primary</button>
    <button class="secondary">Secondary</button>
    <button class="tertiary">Tertiary</button>
    <button class="inverse">Inverse</button>

#### Size variants

You can make buttons smaller (`.small`) or larger (`.large`), by applying the appropriate modifier.

##### Example

##### Sample code

    <button class="small">Small</button>
    <button class="large">Large</button>

### Best practices

    <input type="file" id="file-input" style="display:none" />
    <label for="file-input" class="button">Upload file</label>

Do: File upload inputs are not styled by default, due to inconsistencies in how browsers handle them. If you want them to look like other buttons, you can hide them and use a linked label.

    <button class="primary inverse">Button</button>
    <button class="small large">Button</button>

Don't: Avoid applying multiple modifiers of the same type on the same button.

### Notes

- It is recommended to use the button role instead of the provided class, if you want your custom buttons to be fully accessible.

### Customization

- Text color for buttons can be changed by changing the value of the `--button-fore-color` variable.
- Background color for buttons can be changed by changing the value of the `--button-back-color` variable.
- Border color for buttons can be changed by changing the value of the `--button-border-color` variable.
- Background and border color for focused buttons can be changed by changing the values of the `--button-hover-back-color` and `--button-hover-border-color` variables respectively.
- You can customize the colors of different color variants by changing the values of the related variables in their respective definitions.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.
- Universal border radius for elements can be changed globally by changing the value of the `--universal-border-radius` variable.

## Input grouping

You can ensure that input elements and labels display together on the same line, by grouping them together (`.input-group`). You can also group buttons together, using a different grouping class (`.button-group`).

### Example

Grouped inputs
Username
Password

### Sample code

    <div class="input-group">
      <label for="username">Username</label>
      <input type="text" id="Username" placeholder="Username"/>
    </div>

    <div class="button-group">
      <button>Button</button>
      <button>Button</button>
      <button>Button</button>
    </div>

### Modifiers

#### Fluid & vertical grouping

You can make your input groups fluid (`.fluid`) or vertical (`.vertical`), by applying the appropriate modifiers.

##### Example

Fluid input groups
Username
Password
Vertical input groups
Username
Password

##### Sample code

    <div class="input-group fluid">
      <label for="username">Username</label>
      <input type="text" id="Username" placeholder="Username"/>
    </div>
    <div class="input-group vertical">
      <label for="username">Username</label>
      <input type="text" id="Username" placeholder="Username"/>
    </div>

### Best practices

    <div class="input-group row">
      <div class="col-sm">
        <label for="username">Username</label>
        <input type="text" id="Username" placeholder="Username"/>
      </div>
    </div>

Don't: Avoid combining input groups with the grid system, as there might be overlapping styles.

### Notes

- It is highly recommended that you do not place checkboxes or radio buttons inside fluid or vertical input groups.
- Button groups will display horizontally on medium and large screens, but collapse into a vertical view on small screens.

## Header

The header element has been minimally styled, allowing you to create modern headers for your web apps. A header can include a logo element (`.logo`), as well as buttons, links and labels, styled as buttons (`.button`).

### Example

Logo
News

### Sample code

    <header>
      <a href="#" class="logo">Logo</a>
      <a href="#" class="button">Home</a>
      <button>Download</button>
    </header>

### Modifiers

#### Sticky header

You can make your web app's header sticky (`.sticky`), by applying the appropriate modifier.

##### Sample code

    <header class="sticky">
      <a href="#" class="logo">Logo</a>
      <a href="#" class="button">Home</a>
      <button>Download</button>
    </header>

### Best practices

    <header>
      <a href="#" class="button logo">Logo</a>
      <a href="#">Home</a>
    </header>

Don't: You should not apply a `.button` class to the logo of your header, but you must make sure that all other elements inside the header are styled as buttons.

### Notes

- The header element is partially responsive on smaller screens, displaying a scrollbar indicating that there is more content off-screen.
- The header element can be a row in a grid system, allowing you to create responsive headers.

### Customization

- Text color for the header can be changed by changing the value of the `--header-fore-color` variable.
- Background color for the header can be changed by changing the value of the `--header-back-color` variable.
- Border color for the header can be changed by changing the value of the `--header-border-color` variable.
- Background color for focused buttons inside the header can be changed by changing the value of the `--header-hover-back-color` variable.

## Menu drawer

The drawer component of mini.css is used to create responsive navigation menus for your web apps. It is composed of three components - the drawer, the toggle button and the close button:

- To create a drawer, simply create a checkbox input, applying the appropriate class to it (`.drawer`), immediately followed by a container of your liking (e.g. a `<div>` or `<nav>`). The former serves as your drawer's control, while the latter is the actual drawer container.
- Create a label anywhere outside your drawer's container for the checkbox controlling your drawer, applying the appropriate class (`.drawer-toggle`). This will serve as the toggle button for your drawer menu.
- Finally, inside your drawer's container, add another label for the checkbox controlling your drawer, applying the appropriate class (`.drawer-close`). This will serve as the close button for your drawer menu.

### Example

Home
News
About
Contact

### Sample code

    <label for="drawer-control" class="drawer-toggle"></label>

    <input type="checkbox" id="drawer-control" class="drawer">
    <div>
      <label for="drawer-control" class="drawer-close"></label>
      <a href="#">Home</a>
    </div>

### Modifiers

#### Persistent drawer

If you want your drawer menus to not expand into normal containers on larger screens, simply add the appropriate modifier (`.persistent`) on the checkbox controlling the drawer and its toggle button.

##### Sample code

    <label for="drawer-control" class="drawer-toggle persistent"></label>

    <input type="checkbox" id="drawer-control" class="drawer persistent">
    <div>
      <label for="drawer-control" class="drawer-close"></label>
      <a href="#">Home</a>
    </div>

### Best practices

    <div class="row">
      <input type="checkbox" id="drawer-control" class="drawer">
      <div class="col-md-4">
        <label for="drawer-control" class="drawer-close"></label>
        <a href="#">Home</a>
      </div>
      <div class="col-sm-12 col-md-8">
        <p>Page content</p>
      </div>
    </div>

Do: You can combine the drawer menu with the grid system to create responsive menus that are part of the layout of your web app.

    <input type="checkbox" id="drawer-control" class="drawer">
    <!-- Do not place other stuff between these -->
    <div>
      <label for="drawer-control" class="drawer-close"></label>
      <a href="#">Home</a>
    </div>

Don't: You should not place anything between the checkbox controlling the drawer and the container.

### Notes

- Drawer menus are responsive by default and will expand into normal containers on screens larger or equal to `768px` wide.
- It is highly recommended to place your drawer's toggle button inside your web app's header element.
- You can combine the navigation bar element with the drawer menu for better results.
- Remember to apply the appropriate classes to any and all elements, as indicated in the examples. Failing to do so will result in the drawer menu not rendering or behaving properly.

### Customization

- Text color can be changed globally by changing the value of the `--fore-color` variable. This will affect the text color of the toggle button and items inside the drawer container.
- Background color for the drawer container can be changed by changing the value of the `--drawer-back-color` variable.
- Border color for the drawer container can be changed by changing the value of the `--drawer-border-color` variable.
- Text color for the drawer close button can be changed by changing the values of the `--drawer-close-color`.
- Background color for the drawer close button when focused or hovered over can be changed by changing the values of the `--drawer-hover-back-color`.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.
- Universal border radius for elements can be changed globally by changing the value of the `--universal-border-radius` variable.

## Tables

Tables are styled in a minimal, modern and responsive manner, allowing users on all devices to easily browse tabular data, taking advantage of the Flexbox layout's capabilities. To make tabular data properly display on mobile devices, remember to specify a `data-label` attribute for each `<>` element (usually same as the heading of the column).

### Example

###### Desktop view

People
Name | Surname | Alias
--- | --- | ---
Chad | Wilberts | MrOne
Adam | Smith | TheSmith
Sophia | Canderson | Candee
Nick | Thomson | NickThom
Mark | Gerkis | Markie
John | Fergusson | Fergujohn
Sylvia | Pouleau | Sylver
Norman | Jones | NormalJones
Trevor | Heidel | Heidi

###### Mobile view

People
Name | Surname | Alias
--- | --- | ---
Chad | Wilberts | MrOne
Adam | Smith | TheSmith
Sophia | Canderson | Candee

### Sample code

    <table>
      <caption>People</caption>
      <thead>
        <tr>
          <th>Name</th>
          <th>Surname</th>
          <th>Alias</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td data-label="Name">Chad</td>
          <td data-label="Surname">Wilberts</td>
          <td data-label="Alias">MrOne</td>
        </tr>
        <tr>
          <td data-label="Name">Adam</td>
          <td data-label="Surname">Smith</td>
          <td data-label="Alias">TheSmith</td>
        </tr>
        <tr>
          <td data-label="Name">Sophia</td>
          <td data-label="Surname">Canderson</td>
          <td data-label="Alias">Candee</td>
        </tr>
      </tbody>
    </table>

### Modifiers

#### Horizontal tables

You can create horizontal tables (`.horizontal`), by applying the appropriate class.

##### Example

People
Name | Surname | Alias
--- | --- | ---
Chad | Wilberts | MrOne
Adam | Smith | TheSmith
Sophia | Canderson | Candee

##### Sample code

    <table class="horizontal">
      <caption>People</caption>
      <thead>
        <tr>
          <th>Name</th>
          <th>Surname</th>
          <th>Alias</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td data-label="Name">Chad</td>
          <td data-label="Surname">Wilberts</td>
          <td data-label="Alias">MrOne</td>
        </tr>
        <tr>
          <td data-label="Name">Adam</td>
          <td data-label="Surname">Smith</td>
          <td data-label="Alias">TheSmith</td>
        </tr>
        <tr>
          <td data-label="Name">Sophia</td>
          <td data-label="Surname">Canderson</td>
          <td data-label="Alias">Candee</td>
        </tr>
      </tbody>
    </table>

#### Striped tables

You can create striped tables (`.striped`), by applying the appropriate class.

##### Example

People
Name | Surname | Alias
--- | --- | ---
Chad | Wilberts | MrOne
Adam | Smith | TheSmith
Sophia | Canderson | Candee

##### Sample code

    <table class="striped">
      <caption>People</caption>
      <thead>
        <tr>
          <th>Name</th>
          <th>Surname</th>
          <th>Alias</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td data-label="Name">Chad</td>
          <td data-label="Surname">Wilberts</td>
          <td data-label="Alias">MrOne</td>
        </tr>
        <tr>
          <td data-label="Name">Adam</td>
          <td data-label="Surname">Smith</td>
          <td data-label="Alias">TheSmith</td>
        </tr>
        <tr>
          <td data-label="Name">Sophia</td>
          <td data-label="Surname">Canderson</td>
          <td data-label="Alias">Candee</td>
        </tr>
      </tbody>
    </table>

#### Hoverable tables

You can create hoverable tables (`.hoverable`), by applying the appropriate class.

##### Example

People
Name | Surname | Alias
--- | --- | ---
Chad | Wilberts | MrOne
Adam | Smith | TheSmith
Sophia | Canderson | Candee

##### Sample code

    <table class="hoverable">
      <caption>People</caption>
      <thead>
        <tr>
          <th>Name</th>
          <th>Surname</th>
          <th>Alias</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td data-label="Name">Chad</td>
          <td data-label="Surname">Wilberts</td>
          <td data-label="Alias">MrOne</td>
        </tr>
        <tr>
          <td data-label="Name">Adam</td>
          <td data-label="Surname">Smith</td>
          <td data-label="Alias">TheSmith</td>
        </tr>
        <tr>
          <td data-label="Name">Sophia</td>
          <td data-label="Surname">Canderson</td>
          <td data-label="Alias">Candee</td>
        </tr>
      </tbody>
    </table>

### Best practices

    <table>
      <caption>People</caption>
      <thead>
        <tr>
          <td>Bad idea</td>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th data-label="Bad">Also bad idea</th>
        </tr>
      </tbody>
    </table>

Don't: Avoid placing `<td>` elements in the `<thead>` of your tables, as well as placing `<th>` elements in the `<tbody>`.

### Notes

- Remember to always specify a `data-label` attribute for all of your `<td>` elements, otherwise they will not display properly on mobile.
- Due to the way tables are displayed, the `<tfoot>` element is not supported by default. You can however add `table tfoot { order: 3; }` to your CSS files to partially support table footers.
- Tables are vertically scrollable by default, with a `max-height` property of `400px`.

### Customization

- Text color for `<th>` and `<td>` elements can be changed by changing the values of the `--table-head-fore-color` and `--table-body-fore-color` variables respectively.
- Background color for `<th>` and `<td>` elements can be changed by changing the values of the `--table-head-back-color` and `--table-body-back-color` variables respectively.
- Border color for tables can be changed by changing the value of the `--table-border-color` variable.
- Border color for the separator between a table's heading and a table's body can be changed by changing the value of the `--table-border-separator-color` variable.
- Alternative background color for `<td>` elements in striped tables can be changed by changing the value of the `--table-body-alt-back-color` variable.
- Hover background color for `<tr>` elements in hoverable tables can be changed by changing the value of the `--table-body-hover-back-color` variable.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.
- Universal border radius for elements can be changed globally by changing the value of the `--universal-border-radius` variable.

## Text highlighting

The native HTML5 mark element has been minimally styled to allow for easy text highlighting.

### Example

This is a paragraph with some highlighted text.

### Sample code

    <p>This is some <mark>highlighted text</mark>.</p>

### Modifiers

#### Color variants

You can change the color of highlighted text, based on context by applying the appropriate class (secondary - `.secondary` or tertiary - `.tertiary`).

##### Example

This is a secondary highlight and this is a tertiary highlight.

##### Sample code

    <p>This is a <mark class="secondary">secondary highlight</mark> and this is a <mark class="tertiary">tertiary highlight</mark>.</p>

#### Style variants

You can make highlights look like tags (`.tag`) or display as inline blocks (`.inline-block`), by applying the appropriate class.

##### Example

This is a highlight styled as a tag.

This is some highlighted text that is displayed as an inline block.

##### Sample code

    <p>This is a highlight styled as a <mark class="tag">tag</mark>.</p>
    <p><mark class="inline-block">This is some highlighted text that is displayed as an inline block.</mark></p>

### Best practices

    <mark class="inline-block"><mark class="secondary">Secondary highlight</mark> inside a inline block.</mark>

Do: You can nest a highlight inside another one, if the outer one is displayed as an inline-block.

    <mark class="primary inverse">Highlight</mark>

Don't: Avoid applying multiple color modifiers on the same highlight.

### Notes

- Highlighted text scales according to its parent element, so it can be used inside any kind of element (headings, forms, paragraphs etc.).

### Customization

- Text color for highlighted text can be changed by changing the value of the `--mark-fore-color` variable.
- Background color for highlighted text can be changed by changing the value of the `--mark-back-color` variable.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.
- Universal border radius for elements can be changed globally by changing the value of the `--universal-border-radius` variable.

## Toasts

mini.css provides you with toast messages (`.toast`), allowing you to display native-looking notifications on mobile devices.

### Example

This is a toast message!

### Sample code

    <span class="toast">This is a toast message!</span>

### Notes

- Toast elements do not have any pre-defined behavior, but you can use Javascript to add functionality to them.

### Customization

- Text color for toast messages can be changed by changing the value of the `--toast-fore-color` variable.
- Background color for toast messages can be changed by changing the value of the `--toast-back-color` variable.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.
- Universal border radius for elements can be changed globally by changing the value of the `--universal-border-radius` variable.

## Tooltips

You can utilize the `aria-label` property to create accessible tooltips (`.tooltip`), allowing you to display explanatory text for different elements.

### Example

Hover over this text to see a tooltip!

### Sample code

    <span class="tooltip" aria-label="Tooltip text">Hover over text to see tooltip</span>

### Modifiers

#### Position variant

You can make tooltips display below the related text, by adding the appropriate class (`.bottom`).

##### Example

Hover over this text to see a tooltip!

##### Sample code

    <span class="tooltip bottom" aria-label="Tooltip text">Hover over text to see tooltip</span>

### Notes

- Tooltips depend on the `aria-label` property, so they are fully accessible on screen readers.

### Customization

- Text color for tooltips can be changed by changing the value of the `--tooltip-fore-color` variable.
- Background color for tooltips can be changed by changing the value of the `--tooltip-back-color` variable.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.
- Universal border radius for elements can be changed globally by changing the value of the `--universal-border-radius` variable.

## Modal dialogs

mini.css provides you with a modal dialog component to display messages to users. It is composed of three components - the modal dialog, the toggle button and the close button:

- To create a modal dialog, simply create a checkbox input, applying the appropriate class to it (`.modal`), immediately followed by a `<div>` container. The former serves as your modal dialog's control, while the latter is the actual modal dialog container.
- Create a label anywhere outside your modal dialog's container for the checkbox controlling your modal dialog. This will serve as the toggle button for your modal dialog.
- Finally, inside your modal dialog's container, add another label for the checkbox controlling your modal dialog, applying the appropriate class (.modal-close). This will serve as the close button for your modal dialog.

### Example

### Modal

This is a modal dialog!

Show modal dialog

### Sample code

    <label for="modal-control">Show modal</label>

    <input type="checkbox" id="modal-control" class="modal">
    <div>
      <div class="card">
        <label for="modal-control" class="modal-close" ></label>
        <h3 class="section">Modal</h3>
        <p class="section">This is a modal dialog!</p>
      </div>
    </div>

### Best practices

    <input type="checkbox" id="modal-control" class="modal">
    <div role="dialog" aria-labelledby="dialog-title">
      <div class="card">
        <label for="modal-control" class="modal-close" ></label>
        <h3 class="section" id="dialog-title">Modal</h3>
        <p class="section">This is a modal dialog!</p>
      </div>
    </div>

Do: You can use the `role="dialog"` to add accessibility to your modal dialogs. Remember to properly label it and manage keyboard focus, as required.

    <input type="checkbox" id="modal-control" class="modal">
    <!-- Do not place other stuff between these -->
    <div>
      <div class="card">
        <label for="modal-control" class="modal-close" ></label>
        <h3 class="section">Modal</h3>
        <p class="section">This is a modal dialog!</p>
      </div>
    </div>

Don't: You should not place anything between the checkbox controlling the modal dialog and the container.

### Notes

- Modal dialogs should be used in combination with the card component for best results.
- Remember to apply the appropriate classes to any and all elements, as indicated in the examples. Failing to do so will result in the modal dialog not rendering or behaving properly.
- You can omit the toggle for the modal dialog and use Javascript to show/hide it, instead. You can also use any correctly linked label inside the modal dialog to change its state.

### Customization

- Background color for the modal dialog overlay can be changed by changing the value of `--modal-overlay-color`.
- Text color for the modal dialog close button can be changed by changing the value of the `--modal-close-color`.
- Background color for the modal dialog close button when focused or hovered over can be changed by changing the value of the `--modal-close-hover-color`.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.
- Universal border radius for elements can be changed globally by changing the value of the `--universal-border-radius` variable.

## Spoilers & accordions

mini.css provides you with accessible spoilers and accordions. They are composed of two components - the wrapper, the toggle button and the content container:

- To create a collapsible spoiler, simply create a `<div>`, applying the appropriate class to it (`.collapse`). This serves as the wrapper for the collapsible spoiler.
- Inside the wrapper, create a checkbox or radio input, immediately followed by a `<label>` for the checkbox. The former serves as your collapsible spoiler's control, while the latter is the toggle button for your collapsible spoiler.
- Create a `<div>` right after the `<label>`. This will serve as the container for the collapsible content.

If you want to create an accordion, simply repeat the last two steps above for each section of the accordion. In order to make collapsible spoilers and accordions fully accessible, it is highly recommended to add the `aria-hidden="true"` attribute to all labels and inputs that control the behavior of these components.

### Example

Collapse section 1

This is the first section of the collapse

Collapse section 2

This is the second section of the collapse

Accordion section 1

This is the first section of the accordion

Accordion section 2

This is the second section of the accordion

### Sample code

    <div class="collapse">
      <input type="checkbox" id="collapse-section1" checked aria-hidden="true">
      <label for="collapse-section1" aria-hidden="true">Collapse section 1</label>
      <div>
        <p>This is the first section of the collapse</p>
      </div>
      <input type="checkbox" id="collapse-section2" aria-hidden="true">
      <label for="collapse-section2" aria-hidden="true">Collapse section 2</label>
      <div>
        <p>This is the second section of the collapse</p>
      </div>
    </div>

    <div class="collapse">
      <input type="radio" id="accordion-section1" checked aria-hidden="true" name="accordion">
      <label for="accordion-section1" aria-hidden="true">Accordion section 1</label>
      <div>
        <p>This is the first section of the accordion</p>
      </div>
      <input type="radio" id="accordion-section2" aria-hidden="true" name="accordion">
      <label for="accordion-section2" aria-hidden="true">Accordion section 2</label>
      <div>
        <p>This is the second section of the accordion</p>
      </div>
    </div>

### Best practices

    <div class="collapse">
      <input type="checkbox" id="collapse-section1" checked aria-hidden="true">
      <!-- Do not place other stuff between these -->
      <label for="collapse-section1" aria-hidden="true">Collapse section 1</label>
      <!-- Do not place other stuff between these -->
      <div>
        <p>This is the first section of the collapse</p>
      </div>
    </div>

Don't: You should not place anything between the checkbox controlling the collapsible spoiler and its label or between the label and the content container.

### Notes

- Make sure all the radio buttons in the same accordion have the same `name`.
- If you want a collapsible spoiler or an accordion section to be expanded by default, you can add the `checked` attribute to the respective collapsible spooiler's or section's control.
- The `max-height` of the content container is `400px`.
- Using the `aria-hidden="true"` attribute is highly recommended, as screen readers will ignore the controls of the collapsible spoiler or accordion and read all the contained content normally.

### Customization

- Background color, text color and background color on hover for the collapsible spoiler's labels can be changed by changing the values of `--collapse-label-back-color`, `--collapse-label-fore-color` and `--collapse-label-hover-back-color` respectively.
- Border color for the collapsible spoiler can be changed by changing the value of the `--collapse-border-color`.
- Background color for the collapsible spoiler's content can be changed by changing the value of the `--collapse-content-back-color`.
- Background color and border for the spoiler's content selected labels can be changed by changing the values of the `--collapse-selected-label-back-color` and `--collapse-selected-label-border-color` respectively.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable.
- Universal border radius for elements can be changed globally by changing the value of the `--universal-border-radius` variable.

## Progress bars

Progress bars are minimally styled to match with the rest of the framework's aesthetics and be consistent across all modern browsers.

### Example

### Sample code

    <progress value="450" max="1000"></progress>

### Modifiers

#### Inline progress bars

You can create inline progress bars (`.inline`), by applying the appropriate modifier.

##### Example

45% completed...

##### Sample code

    <progress value="450" max="1000" class="inline"></progress>

#### Color variants

You can create primary, secondary or tertiary (`.primary`, `.secondary`, `.tertiary`) progress bars, simply by adding the appropriate color modifier.

##### Example

##### Sample code

    <progress value="450" max="1000" class="primary"></progress>
    <progress value="450" max="1000" class="secondary"></progress>
    <progress value="450" max="1000" class="tertiary"></progress>

### Best practices

    <progress value="45" max="100"></progress>
    <progress value="450.0" max="1000.0"></progress>

Don't: Avoid using different values than `1000` for progress bars' `max` attribute, as well as floating point values for either `max` or `value`.

    <progress value="450" max="1000" class="primary secondary"></progress>

Don't: Avoid applying two color modifiers on the same progress bar.

### Notes

- Progress bars are designed to work with a `max="1000"` attribute, as this covers the most common use-cases.

### Customization

- Foreground color for progress bars can be changed by changing the value of the `--progress-fore-color` variable.
- Background color for progress bars can be changed by changing the value of the `--progress-back-color` variable.
- You can customize the colors of different color variants by changing the values of the related variables in their respective definitions.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal border radius for elements can be changed globally by changing the value of the `--universal-border-radius` variable.

## Donut spinners

mini.css provides you with animated loading indicators (`.spinner`), which you can use to indicate that some content is loading.

### Example

### Sample code

    <div class="spinner"></div>

### Modifiers

#### Color variants

You can create primary, secondary or tertiary (`.primary`, `.secondary`, `.tertiary`) donut spinners, simply by adding the appropriate color modifier.

##### Example

##### Sample code

    <div class="spinner primary"></div>
    <div class="spinner secondary"></div>
    <div class="spinner tertiary"></div>

### Best practices

    <div class="spinner">Don't place text here.</div>

Don't: Avoid inserting text inside donut spinners.

    <div class="spinner primary secondary"></div>

Don't: Avoid applying two color modifiers on the same donut spinner.

### Notes

- You can use either a `<div>` or a `<span>` element to create a donut spinner.
- You can add the `role="progressbar"` attribute to spinner donut elements to increase accessibility.
- You can inline donut spinners inside a paragraph or some other textual content.

### Customization

- Foreground color for donut spinners can be changed by changing the value of the `--spinner-fore-color` variable.
- Background color for donut spinners can be changed by changing the value of the `--spinner-back-color` variable.
- You can customize the colors of different color variants by changing the values of the related variables in their respective definitions.
- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.

## Icons

Powered by Feather

mini.css comes with a set of 20 commonly-used icons (courtesy of Feather) that you can use anywhere in your web apps, utilizing the appropriate class for each icon.

### Example

.icon-alert

.icon-bookmark

.icon-calendar

.icon-cart

.icon-credit

.icon-edit

.icon-help

.icon-home

.icon-info

.icon-link

.icon-location

.icon-lock

.icon-mail

.icon-phone

.icon-rss

.icon-search

.icon-settings

.icon-share

.icon-upload

.icon-user

### Sample code

    <span class="icon-alert"></span>
    <span class="icon-bookmark"></span>
    <span class="icon-calendar"></span>
    <span class="icon-cart"></span>
    <span class="icon-credit"></span>
    <span class="icon-edit"></span>
    <span class="icon-help"></span>
    <span class="icon-home"></span>
    <span class="icon-info"></span>
    <span class="icon-link"></span>
    <span class="icon-location"></span>
    <span class="icon-lock"></span>
    <span class="icon-mail"></span>
    <span class="icon-phone"></span>
    <span class="icon-rss"></span>
    <span class="icon-search"></span>
    <span class="icon-settings"></span>
    <span class="icon-share"></span>
    <span class="icon-upload"></span>
    <span class="icon-user"></span>

### Modifiers

#### Color variants

You can create secondary or inverse (`.secondary`, `.inverse`) icons, simply by adding the appropriate color modifier.

##### Example

This is a secondary icon, which has a lighter color.

This is an inverse icon.

##### Sample code

    <span class="icon-alert secondary"></span>
    <span class="icon-alert inverse"></span>

### Best practices

    <span class="icon-alert">Don't place text here.</span>

Don't: Avoid inserting text inside icon elements.

    <span class="icon-alert inverse secondary"></span>

Don't: Avoid applying two color modifiers on the same icon.

### Notes

- You can only use a `<span>` element to create an icon.
- You can inline icons inside a paragraph or pretty much any other textual content. Icons scale relative to their parent element.

### Customization

- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.

## Visibility helpers

You can use visibility helper classes to hide elements for all users (`.hidden`) or for users not on screen readers (`.visually-hidden`). There are also responsive visibility helpers provided, for hiding or visually hiding content only for specific screen sizes (`.hidden-sm`, `.hidden-md`, `.hidden-lg` and `.visually-hidden-sm`, `.visually-hidden-md` and `.visually-hidden-lg` respectively).

### Sample code

    <p class="hidden">Not visible for any users.</p>
    <p class="visually-hidden">Visible only for screen readers.</p>
    <p class="hidden-sm">Not visible for users on screens under 768px wide.</p>
    <p class="hidden-md">Not visible for users on screens 768px-1280px wide.</p>
    <p class="hidden-lg">Not visible for users on screens wider than 1280px.</p>
    <p class="visually-hidden-sm">Visible only for screen readers under 768px wide.</p>
    <p class="visually-hidden-md">Visible only for screen readers 768px-1280px wide.</p>
    <p class="visually-hidden-lg">Visible only for screen readers wider than 1280px.</p>

### Best practices

    <p class="hidden-sm hidden-md">Not visible for users on screens under 1280px wide.</p>

Do: You can apply multiple responsive visibility helpers on the same element.

    <p class="hidden visually-hidden">Do not do this.</p>

Don't: Avoid combining `.hidden` and `.visually-hidden` or responsive helpers for the same screen size.

### Notes

- Visibility helpers use `!important` declarations to override any other styles, so exercise caution when using them.
- The specific breakpoints for small, medium and large screen sizes are as follows:
  - small: less than `768px` wide
  - medium: more than or equal to `768px` wide and less than `1280px` wide
  - large: `1280px` wide or more
- Responsive visibility helper classes are independent, meaning that hiding or visually hiding an element in one screen size will not affect its visibility in any other screen size.

## Element decorators

You can apply generic borders, shadows or border radiuses to any element, by using the appropriate class (`.bordered`, `.shadowed`, `.rounded` or `.circular`).

### Example

### Sample code

    <span class="bordered">Bordered element.</span>
    <span class="shadowed">Shadowed element.</span>
    <span class="rounded">Rounded element.</span>
    <span class="circular">Circular element.</span>

### Best practices

    <span class="rounded circular">Do not do this.</span>

Don't: Avoid applying the `.rounded` and `.circular` decorators on the same element.

### Notes

- Element decorators use `!important` declarations to override any other styles, so exercise caution when using them.
- Element decorators can be used with pretty much every element or component that is available.

### Customization

- Boder color for the generic border decorator can be changed by changing the value of the `--generic-border-color` variable.
- Box shadow style for the generic shadow can be changed by changing the value of the `--generic-box-shadow` variable.

## Responsive spacing & sizing

You can make elements' spacing or sizing responsive by applying the appropriate class (`.responsive-margin` or `.responsive-padding`).

### Sample code

    <span class="responsive-margin">Responsive margin.</span>
    <span class="responsive-padding">Responsive padding.</span>

### Notes

- Responsive spacing and sizing modifiers use `!important` declarations to override any other styles, so exercise caution when using them.
- Responsive spacing and sizing modifiers are independent, meaning that hiding or visually hiding an element in one screen size will not affect its visibility in any other screen size.

### Customization

- Universal margin for elements can be changed globally by changing the value of the `--universal-margin` variable, affecting the responsive spacing modifier. As a rule of thumb, consider the universal margin to be the distance you want your paragraphs to have from the sides of the screen.
- Universal padding for elements can be changed globally by changing the value of the `--universal-padding` variable, affecting the responsive sizing modifier.