The `Theme` object is used to create additional CSS adapted for the chosen Theme. It also allows modifying static page templates.

Right now, **MkNodes** contains two theme classes: One "general" [Theme][mknodes.Theme] with a very basic feature set as well as [MaterialTheme][mknodes.MaterialTheme], a [Theme][mknodes.Theme] subclass specialized for **Material for MkDocs**.

Both classes support:

* Adding custom admonitions with user-chosen colors / icons
* Modifying the `404` error page via a static template.
* Setting alternating row colors for tables


In addition, the [MaterialTheme][mknodes.MaterialTheme] class supports:

* Adding custom status icons for MkPages (settable via [Page metadata][mknodes.Metadata.status])
* Setting custom color palettes
* Changing the icon for several theme elements
* Switching to the "classic" admonition style
* Setting the tooltip width
* Setting the content area width

During the build, a CSS file for these settings gets created and is added to the build resources.

## Additional features for MkDocs-Material

By rewriting the MkDocs-Material templates, it is possible to use all Iconify icons instead of just the
included ones from MkDocs-Material. As an example, you can now use "mdi:icon-name" for the page icon defined in Metadata.
This also works for the theme settings:

``` yaml title="mkdocs.yml"
theme:
  name: material
  icon:
    previous: "mdi:some-icon"
```

## Additional features for MkDocs Theme

The MkDocs theme is modified in order to support hiding the Table of contents via Page metadata, like it can
be done with MkDocs-Material, too.
``` py title="Hiding the TOC"
page.metadata["hide"] = ["toc"]
```
In addition, the TOC automatically is hidden if it does not contain any items.
