diff --git a/renderer/src/main/kotlin/renderer/Decoration.kt b/renderer/src/main/kotlin/renderer/Decoration.kt
new file mode 100644
index 0000000..d3e9ef1
--- /dev/null
+++ b/renderer/src/main/kotlin/renderer/Decoration.kt
@@ -0,0 +1,108 @@
+package opensavvy.dokka.material.mkdocs.renderer
+
+import org.jetbrains.dokka.pages.Style
+import org.jetbrains.dokka.pages.TextStyle
+import org.jetbrains.dokka.pages.TokenStyle
+
+// region Data structure
+
+fun interface Decoration {
+
+ fun StringBuilder.wrap(content: StringBuilder.() -> Unit)
+
+ companion object {
+ fun ofSpan(className: String) =
+ Decoration { content ->
+ append("")
+ content()
+ append("")
+ }
+
+ fun ofElement(elementName: String) =
+ Decoration { content ->
+ append("<$elementName>")
+ content()
+ append("$elementName>")
+ }
+
+ val NoOp = Decoration {content ->
+ content()
+ }
+ }
+}
+
+// endregion
+// region DSL declaration
+
+class Decorations {
+
+ private val groups = ArrayList>()
+ private val inlines = ArrayList>()
+
+ constructor(block: Decorations.() -> Unit) {
+ block()
+ }
+
+ fun group(style: Style, block: Decoration) {
+ groups += style to block
+ }
+
+ fun inline(style: Style, block: Decoration) {
+ inlines += style to block
+ }
+
+ fun fromGroupStyles(style: Iterable