You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by vk...@apache.org on 2020/12/29 18:10:48 UTC

[ignite-3] 01/02: IGNITE-13740: Create a "Getting Started" documentation page for Ignite 3.0 (#20)

This is an automated email from the ASF dual-hosted git repository.

vkulichenko pushed a commit to branch ignite-3.0.0-alpha1
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit f0ebec683619909b0d4770a4f319b5a5ca720651
Author: Nikita Safonov <73...@users.noreply.github.com>
AuthorDate: Tue Dec 29 19:52:13 2020 +0300

    IGNITE-13740: Create a "Getting Started" documentation page for Ignite 3.0 (#20)
    
    * Fixed Maven deployment
    
    * IGNITE-13740: Create a "Getting Started" documentation page for Ignite 3.0
    
    * IGNITE-13740: Updated version number
    
    Co-authored-by: Valentin Kulichenko <va...@gmail.com>
---
 docs/.gitignore                                    |   5 +
 docs/Gemfile                                       |  14 +
 docs/README.adoc                                   | 252 ++++++++++++++
 docs/_config.yml                                   |  46 +++
 docs/_data/toc.yaml                                |  21 ++
 docs/_docs/includes/prereqs.adoc                   |  19 ++
 docs/_docs/index.adoc                              |  40 +++
 docs/_docs/installation/installing-using-exe.adoc  |  37 ++
 docs/_docs/quick-start/getting-started-guide.adoc  |  89 +++++
 docs/_includes/copyright.html                      |  22 ++
 docs/_includes/footer.html                         |  20 ++
 docs/_includes/header.html                         |  36 ++
 docs/_includes/left-nav.html                       |  88 +++++
 docs/_includes/right-nav.html                      |  21 ++
 docs/_includes/section-toc.html                    |  31 ++
 docs/_includes/toc.html                            |  63 ++++
 docs/_layouts/default.html                         |  72 ++++
 docs/_layouts/doc.html                             |  33 ++
 docs/_layouts/toc.html                             |  32 ++
 docs/_plugins/asciidoctor-extensions.rb            | 180 ++++++++++
 docs/_sass/callouts.scss                           |  75 +++++
 docs/_sass/code.scss                               | 115 +++++++
 docs/_sass/docs.scss                               | 238 +++++++++++++
 docs/_sass/footer.scss                             |  48 +++
 docs/_sass/github.scss                             | 223 ++++++++++++
 docs/_sass/header.scss                             | 374 +++++++++++++++++++++
 docs/_sass/layout.scss                             |  45 +++
 docs/_sass/left-nav.scss                           | 109 ++++++
 docs/_sass/right-nav.scss                          |  73 ++++
 docs/_sass/rouge-base16-solarized.scss             |  99 ++++++
 docs/_sass/text.scss                               |  62 ++++
 docs/_sass/variables.scss                          |  33 ++
 docs/assets/css/asciidoc-pygments.css              |  59 ++++
 docs/assets/css/docs.scss                          |  21 ++
 docs/assets/css/styles.scss                        |  30 ++
 docs/assets/images/apple-blob.svg                  |  16 +
 docs/assets/images/arrow-down-white.svg            |   3 +
 docs/assets/images/arrow-down.svg                  |   3 +
 docs/assets/images/background-lines.svg            |  54 +++
 docs/assets/images/cancel.svg                      |  11 +
 docs/assets/images/checkmark-green.svg             |   3 +
 docs/assets/images/copy-icon.svg                   |   6 +
 docs/assets/images/cpp.svg                         |   9 +
 docs/assets/images/dev-internal-bg.jpg             | Bin 0 -> 23014 bytes
 docs/assets/images/dotnet.svg                      |   9 +
 docs/assets/images/edition-ce.svg                  |  16 +
 docs/assets/images/edition-ee.svg                  |  25 ++
 docs/assets/images/edition-ue.svg                  |  28 ++
 docs/assets/images/events-nav-arrow.svg            |   3 +
 docs/assets/images/feature-easy-installation.svg   |  28 ++
 docs/assets/images/feature-fast.svg                |  16 +
 docs/assets/images/feature-reliable.svg            |  25 ++
 docs/assets/images/github-gray.svg                 |   3 +
 docs/assets/images/github-white.svg                |   3 +
 docs/assets/images/glowing-box.svg                 | 170 ++++++++++
 docs/assets/images/integrations/hibernate.svg      |   6 +
 docs/assets/images/integrations/kafka.svg          |   3 +
 docs/assets/images/integrations/more.svg           |  18 +
 docs/assets/images/integrations/oracle.svg         |   3 +
 docs/assets/images/integrations/osgi.svg           |  17 +
 docs/assets/images/integrations/spark.svg          |   7 +
 docs/assets/images/integrations/spring.svg         |   3 +
 docs/assets/images/java.svg                        |   9 +
 docs/assets/images/left-nav-arrow.svg              |   3 +
 docs/assets/images/lines-bg-1.svg                  |  54 +++
 docs/assets/images/lines-bg-2.svg                  |  54 +++
 docs/assets/images/lines-bg-3.svg                  |  54 +++
 docs/assets/images/lines-bg-4.svg                  |  54 +++
 docs/assets/images/menu-icon.svg                   |   3 +
 docs/assets/images/mousepad-blob.svg               |   9 +
 ...piece-of-paper-with-folded-top-right-corner.svg | 117 +++++++
 docs/assets/images/scala.svg                       |  31 ++
 docs/assets/images/search.svg                      |  15 +
 docs/assets/images/violent-blob.svg                |  28 ++
 docs/assets/images/watermelon-blob.svg             |   9 +
 docs/assets/js/anchor.min.js                       |   9 +
 docs/assets/js/code-copy-to-clipboard.js           |  70 ++++
 docs/assets/js/code-tabs.js                        | 155 +++++++++
 docs/assets/js/docs-menu.js                        |  64 ++++
 docs/assets/js/index.js                            |  51 +++
 docs/assets/js/page-nav.js                         |  37 ++
 docs/assets/js/top-navigation.js                   |  92 +++++
 docs/favicon.ico                                   | Bin 0 -> 9780 bytes
 docs/run.sh                                        |  23 ++
 84 files changed, 4154 insertions(+)

diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000..a01b89a
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,5 @@
+.jekyll-cache/
+_site/
+Gemfile.lock
+.jekyll-metadata
+
diff --git a/docs/Gemfile b/docs/Gemfile
new file mode 100644
index 0000000..f471d02
--- /dev/null
+++ b/docs/Gemfile
@@ -0,0 +1,14 @@
+source "https://rubygems.org"
+
+# git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
+
+gem 'asciidoctor'
+gem 'jekyll', group: :jekyll_plugins
+gem 'wdm', '~> 0.1.1' if Gem.win_platform?
+group :jekyll_plugins do
+  gem 'jekyll-asciidoc'
+end
+#gem 'pygments.rb', '~> 1.2.1'
+gem 'thread_safe', '~> 0.3.6'
+gem 'slim', '~> 4.0.1'
+gem 'tilt', '~> 2.0.9'
diff --git a/docs/README.adoc b/docs/README.adoc
new file mode 100644
index 0000000..710f784
--- /dev/null
+++ b/docs/README.adoc
@@ -0,0 +1,252 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+= Apache Ignite Documentation
+:toc:
+:toc-title:
+
+== Overview
+The Apache Ignite documentation is maintained in the repository with the code base, in the "/docs" subdirectory. The directory contains the source files, HTML templates and css styles.
+
+
+The Apache Ignite documentation is written in link:https://asciidoctor.org/docs/what-is-asciidoc/[asciidoc].
+The Asciidoc files are compiled into HTML pages and published to https://ignite.apache.org/docs.
+
+
+.Content of the “docs” directory
+[cols="1,4",opts="stretch"]
+|===
+| pass:[_]docs  | The directory with .adoc files and code-snippets.
+| pass:[_]config.yml | Jekyll configuration file.
+|===
+
+
+== Building the Docs Locally
+
+To build the docs locally, you can install `jekyll` and other dependencies on your machine, or you can use Jekyll docker image.
+
+=== Install Jekyll and Asciidoctor
+
+. Install Jekyll by following this instruction:  https://jekyllrb.com/docs/installation/[window=_blank]
+. In the “/docs” directory, run the following command:
++
+[source, shell]
+----
+$ bundle
+----
++
+This should install all dependencies, including `asciidoctor`.
+. Start jekyll:
++
+[source, shell]
+----
+$ bundle exec jekyll s
+----
+The command compiles the Asciidoc files into HTML pages and starts a local webserver.
+
+Open `http://localhost:4000/docs[window=_blank]` in your browser.
+
+=== Run with Docker
+
+The following command starts jekyll in a container and downloads all dependencies. Run the command in the “/docs” directory.
+
+[source, shell]
+----
+$ docker run -v "$PWD:/srv/jekyll" -p 4000:4000 jekyll/jekyll:latest jekyll s
+----
+
+Open `http://localhost:4000/docs[window=_blank]` in your browser.
+
+=== Troubleshooting
+
+Below are some issues you might hit during an installation of the Jekyll environment or while building the tutorials.
+Let us know if you come across a new and found a workaround.
+
+==== MacOS: Issues with FFI library during Jekyll installation
+
+You should see an error trace similar to this: https://github.com/ffi/ffi/issues/653
+
+Attempt to fix the problem by following this sequence of commands (typically it's the last command only):
+
+[source, text]
+----
+brew reinstall libffi
+export LDFLAGS="-L/usr/local/opt/libffi/lib"
+export CPPFLAGS="-I/usr/local/opt/libffi/include"
+export PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig"
+gem install --user-install bundler jekyll
+----
+
+==== MacOS: jekyll-asciidoc gem is not installed by default
+
+Try to follow this procedure to fix the issue.
+
+* Comment out the `rm -rf $tmp_dir` at the very end of the `build.sh` script, so that the temp folder is not deleted after the execution.
+* Run `build.sh` (fails with `Could not find gem 'jekyll-asciidoc'...` error).
+* Go to `tmp/web_site` folder.
+* Run `bundle install`.
+* Revert the `build.sh` script and run it again.
+
+==== MacOS: can't build project due to inability to load openssl
+
+You should see an error like this:
+
+`LoadError: dlopen(/Users/dmagda/.rbenv/versions/2.6.2/lib/ruby/2.6.0/x86_64-darwin18/digest/sha1.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
+   Referenced from: /Users/dmagda/.rbenv/versions/2.6.2/lib/ruby/2.6.0/x86_64-darwin18/digest/sha1.bundle`
+
+Try to upgrade Ruby, rbenv to the latest version (2.7.1) and then reinstall Jekyll. Use the official instructions:
+https://jekyllrb.com/docs/installation/
+
+== How to Contribute
+
+If you want to contribute to the documentation, add or modify the relevant page in the `docs/_docs` directory.
+This directory contains all .adoc files (which are then rendered into HTML pages and published on the web-site).
+
+Because we use asciidoc for documentation, consider the following points:
+
+* Get familiar with the asciidoc format: https://asciidoctor.org/docs/user-manual/. You don’t have to read the entire manual. Search through it when you want to learn how to create a numbered list, or insert an image, or use italics.
+* Please read the link:https://asciidoctor.org/docs/asciidoc-recommended-practices:[AsciiDoc Recommended Practices] and try to adhere to those when editing the .adoc source files.
+
+
+The following sections explain specific asciidoc syntax that we use.
+
+=== Table of content
+
+The table of content is defined in the `_data/toc.yaml` file.
+If you want to add a new page, make sure to update the TOC.
+
+=== Changing an URL of an existing page
+
+If you rename an already published page or change the page's path in the `/_data/toc.yaml` file,
+you must configure a proper redirect from the old to the new URL in the following files of the Ignite website:
+https://github.com/apache/ignite-website/blob/master/.htaccess
+
+Reach out to documentation maintainers if you need any help with this.
+
+=== Links to other sections in the docs
+All .adoc files are located in the "docs/_docs" directory.
+Any link to the files within the directory must be relative to that directory.
+Remove the file extension (.adoc).
+
+For example:
+[source, adoc]
+----
+link:persistence/native-persistence[Native Persistence]
+----
+
+This is a link to the Native Persistence page.
+
+=== Links to external resources
+
+When referencing an external resource, make the link to open in a new window by adding the `window=_blank` attribute:
+
+[source, adoc]
+----
+link:https://docs.oracle.com/javase/8/docs/technotes/guides/security/SunProviders.html#SunJSSE_Protocols[Supported protocols,window=_blank]
+----
+
+
+=== Tabs
+
+We use custom syntax to insert tabs. Tabs are used to provide code samples for different programming languages.
+
+Tabs are defined by the `tabs` block:
+```
+[tabs]
+--
+individual tabs are defined here
+--
+```
+
+Each tab is defined by the 'tab' directive:
+
+```
+tab:tab_name[]
+```
+
+where `tab_name` is the title of the tab.
+
+The content of the tab is everything that is given between the tab title, and the next tab or the end of the block.
+
+```asciidoc
+[tabs]
+--
+tab:XML[]
+
+The content of the XML tab goes here
+
+tab:Java[]
+
+The content of the Java tab is here
+
+tab:C#/.NET[]
+
+tab:C++[unsupported]
+
+--
+```
+
+=== Callouts
+
+Use the syntax below if you need to bring reader's attention to some details:
+
+[NOTE]
+====
+[discrete]
+=== Callout Title
+Callout Text
+====
+
+Change the callout type to `CAUTION` if you want to put out a warning:
+
+[CAUTION]
+====
+[discrete]
+=== Callout Title
+Callout Text
+====
+
+=== Code Snippets
+
+Code snippets must be taken from a compilable source code file (e.g. java, cs, js, etc).
+We use the `include` feature of asciidoc.
+Source code files are located in the `docs/_docs/code-snippets/{language}` folders.
+
+
+To add a code snippet to a page, follow these steps:
+
+* Create a file in the code snippets directory, e.g. _docs/code-snippets/java/org/apache/ignite/snippets/JavaThinClient.java
+
+* Enclose the piece of code you want to include within named tags (see https://asciidoctor.org/docs/user-manual/#by-tagged-regions). Give the tag a self-evident name.
+For example:
++
+```
+[source, java]
+----
+// tag::clientConnection[]
+ClientConfiguration cfg = new ClientConfiguration().setAddresses("127.0.0.1:10800");
+try (IgniteClient client = Ignition.startClient(cfg)) {
+    ClientCache<Integer, String> cache = client.cache("myCache");
+    // get data from the cache
+}
+// end::clientConnection[]
+----
+```
+
+* Include the tag in the adoc file:
++
+[source, adoc,subs="macros"]
+----
+\include::{javaCodeDir}/JavaThinClient.java[tag=clientConnection,indent=0]
+----
diff --git a/docs/_config.yml b/docs/_config.yml
new file mode 100644
index 0000000..93bf632
--- /dev/null
+++ b/docs/_config.yml
@@ -0,0 +1,46 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+exclude: [guidelines.md,  "Gemfile", "Gemfile.lock", README.adoc, "_docs/code-snippets", "_docs/includes", '*.sh']
+attrs: &asciidoc_attributes
+  version: 3.0.0-alpha1
+  base_url: /docs
+  stylesdir: /docs/assets/css
+  imagesdir: /docs
+  source-highlighter: rouge
+  table-stripes: even
+  javadoc_base_url: https://ignite.apache.org/releases/{version}/javadoc
+  javaCodeDir: code-snippets/java/src/main/java/org/apache/ignite/snippets
+  csharpCodeDir: code-snippets/dotnet
+  githubUrl: https://github.com/apache/ignite/tree/master
+  docSourceUrl: https://github.com/apache/ignite/tree/IGNITE-7595/docs
+collections:
+  docs:
+    permalink: /docs/:path:output_ext
+    output: true
+defaults:
+  -
+    scope:
+      path: ''
+    values:
+      layout: 'doc'
+  -
+    scope:
+      path: '_docs'
+    values:
+      toc: ignite 
+asciidoctor:
+  base_dir: _docs/ 
+  attributes: *asciidoc_attributes
+   
diff --git a/docs/_data/toc.yaml b/docs/_data/toc.yaml
new file mode 100644
index 0000000..55b8a91
--- /dev/null
+++ b/docs/_data/toc.yaml
@@ -0,0 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+- title: Documentation Overview
+  url: index
+- title: Getting Started Guide
+  url: getting-started-guide
+- title: Installation
+  url: installing-using-exe
+
diff --git a/docs/_docs/includes/prereqs.adoc b/docs/_docs/includes/prereqs.adoc
new file mode 100644
index 0000000..013b732
--- /dev/null
+++ b/docs/_docs/includes/prereqs.adoc
@@ -0,0 +1,19 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+[width="100%",cols="1,3"]
+|===
+|JDK | 11 and later
+|OS |Linux (Ubuntu 20.04), Windows (10 Home), MacOS
+|===
diff --git a/docs/_docs/index.adoc b/docs/_docs/index.adoc
new file mode 100644
index 0000000..051c1d7
--- /dev/null
+++ b/docs/_docs/index.adoc
@@ -0,0 +1,40 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+= Apache Ignite Documentation
+
+Apache Ignite is a distributed database for in-memory speed and high-performance computing.
+
+The technical documentation introduces you to the key capabilities, shows how to use certain features of the current Apache Ignite version.
+
+NOTE: Though this alpha release version does not support most of the Apache Ignite functionality,
+it introduces several new features, which are to be accompanied with other improvements from the link:https://cwiki.apache.org/confluence/display/IGNITE/Ignite+Enhancement+Proposal[Ignite Enhancement Proposal,window=_blank] list.
+
+This version of Apache Ignite, incorporating all the best solutions over the past years,
+possesses the highest level of usability thanks to the following improvements:
+
+* Schema-first approach: This feature introduces one-to-one mapping between data schemas and caches/tables,
+which means that the schema is defined for a cache/table before its creation.
+
+* Unified Configuration: This feature is presented by a set of the following improvements:
+
+- Platform-agnostic configuration representation
+- Clear separation between configuration and any third-party code
+- Predictable configuration lifecycle
+- Consistent runtime configuration change support
+
+* Ignite CLI tool: This tool functions as a single sign-on for any operational, management, and development needs.
+
+
+
diff --git a/docs/_docs/installation/installing-using-exe.adoc b/docs/_docs/installation/installing-using-exe.adoc
new file mode 100644
index 0000000..dd8f2b7
--- /dev/null
+++ b/docs/_docs/installation/installing-using-exe.adoc
@@ -0,0 +1,37 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+= Installing Using Distributive
+
+== Prerequisites
+
+Ignite was tested on:
+
+include::../includes/prereqs.adoc[]
+
+
+== Installing Using Distributive
+
+To install Apache Ignite, perform the following steps:
+
+. Navigate to link:https://ignite.apache.org/download.cgi[Apache Ignite Downloads,window=_blank] page to download the distributive.
+
+. Put the distributed file into the installation folder in your system.
+
+. Either execute the file or run it in the command line.
+
+. Optionally, set the Windows PATH to point to the installation folder and make sure there is no trailing / (or \ for Windows) in the path.
+
+NOTE: Depending on your system, you may need additional permissions during the installation.
+To grant permissions for Linux, run the `chmod +x ignite` standard command.
\ No newline at end of file
diff --git a/docs/_docs/quick-start/getting-started-guide.adoc b/docs/_docs/quick-start/getting-started-guide.adoc
new file mode 100644
index 0000000..3fa6bee
--- /dev/null
+++ b/docs/_docs/quick-start/getting-started-guide.adoc
@@ -0,0 +1,89 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+= Getting Started Guide
+
+== Configuration
+
+Apache Ignite uses HOCON configuration format.
+For more detail, please see the link:https://github.com/lightbend/config/blob/master/HOCON.md[HOCON documentation,window=_blank].
+
+== Ignite CLI tool
+
+Ignite CLI tool is a single entry point for all the Ignite operations.
+For example, it allows you to perform the following actions:
+
+* Manage existing nodes
+* Install new nodes
+* Update old nodes to new versions
+* Install or remove optional modules
+
+The Ignite CLI tool uses REST API as a communication protocol between the node and the CLI,
+allowing you to configure the node.
+
+Below is a list of Ignite CLI tool commands with short descriptions:
+
+* `init`: Installs Ignite core modules locally.
+
+* `module`: Manages optional Ignite modules and external artifacts.
+
+- `list`: Shows the list of available optional Ignite modules.
+- `add`: Adds an optional Ignite module or an external artifact.
+- `remove`: Adds an optional Ignite module or an external artifact.
+
+* `node`: Starts, stops and manages locally running Ignite nodes.
+
+- `start`: Starts an Ignite node locally.
+- `stop`: Stops a locally running Ignite node.
+- `classpath`: Shows the current classpath used by the Ignite nodes.
+- `list`: Shows the list of currently running local Ignite nodes.
+
+* `config`: Inspects and updates Ignite cluster configuration.
+
+- `get`: Gets current Ignite cluster configuration values.
+- `set`: Updates Ignite cluster configuration values.
+
+== Optional modules
+
+Ignite ships with a number of modules that provide various functionality. You can enable modules one by one, as required.
+
+WARNING: In the current alpha release, modules functionality is disabled.
+
+But you can still add Maven dependencies using the following command:
+
+`Ignite module add mvn:artifactId:groupId:version`
+
+It downloads the modules from Maven and adds a classpath to the server.
+
+== Work with a node
+
+The steps below illustrate basic node operations.
+
+. Use the `ignite init` command to start the configuration process.
+
+. To start a node, use the `ignite node start` command.
+Specify the `consistent-id` parameter for a certain node.
+
+. To stop a node, use the `ignite node stop` command.
+Specify the `consistent-id` parameter for a certain node.
+
+. To view the list of active nodes, use the `ignite node list` command. This command also displays the path to the log file.
+
+. To view the log, use the log file path from the previous step result. To open the log file, use any suitable approach.
+For example, use the `cat` standard command for Linux.
+
+
+
+
+
diff --git a/docs/_includes/copyright.html b/docs/_includes/copyright.html
new file mode 100644
index 0000000..00e196c
--- /dev/null
+++ b/docs/_includes/copyright.html
@@ -0,0 +1,22 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<div class="copyright">
+ © {{ "today" | date: "%Y" }} The Apache Software Foundation.<br/>
+Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are either registered trademarks or trademarks of The Apache Software Foundation. 
+
+</div>
diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html
new file mode 100644
index 0000000..76a3ffe
--- /dev/null
+++ b/docs/_includes/footer.html
@@ -0,0 +1,20 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+      {% assign doc_var = page.leftNav | append: "_var" %}
+      {% assign base_url = '' %}
+<footer>
+</footer>
diff --git a/docs/_includes/header.html b/docs/_includes/header.html
new file mode 100644
index 0000000..649dcba
--- /dev/null
+++ b/docs/_includes/header.html
@@ -0,0 +1,36 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<!--header>
+    <button type='button' class='menu' title='Docs menu'>
+	  <img src="{{'assets/images/menu-icon.svg'|relative_url}}"/>
+    </button>
+    
+    <nav>
+   
+    </nav>
+    <form class='search'>
+        <button class="search-close" type='button'><img src='{{"assets/images/cancel.svg"|relative_url}}'></button>
+        <input type="search" placeholder="Search…" id="search-input">
+    </form>
+	<button type='button' class='search-toggle'><img src='{{"assets/images/search.svg"|relative_url}}'></button>
+    <button type='button' class='top-nav-toggle'>⋮</button>
+    <a href="https://github.com/ignite" title='GitHub' class='github' target="_blank">
+        <img src="{{'assets/images/github-gray.svg'|relative_url}}" alt="GitHub logo">
+    </a>
+</header-->
+
diff --git a/docs/_includes/left-nav.html b/docs/_includes/left-nav.html
new file mode 100644
index 0000000..6e4d223
--- /dev/null
+++ b/docs/_includes/left-nav.html
@@ -0,0 +1,88 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+{% assign prefix = site.attrs.base_url  %}
+{% assign normalized_path = page.url | replace: ".html","" | remove_first: prefix %}
+{% if page.toc != false %}
+<nav class='left-nav' data-swiftype-index='false'>
+
+    {% for guide in site.data.toc %}
+    <li>
+        {% if guide.items %}
+
+        {% assign guide_class = 'collapsed' %}
+
+        {% capture submenu %}
+        {% for chapter in guide.items %}
+
+        {% assign chapter_class = 'collapsed' %}
+        {% assign normalized_chapter_url = chapter.url | prepend: "/" %}
+        {% if normalized_path == normalized_chapter_url %}
+        {% assign guide_class = 'expanded' %}
+        {% assign chapter_class = 'expanded' %}
+        {% endif %}
+
+    <li>
+        {% if chapter.items %}
+        {% assign matching_items_count = chapter.items | where: 'url', normalized_path | size %}
+        {% if matching_items_count != 0 %}
+        {% assign chapter_class = 'expanded parent' %}
+        {% endif %}
+        <button
+                type='button'
+                class='{{chapter_class}} {% if normalized_path == normalized_chapter_url %}active{% endif %}'>
+            {{chapter.title}}<img class="state-indicator" src="{{'assets/images/left-nav-arrow.svg' | relative_url}}">
+        </button>
+        <nav class="sub_pages {{chapter_class}}">
+
+            {% for subpage in chapter.items %}
+            {% assign normalized_subpage_url = subpage.url | prepend: "/" %}
+            {% if normalized_path == normalized_subpage_url %}
+            {% assign guide_class = 'expanded' %}
+            {% assign chapter_class = 'expanded' %}
+            {% endif %}
+
+    <li><a href="{{prefix}}/{{subpage.url}}"
+           class='{% if normalized_path == normalized_subpage_url %}active{% endif %}'>{{subpage.title}}</a></li>
+    {% endfor %}
+</nav>
+{% else %}
+<a href="{{prefix}}{{chapter.url|relative_url}}"
+
+   class='{% if normalized_path == normalized_chapter_url %}active{% endif %}'
+>{{chapter.title}}</a>
+{% endif %}
+</li>
+{% endfor %}
+
+{% endcapture %}
+
+<button type='button' data-guide-url="{{guide.url}}"
+        class='group-toggle {{guide_class}} {% if page.url contains guide.url %}parent{% endif %}'>{{guide.title}}<img
+        class="state-indicator" src="{{'assets/images/left-nav-arrow.svg'|relative_url}}"></button>
+<nav class='nav-group {{guide_class}}'>
+    {{ submenu }}
+</nav>
+{% else %}
+
+<a href="{{prefix}}{{guide.url|relative_url}}" class='{% if guide.url == normalized_path %}active{% endif %}'>{{guide.title}}</a>
+{% endif %}
+</li>
+{% endfor %}
+</nav>
+<div class="left-nav__overlay"></div>
+{% endif %}
diff --git a/docs/_includes/right-nav.html b/docs/_includes/right-nav.html
new file mode 100644
index 0000000..7fccc8a
--- /dev/null
+++ b/docs/_includes/right-nav.html
@@ -0,0 +1,21 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<nav class="right-nav" data-swiftype-index='false'>
+    {{ page.document | tocify_asciidoc: 6 }}
+    {% include footer.html %}
+</nav>
diff --git a/docs/_includes/section-toc.html b/docs/_includes/section-toc.html
new file mode 100644
index 0000000..8e793fc
--- /dev/null
+++ b/docs/_includes/section-toc.html
@@ -0,0 +1,31 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+{% assign s = include.section %}
+
+{% if include.title %}
+<a {% if s.url %} href="{{site.attrs.base_url}}/{{s.url}}" {% endif %}>{{s.title}}</a>
+{% endif %}
+
+{% if s.items %}
+    <ul class='sub_pages'>
+    {% for subpage in s.items %}
+        <li><a href="{{site.attrs.base_url}}/{{subpage.url}}" class=''>{{subpage.title}}</a></li>
+    {% endfor %}
+    </ul>
+{% endif %}
+
diff --git a/docs/_includes/toc.html b/docs/_includes/toc.html
new file mode 100644
index 0000000..683b400
--- /dev/null
+++ b/docs/_includes/toc.html
@@ -0,0 +1,63 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+
+<div class="toc">
+{% assign path =  page.path | remove: "/index.adoc" | remove_first: "_" | remove_first:  page.collection | remove_first: "/"  %}
+
+{% assign current_guide = path | split: "/" | first %}
+{% assign section = path | remove: current_guide | remove : "/" %}
+
+
+{% if current_guide != nil %}
+
+    {% assign current_guide_url = current_guide | prepend: "/" %} 
+
+
+    {% assign guide = site.data.toc | where: "url", current_guide_url | first %} 
+
+
+    {% if section != "" %}
+       {% assign section_url = "/" | append: current_guide | append: "/" | append: section %}
+       {% assign sect = guide.items | where: "url", section_url | first %}
+
+       {% include section-toc.html section=sect title=false %}   
+    {% else %}
+        <ul>
+            {% for sect in guide.items %}
+               <li>
+                   {% include section-toc.html section=sect title=true%}   
+               </li>
+            {% endfor %}
+        </ul> 
+    {% endif %}
+{% else %}  
+    {% for guide in site.data.toc %}
+
+        <h2> 
+<a href="{{site.attrs.base_url}}{{guide.url}}" class=''>{{guide.title}}</a> </h2>
+        {% if guide.items %}
+        <ul>
+          {% for sect in guide.items %}
+              <li>
+                  {% include section-toc.html section=sect title=true%}   
+              </li>
+          {% endfor %}
+        </ul>
+        {% endif %}
+    {% endfor %}
+{% endif %}
+</div>
diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html
new file mode 100644
index 0000000..9c7a42e
--- /dev/null
+++ b/docs/_layouts/default.html
@@ -0,0 +1,72 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<!DOCTYPE html>
+
+      {% assign doc_var = page.leftNav | append: "_var" %}
+      
+<html lang="en">
+<head>
+    <!-- Global site tag (gtag.js) - Google Analytics -->
+    <script async src="https://www.googletagmanager.com/gtag/js?id=UA-1382082-1"></script>
+    <script>
+    window.dataLayer = window.dataLayer || [];
+    function gtag(){dataLayer.push(arguments);}
+    gtag('js', new Date());
+
+    gtag('config', 'UA-61232409-1');
+    </script>
+
+    {% if page.content == nil or page.content == ""  %}
+<META NAME="ROBOTS" CONTENT="NOINDEX">
+{% endif %}
+
+    <meta charset="UTF-8">
+    <title>{{page.title}} | Ignite Documentation</title>
+    {% if site.attrs.base_url contains "/latest" %}
+    <link rel="canonical" href="{{page.id | replace_first: site.version, 'latest' }}" />
+    {% else %}
+    <link rel="canonical" href="{{page.id}}" />
+    {% endif %}
+	{% capture timestamp %}{{"now"| date: '%s'}}{% endcapture %}
+	<link rel="stylesheet" href="{{'assets/css/styles.css?'|append: timestamp |relative_url}}">
+    <link rel="stylesheet" href="{{'assets/css/asciidoc-pygments.css'|relative_url}}">
+    <link rel="shortcut icon" href="{{'/favicon.ico'|relative_url}}">
+    <meta name='viewport' content='width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0'>
+
+	<link rel="stylesheet"
+	  href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
+
+    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
+    <script type="text/javascript" src="{{'assets/js/jquery.swiftype.autocomplete.js?' |append: timestamp |relative_url}}"></script>
+    <script type="text/javascript" src="{{'assets/js/anchor.min.js?'|append: timestamp|relative_url}}"></script>
+    
+
+</head>
+<body>
+    {% include header.html %}
+    {{content}}
+    <script>
+    // inits deep anchors -- needs to be done here because of https://www.bryanbraun.com/anchorjs/#dont-run-it-too-late 
+    anchors.add('.page-docs h1, .page-docs h2, .page-docs h3:not(.discrete), .page-docs h4, .page-docs h5');
+    anchors.options = {
+        placement: 'right',
+        visible: 'always'
+    };
+    </script>
+</body>
+<script type='module' src='{{"assets/js/index.js?"|append: timestamp | relative_url}}' async></script>
+</html>
diff --git a/docs/_layouts/doc.html b/docs/_layouts/doc.html
new file mode 100644
index 0000000..9d5e831
--- /dev/null
+++ b/docs/_layouts/doc.html
@@ -0,0 +1,33 @@
+---
+layout: default
+---
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+	 <link rel="stylesheet" href="{{'assets/css/docs.css'|relative_url}}">
+<section class='page-docs'>
+    {% include left-nav.html %}
+    <article data-swiftype-index='true'>
+        <a class='edit-link' href="{{site.attrs.docSourceUrl}}/{{page.path}}" target="_blank">Edit</a>
+        {% if page.path contains ".adoc" %}
+            <h1>{{page.title}}</h1>
+        {% endif %}
+        {{content}}
+        {% include copyright.html %}
+    </article>
+    {% include right-nav.html %}    
+</section>
+<script type='module' src='{{"assets/js/code-copy-to-clipboard.js"|relative_url}}' async></script>
diff --git a/docs/_layouts/toc.html b/docs/_layouts/toc.html
new file mode 100644
index 0000000..682f77c
--- /dev/null
+++ b/docs/_layouts/toc.html
@@ -0,0 +1,32 @@
+---
+layout: default
+---
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+	 <link rel="stylesheet" href="{{'assets/css/docs.css'|relative_url}}">
+<section class='page-docs'>
+    {% include left-nav.html %}
+    <article data-swiftype-index='true'>
+        {% if page.path contains ".adoc" %}
+            <h1>{{page.title}}</h1>
+        {% endif %}
+        {{ content }}
+		{% include toc.html %}
+    </article>
+    {% include right-nav.html %}    
+</section>
+<script type='module' src='{{"assets/js/code-copy-to-clipboard.js"|relative_url}}' async></script>
diff --git a/docs/_plugins/asciidoctor-extensions.rb b/docs/_plugins/asciidoctor-extensions.rb
new file mode 100644
index 0000000..715d33d
--- /dev/null
+++ b/docs/_plugins/asciidoctor-extensions.rb
@@ -0,0 +1,180 @@
+# MIT License
+#
+# Copyright (C) 2012-2020 Dan Allen, Sarah White, Ryan Waldron, and the
+# individual contributors to Asciidoctor.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+require 'asciidoctor'
+require 'asciidoctor/extensions'
+require 'set'
+
+include Asciidoctor
+
+class TabsBlock < Asciidoctor::Extensions::BlockProcessor
+  use_dsl
+
+  named :tabs
+  on_context :open
+  parse_content_as :simple
+
+  def render_tab(parent, name, options, tab_content, use_xml)
+    if (options == 'unsupported')
+        content = Asciidoctor.convert "[source]\n----\nThis API is not presently available for #{name}."+( use_xml ? " You can use XML configuration." : "")+"\n----", parent: parent.document
+        return "<code-tab data-tab='#{name}' data-unavailable='true'>#{content}</code-tab>"
+    else 
+        if tab_content.empty?
+          warn "There is an empty tab (#{name}) on the " + parent.document.attributes['doctitle'] + " page: " + parent.document.attributes['docfile']
+         # File.write("log.txt", "There is an empty tab (#{name}) on the " + parent.document.attributes['doctitle'] + " page: " + parent.document.attributes['docfile'] + "\n", mode: "a")
+        end
+        content =  Asciidoctor.convert tab_content, parent: parent.document
+        return "<code-tab data-tab='#{name}'>#{content}</code-tab>"
+    end
+  end
+
+
+  def process parent, reader, attrs
+    lines = reader.lines
+
+    html = ''
+    tab_content = ''
+    name = ''
+    options = ''
+    tabs = Set.new
+    lines.each do |line| 
+       if (line =~ /^tab:.*\[.*\]/ ) 
+          # render the previous tab if there is one
+          unless name.empty?
+              html = html + render_tab(parent, name, options, tab_content, tabs.include?("XML"))
+          end
+
+          tab_content = ''; 
+          name = line[/tab:(.*)\[.*/,1] 
+          tabs << name
+          options = line[/tab:.*\[(.*)\]/,1] 
+       else
+          tab_content = tab_content + "\n" + line; 
+       end  
+    end 
+
+    unless name.empty?
+       html = html + render_tab(parent, name, options, tab_content, tabs.include?("XML"))
+    end
+
+
+    html = %(<code-tabs>#{html}</code-tabs>)
+
+    create_pass_block parent, html, attrs
+    
+  end
+end
+
+
+Asciidoctor::Extensions.register do
+  block TabsBlock
+end
+
+
+class JavadocUrlMacro < Extensions::InlineMacroProcessor
+  use_dsl
+
+  named :javadoc
+  name_positional_attributes 'text'
+
+  def process parent, target, attrs
+
+    parts = target.split('.')
+
+    if attrs['text'] == nil
+      text = parts.last();
+    else
+      text = attrs['text'] 
+    end
+
+    target = parent.document.attributes['javadoc_base_url'] + '/' + parts.join('/') + ".html" 
+    attrs.store('window', '_blank')
+
+    (create_anchor parent, text, type: :link, target: target, attributes: attrs).render
+  end
+end
+
+Asciidoctor::Extensions.register do
+  inline_macro JavadocUrlMacro  
+end
+Extensions.register do 
+ inline_macro do
+   named :link
+   parse_content_as :text
+
+   process do |parent, target, attrs|
+#     if(parent.document.attributes['latest'])
+#      base_url = parent.document.attributes['base_url'] + '/latest' 
+#     else
+#      base_url = parent.document.attributes['base_url'] + '/' + parent.document.attributes['version'] 
+#     end
+
+#    print parent.document.attributes
+    base_url = parent.document.attributes['base_url'] # + '/' + parent.document.attributes['version']
+   
+     if (text = attrs['text']).empty?
+       text = target
+     end
+
+     if text =~ /(\^|, *window=_?blank *)$/
+       text = text.sub(/\^$/,'')
+       text = text.sub(/, *window=_?blank *$/,'')
+       attrs.store('window', '_blank')
+     end
+
+     if target.start_with? 'http','ftp', '/', '#'
+     else 
+       target = base_url + '/' + %(#{target})
+     end
+
+     (create_anchor parent, text, type: :link, target: target, attributes: attrs).render
+   end
+ end
+end
+
+class ImageTreeProcessor < Extensions::Treeprocessor
+  def process document
+
+    image_width = (document.attr 'image_width', "")
+
+    imagedir =    document.attributes['docdir'] 
+
+    #scan for images
+    (document.find_by context: :image).each do |img| 
+
+        imagefile = imagedir + '/' + img.attributes['target']
+
+       if !File.file?(imagefile) 
+          warn 'Image does not exist: ' +imagefile 
+       end
+
+       if !(img.attributes['width'] || image_width.empty?)
+           img.attributes['width'] = image_width
+       end
+    end
+  end
+end
+
+Extensions.register do
+  treeprocessor ImageTreeProcessor 
+end
diff --git a/docs/_sass/callouts.scss b/docs/_sass/callouts.scss
new file mode 100644
index 0000000..2aad06f
--- /dev/null
+++ b/docs/_sass/callouts.scss
@@ -0,0 +1,75 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+aside {
+    border-left: 6px solid var(--callout-border);
+    background: var(--callout-background);
+    color: var(--callout-text);
+    margin-left: 0;
+    padding-right: 10px;
+	padding-left:20px;
+    position: relative;
+    display: flex;
+    margin-bottom: 16px;
+	
+	h3 {
+		font-weight: bold;
+		color:var(--callout-text);
+	}
+
+    &+aside {
+        margin-top: 1em;
+    }
+
+    &:before {
+       	font-size: 18px;
+        width: 78px;
+        flex: 0 0 auto;
+        align-self: center;
+        text-align: center;
+    }
+
+    .callout__margin-collapse-root {
+        margin-top: 16px;
+        margin-bottom: 16px;
+    }
+
+    &.note {
+        --callout-text: #723c81;
+        --callout-border: #723c81;
+        --callout-background: #f7f7f7;
+        --callout-icon: "\2B50";
+    }
+	
+    &.tip {
+        --callout-text: #af4e17;
+        --callout-border: #f18329;
+        --callout-background: #f7f7f7;
+        --callout-icon: "\2B50";
+    }
+
+    &.caution, &.important {
+        --callout-text: #65666a;
+        --callout-border: #e9502c;
+        --callout-background: #f7f7f7;
+        --callout-icon: "\01F449";
+    }
+
+    &.warning {
+        --callout-text: #df2226;
+        --callout-border: #df2226;
+        --callout-background: #f7f7f7;
+        --callout-icon: "\01F4CD";
+    }
+}
diff --git a/docs/_sass/code.scss b/docs/_sass/code.scss
new file mode 100644
index 0000000..d0e2eea
--- /dev/null
+++ b/docs/_sass/code.scss
@@ -0,0 +1,115 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+pre, pre.rouge {
+    padding: 8px 15px;
+    background: var(--block-code-background) !important;
+    border-radius: 5px;
+    border: 1px solid #e5e5e5;
+    overflow-x: auto;
+    // So code copy button doesn't overflow
+    min-height: 36px;
+	line-height: 18px;
+    color: #545454;
+}
+
+code {
+    color: #545454;
+}
+
+pre.rouge code {
+    background: none !important;
+}
+
+pre.rouge .tok-err {
+  	border: none !important;
+  }
+
+
+.highlight .err {
+  background: initial !important;
+  color: initial !important;
+}
+
+code-tabs.code-tabs__initialized {
+    display: block;
+    margin-bottom: 1.5em;
+
+    nav {
+        border-bottom: 1px solid #e0e0e0
+    }
+
+    nav button {
+        background: white;
+        color: inherit;
+        border: none;
+        padding: 0.7em 1em;
+        cursor: pointer;
+        transform: translateY(1px);
+		font-size: .9em;
+
+        &.active {
+            border-bottom: var(--orange-line-thickness) solid var(--link-color);
+        }
+		&.grey {
+		  color: grey;
+		}
+    }
+
+    code-tab:not([hidden]) {
+        display: block;
+    }
+}
+
+*:not(pre) > code {
+    background: var(--inline-code-background);
+    padding: 0.1em 0.5em;
+    background-clip: padding-box;
+    border-radius: 3px;
+    color: #545454;
+    font-size: 90%
+}
+
+// Required for copy button positioning
+.listingblock .content {
+    position: relative;
+}
+
+.copy-to-clipboard-button {
+    margin: 0;
+    padding: 0;
+    width: 36px;
+    height: 36px;
+    display: flex;
+    align-items: center;
+    justify-content: center;
+    background: none;
+    border: none;
+
+    position: absolute;
+    top: 0;
+    right: 0;
+    background: url('../images/copy-icon.svg') center center no-repeat;
+
+    &.copy-to-clipboard-button__success {
+        color: green;
+        background: none;
+        font-size: 20px;
+        font-weight: bold;
+    }
+
+    &:hover:not(.copy-to-clipboard-button__success) {
+        filter: var(--gg-orange-filter);
+    }
+}
diff --git a/docs/_sass/docs.scss b/docs/_sass/docs.scss
new file mode 100644
index 0000000..58dc0f2
--- /dev/null
+++ b/docs/_sass/docs.scss
@@ -0,0 +1,238 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+section.page-docs {
+    display: grid;
+    transition: grid-template-columns 0.15s;
+    grid-template-columns: auto 1fr auto;
+    grid-template-rows: 100%;
+    grid-template-areas: 'left-nav content right-nav';
+    line-height: 20px;
+    max-width: 1440px;
+    margin: auto;
+    width: 100%;
+
+    &>article {
+        // box-shadow: -1px 13px 20px 0 #696c70;
+        border-left: 1px solid #eeeeee;
+        background-color: #ffffff;
+        padding: 0 50px 30px;
+        grid-area: content;
+        overflow: hidden;
+        font-family: sans-serif;
+        font-size: 16px;
+        color: #545454;
+        line-height: 1.6em;
+
+        h1, h2, h3:not(.discrete), h4, h5, strong, th {
+            font-family: 'Open Sans';
+        }
+
+        li {
+            margin-bottom: 0.5em;
+
+            > p {
+                margin-top: 0;
+                margin-bottom: 0;
+            }
+        }
+
+        @media (max-width: 800px) {
+            padding-left: 15px;
+            padding-right: 15px
+        }
+    }
+
+    .edit-link {
+        position:relative;
+        top: 10px;
+        right:10px;
+        float: right;
+        padding-top: calc(var(--header-height) + var(--padding-top));
+        margin-top: calc((-1 * var(--header-height)));
+    }
+
+    h1, h2, h3:not(.discrete), h4, h5 {
+        margin-bottom: 0;
+
+        &[id] {
+            margin-top:  var(--margin-top);
+            margin-bottom: calc(var(--margin-top) * 0.5);
+            // padding-top: calc(var(--header-height) + var(--padding-top));
+            z-index: -1;
+        }
+    }
+
+    .toc > ul {
+        margin: 0;
+    }
+
+
+    .content > .pygments.highlight {
+        margin-top: 0px;
+    }
+
+    .title {
+        font-style: italic;
+    }
+
+    .checkmark:before {
+        content: '\f14a';
+        visibility: visible;
+        font-family: FontAwesome;
+        color: #00a100;
+    }
+    .checkmark {
+        visibility: hidden;
+    }
+
+    .stretch {width: 100%;}
+    h1[id] {
+        --margin-top: 1em;
+    }
+    h2[id] {
+        --margin-top: 1.2em;
+    }
+    .toc > h2 {
+        --margin-top: 1em;
+    }
+
+    h3[id] {
+        --margin-top: 1.2em;
+    }
+    h4[id] {
+        --margin-top: 0.5em;
+    }
+    h5[id] {
+        --margin-top: 1.67em;
+    }
+    .imageblock .content, .image {
+        text-align: center;
+        display: block;
+    }
+    .imageblock, .image {
+        img:not([width]):not([height]) {
+            width: auto;
+            height: auto;
+            max-width: 100%;
+            max-height: 450px;
+        }
+    }
+    strong {
+        color: #757575;
+    }
+
+    th.valign-top,td.valign-top {
+        vertical-align:top;
+    }
+
+    table {
+        margin: 16px 0;
+    }
+
+    table tr td {
+        hyphens: auto;
+    }
+
+    table thead,table tfoot {
+        background:#f7f8f7;
+        color: #757575;
+    }
+    table tr.even,table tr.alt{background:#f8f8f7}
+    table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7}
+
+}
+.copyright {
+    margin-top: 3em;
+    padding-top: 1em;
+    border-top: 1px solid #f0f0f0;
+    font-size: 0.9em;
+    line-height: 1.8em;
+    color: #757575;
+}
+
+body.hide-left-nav {
+    .left-nav {
+        display: none;
+    }
+}
+
+.left-nav {
+    top: 0;
+    bottom: 0;
+    position: -webkit-sticky;
+    position: sticky;
+}
+.left-nav {
+    max-height: calc(100vh );
+    grid-area: left-nav;
+}
+.right-nav {
+    grid-area: right-nav;
+}
+.left-nav__overlay {
+    display: none;
+    background: rgba(0, 0, 0, 0.50);
+    z-index: 1;
+    position: fixed;
+    top: var(--header-height);
+    bottom: 0;
+    left: 0;
+    right: 0;
+}
+@media (max-width: 990px) {
+    body:not(.hide-left-nav) {
+        .left-nav__overlay {
+            display: block;
+        }
+    }
+    nav.left-nav {
+        background: #fafafa;
+        grid-area: left-nav;
+        box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.24), 0 0 4px 0 rgba(0, 0, 0, 0.12);
+        min-height: calc(100vh - var(--header-height));
+        max-height: calc(100vh - var(--header-height));
+        position: fixed;
+        bottom: 0;
+        top: var(--header-height);
+        z-index: 2;
+    }
+    section.page-docs > article {
+        grid-column-start: left-nav;
+        grid-column-end: content;
+        grid-row: content;
+    }
+}
+@media (max-width: 800px) {
+    nav.right-nav {
+        display: none;
+    }
+}
+
+:target:before {
+    content: "";
+    display: block;
+    margin-top: calc(var(--header-height) * -1);
+    height: var(--header-height);
+    width: 1px;
+}
+@media (min-width: 600px) and  (max-width: 900px) {
+    :target:before {
+        content: "";
+        display: block;
+        width: 1px;
+        margin-top: -150px;
+        height: 150px;
+    }
+}
diff --git a/docs/_sass/footer.scss b/docs/_sass/footer.scss
new file mode 100644
index 0000000..c8afea4
--- /dev/null
+++ b/docs/_sass/footer.scss
@@ -0,0 +1,48 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+body > footer {
+    border-top: 2px solid #dddddd;
+    height: var(--footer-height);
+    font-size: 16px;
+    color: #393939;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+
+    @media (max-width: 570px) {
+        .copyright__extra {
+            display: none;
+        }
+    }
+}
+.right-nav footer {
+    font-size: 12px;
+    padding: calc(var(--footer-gap) * 0.3) 0 5px;;
+    text-align: left;
+    margin: auto 0 0;
+
+    a {
+        margin: 0;
+    }
+
+    img {
+        width: 70px;
+    }
+
+    .copyright {
+        display: none;
+    }
+}
diff --git a/docs/_sass/github.scss b/docs/_sass/github.scss
new file mode 100644
index 0000000..069805c
--- /dev/null
+++ b/docs/_sass/github.scss
@@ -0,0 +1,223 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+.highlight table td { padding: 5px; }
+.highlight table pre { margin: 0; }
+.highlight .cm {
+  color: #777772;
+  font-style: italic;
+}
+.highlight .cp {
+  color: #797676;
+  font-weight: bold;
+}
+.highlight .c1 {
+  color: #777772;
+  font-style: italic;
+}
+.highlight .cs {
+  color: #797676;
+  font-weight: bold;
+  font-style: italic;
+}
+.highlight .c, .highlight .cd {
+  color: #777772;
+  font-style: italic;
+}
+.highlight .err {
+  color: #a61717;
+  background-color: #e3d2d2;
+}
+.highlight .gd {
+  color: #000000;
+  background-color: #ffdddd;
+}
+.highlight .ge {
+  color: #000000;
+  font-style: italic;
+}
+.highlight .gr {
+  color: #aa0000;
+}
+.highlight .gh {
+  color: #797676;
+}
+.highlight .gi {
+  color: #000000;
+  background-color: #ddffdd;
+}
+.highlight .go {
+  color: #888888;
+}
+.highlight .gp {
+  color: #555555;
+}
+.highlight .gs {
+  font-weight: bold;
+}
+.highlight .gu {
+  color: #aaaaaa;
+}
+.highlight .gt {
+  color: #aa0000;
+}
+.highlight .kc {
+  color: #000000;
+  font-weight: bold;
+}
+.highlight .kd {
+  color: #000000;
+  font-weight: bold;
+}
+.highlight .kn {
+  color: #000000;
+  font-weight: bold;
+}
+.highlight .kp {
+  color: #000000;
+  font-weight: bold;
+}
+.highlight .kr {
+  color: #000000;
+  font-weight: bold;
+}
+.highlight .kt {
+  color: #445588;
+  font-weight: bold;
+}
+.highlight .k, .highlight .kv {
+  color: #000000;
+  font-weight: bold;
+}
+.highlight .mf {
+  color: #009999;
+}
+.highlight .mh {
+  color: #009999;
+}
+.highlight .il {
+  color: #009999;
+}
+.highlight .mi {
+  color: #009999;
+}
+.highlight .mo {
+  color: #009999;
+}
+.highlight .m, .highlight .mb, .highlight .mx {
+  color: #009999;
+}
+.highlight .sb {
+  color: #d14;
+}
+.highlight .sc {
+  color: #d14;
+}
+.highlight .sd {
+  color: #d14;
+}
+.highlight .s2 {
+  color: #d14;
+}
+.highlight .se {
+  color: #d14;
+}
+.highlight .sh {
+  color: #d14;
+}
+.highlight .si {
+  color: #d14;
+}
+.highlight .sx {
+  color: #d14;
+}
+.highlight .sr {
+  color: #009926;
+}
+.highlight .s1 {
+  color: #d14;
+}
+.highlight .ss {
+  color: #990073;
+}
+.highlight .s {
+  color: #d14;
+}
+.highlight .na {
+  color: #008080;
+}
+.highlight .bp {
+  color: #797676;
+}
+.highlight .nb {
+  color: #0086B3;
+}
+.highlight .nc {
+  color: #445588;
+  font-weight: bold;
+}
+.highlight .no {
+  color: #008080;
+}
+.highlight .nd {
+  color: #3c5d5d;
+  font-weight: bold;
+}
+.highlight .ni {
+  color: #800080;
+}
+.highlight .ne {
+  color: #990000;
+  font-weight: bold;
+}
+.highlight .nf {
+  color: #990000;
+  font-weight: bold;
+}
+.highlight .nl {
+  color: #990000;
+  font-weight: bold;
+}
+.highlight .nn {
+  color: #555555;
+}
+.highlight .nt {
+  color: #000080;
+}
+.highlight .vc {
+  color: #008080;
+}
+.highlight .vg {
+  color: #008080;
+}
+.highlight .vi {
+  color: #008080;
+}
+.highlight .nv {
+  color: #008080;
+}
+.highlight .ow {
+  color: #000000;
+  font-weight: bold;
+}
+.highlight .o {
+  color: #000000;
+  font-weight: bold;
+}
+.highlight .w {
+  color: #bbbbbb;
+}
+.highlight {
+  background-color: #f8f8f8;
+}
diff --git a/docs/_sass/header.scss b/docs/_sass/header.scss
new file mode 100644
index 0000000..e45b349
--- /dev/null
+++ b/docs/_sass/header.scss
@@ -0,0 +1,374 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+header {
+
+    min-height: var(--header-height);
+    background: white;
+    display: grid;
+    grid-template-columns: auto auto 1fr auto auto auto;
+    grid-template-areas: 'left-toggle home nav search gh gg';
+    grid-template-rows: 40px;
+    flex-direction: row;
+    align-items: center;
+    justify-content: flex-start;
+    padding: 12px 20px;
+    box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.24), 0 0 4px 0 rgba(0, 0, 0, 0.12);
+    z-index: 1;
+
+    a:hover, button:hover {
+        opacity: 0.85;
+    }
+
+    li:hover .dropdown, a:focus + .dropdown {
+        display: block;
+    }
+
+    .dropdown-arrow {
+        margin-left: 5px;
+        margin-bottom: 3px;
+
+        width: 8px;
+        height: 4px;
+    }
+
+    .dropdown {
+        display: none;
+        position: fixed;
+        top: calc(var(--header-height) - 12px);
+        width: max-content;
+        background: white;
+        box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.24), 0 0 4px 0 rgba(0, 0, 0, 0.12);
+        border-radius: 4px;
+        padding-top: 10px;
+        padding-bottom: 12px;
+        z-index: 2;
+
+        li {
+            display: flex;
+        }
+
+        a {
+            color: grey !important;
+            font-size: 16px;
+            padding-top: 5px;
+            padding-bottom: 4px;
+            &:hover {
+                color: var(--gg-orange) !important;
+            }
+        }
+    }
+
+    .menu {
+        border: none;
+        background: none;
+        width: 40px;
+        height: 40px;
+        margin-right: 12px;
+        cursor: pointer;
+        grid-area: left-toggle;
+
+        img {
+            width: 18px;
+            height: 12px;
+        }
+    }
+
+    .search-toggle, .top-nav-toggle, .github, .search-close {
+        background: none;
+        border: none;
+        padding: 0;
+        width: 36px;
+        height: 36px;
+        display: inline-flex;
+        align-items: center;
+        justify-content: center;
+        color: var(--gg-dark-gray);
+        font-size: 26px;
+    }
+    .search-toggle {
+        grid-area: search;
+    }
+    .top-nav-toggle {
+        grid-area: top-toggle;
+    }
+
+    .home {
+        
+        grid-area: home;
+        margin-right: auto;
+        img {
+            height: 36px;
+        }
+    }
+	
+
+    .search {
+        margin-left: auto;
+        margin-right: 20px;
+        grid-area: search;
+
+        input[type='search'] {
+            color: var(--gg-dark-gray);
+            
+            background: rgba(255, 255, 255, 0.8);
+            border: 1px solid #cccccc;
+            padding: 10px 15px;
+            font-family: inherit;
+            max-width: 148px;
+            height: 37px;
+            font-size: 14px;
+            -webkit-appearance: unset;
+            appearance: unset;
+
+            &[disabled] {
+                opacity: 0.5;
+                cursor: not-allowed;
+            }
+        }
+
+    }
+
+
+    
+         
+
+    &>nav {
+        grid-area: nav;
+        font-size: 18px;
+        display: flex;
+        flex-direction: row;
+        margin: 0 20px;
+
+        li {
+            list-style: none;
+            margin-right: 0.5em;
+            display: flex;
+        }
+
+        a {
+            padding: 9px 14px;
+            color: var(--gg-dark-gray) !important;
+            text-decoration: none;
+            white-space: nowrap;
+
+            &.active {
+                border-radius: 3px;
+                background-color: #f0f0f0;
+            }
+        }
+    }
+
+    .github {
+        grid-area: gh;
+    }
+
+
+    .search-close {
+        margin-right: 10px;
+    }
+
+
+    @media (max-width: 900px) {
+        grid-template-columns: auto auto 1fr auto auto auto;
+        grid-template-areas: 
+            'left-toggle home spacer top-toggle search gh gg'
+            'nav         nav  nav    nav        nav    nav nav';
+
+        nav {
+            justify-content: center;
+            margin: 20px 0 10px;
+        }
+
+        & > nav > li {
+            position: relative;
+        }
+
+        .dropdown {
+            
+            top: calc(var(--header-height) + 25px);
+        }
+    }
+
+    @media (max-width: 600px) {
+        .search {
+            margin-right: 5px;
+            input[type='search'] {
+                max-width: 110px;
+            }
+        }
+    }
+
+    &:not(.narrow-header) {
+        .search-toggle, .top-nav-toggle, .search-close {
+            display: none;
+        }
+    }
+    &.narrow-header {
+        a.home {
+            top: 0;
+        }
+        &:not(.show-nav) {
+            nav {
+                display: none;
+            }
+        }
+        &.show-search {
+            .search-toggle, .home, .top-nav-toggle, .github, .menu {
+                display: none;
+            }
+            .search {
+                grid-column-start: home;
+                grid-column-end: github;
+                width: 100%;
+                display: flex;
+
+                input {
+                    max-width: initial;
+                    width: 100%;
+                }
+            }
+        }
+        &:not(.show-search) {
+            .search {
+                display: none;
+            }
+        }
+        nav {
+            flex-direction: column;
+            justify-content: stretch;
+
+            li {
+                display: flex;
+            }
+
+            a {
+                width: 100%;
+            }
+        }
+    }
+}
+.swiftype-widget {
+
+    .autocomplete {
+        background-color: white;
+        display: block;
+        list-style-type: none;
+        margin: 0;
+        padding: 0;
+        box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.37);
+        position: absolute;
+        border-radius: 3px;
+        text-align: left;
+        right: 75px !important;
+        min-width: 350px;
+
+        ul {
+
+            background-color: white;
+            display: block;
+            list-style-type: none;
+            margin: 0;
+            padding: 0;
+            border-radius: 3px;
+            text-align: left;
+            max-height: 70vh;
+            overflow: auto;
+
+            li {
+                border-top: 1px solid #e5e5e5;
+                border-bottom: 1px solid #fff;
+                cursor: pointer;
+                padding: 10px 8px;
+                font-size: 13px;
+                list-style-type: none;
+                background-image: none;
+                margin: 0;
+              }
+
+            li.active {
+                border-top: 1px solid #cccccc;
+                border-bottom: 1px solid #cccccc;
+                background-color: #f0f0f0;
+            }
+            
+            p {
+                font-size: 13px;
+                line-height: 16px;
+                margin: 0;
+                padding: 0;
+
+                &.url {
+                    font-size: 11px;
+                    color: #999;
+                }
+            }
+            
+            a {
+                font-size: 15px;
+            }
+            em {
+                font-weight: bold
+            }
+        }
+    }   
+}
+section.hero {
+    background-image: url(../images/dev-internal-bg.jpg);
+    background-position: center;
+    background-position-x: left;
+    background-repeat: no-repeat;
+    background-size: cover;
+    display: grid;
+    grid-template-columns: 1fr auto;
+    grid-template-areas: 'title versions';
+    grid-template-rows: 60px;
+    align-items: center;
+    padding: 5px 30px;
+    flex: unset;
+    
+    
+    .title {
+        color: #f3f3f3;
+        text-transform: uppercase;
+        font-size: 22px;
+    }
+
+    select {
+        list-style: none;
+        
+        line-height: 28px;
+        border-radius: 3px;
+    
+        
+        color: #333333;
+        line-height: 24px;
+        padding: 5px 10px;
+        white-space: nowrap;
+        font-size: 14px;
+        background:  #f0f0f0 url("/assets/images/arrow-down.svg") no-repeat center right 5px;
+    }
+}
+
+@media (max-width: 450px) {
+    section.hero {
+        grid-template-rows: auto;
+        padding: 15px;
+    
+        .title {
+            font-size: 18px;
+        }
+    }
+
+}
diff --git a/docs/_sass/layout.scss b/docs/_sass/layout.scss
new file mode 100644
index 0000000..cd0c288
--- /dev/null
+++ b/docs/_sass/layout.scss
@@ -0,0 +1,45 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+body {
+    --header-height: 64px;
+    --footer-height: 104px;
+    --footer-gap: 60px;
+
+    @media (min-width: 451px) and (max-width: 850px) {
+        --header-height: 111px;        
+    }
+
+    padding: 0;
+    margin: 0;
+    display: flex;
+    flex-direction: column;
+    min-height: 100vh;
+
+    &>section {
+        flex: 1;
+    }
+}
+header {
+    position: -webkit-sticky;
+    position: sticky;
+    top: 0;
+    z-index: 2;
+}
+body > footer {
+    margin: var(--footer-gap) 30px 0;
+}
+* {
+    box-sizing: border-box;
+}
diff --git a/docs/_sass/left-nav.scss b/docs/_sass/left-nav.scss
new file mode 100644
index 0000000..0fd55fd
--- /dev/null
+++ b/docs/_sass/left-nav.scss
@@ -0,0 +1,109 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+.left-nav {
+    padding: 10px 20px;
+    width: 289px;
+    overflow-y: auto;
+/*    height: calc(100vh - var(--header-height)); */
+    font-family: 'Open Sans';
+    padding-top: var(--padding-top);
+
+
+    li {
+        list-style: none;
+    }    
+    a, button {
+        text-decoration: none;
+        color: #757575;
+        font-size: 16px;
+        display: inline-flex;
+        width: 100%;
+        margin: 2px 0;
+        padding: 0.25em 0.375em;
+        background: none;
+        border: none;
+        cursor: pointer;
+        font: inherit;
+        text-align: left;
+
+        &.active, &:hover {
+            color: var(--link-color);
+        }
+    }
+
+	*:focus {
+	   	 outline: none;
+	}
+
+    .nav-group {
+        margin-left: 6px;
+        font-size: 14px;
+    }
+
+    nav {
+        border-left: 2px solid #dddddd;
+//        margin-top: 5px;
+        margin-bottom: 5px;
+
+        &.collapsed {
+            display: none;
+        }
+    }
+
+    nav > li > a, nav > li > button {
+        padding-left: 20px;
+        text-align: left;
+
+        &.active {
+            border-left: var(--orange-line-thickness) solid var(--active-color);
+            padding-left: calc(20px - var(--orange-line-thickness));
+        }
+    }
+
+    nav.sub_pages {
+        border: none;
+    }
+
+	nav.sub_pages a, nav.sub_pages button {
+        padding-left: 32px;
+
+        &.active {
+            padding-left: calc(32px - var(--orange-line-thickness));
+        }
+	}
+
+    .parent {
+        color: #393939;
+    }
+
+    .state-indicator {
+        margin-left: auto;
+        margin-top: 5px;
+        width: 6.2px;
+        height: 10px;
+        flex: 0 0 auto;
+        transition: transform 0.1s;
+        filter: invert(49%) sepia(4%) saturate(5%) hue-rotate(23deg) brightness(92%) contrast(90%);
+    }
+
+    button:hover .state-indicator,
+    button.current .state-indicator {
+        filter: invert(47%) sepia(61%) saturate(1950%) hue-rotate(345deg) brightness(100%) contrast(95%);
+    }
+
+    button.expanded .state-indicator {
+        transform: rotate(90deg);
+    }
+}
diff --git a/docs/_sass/right-nav.scss b/docs/_sass/right-nav.scss
new file mode 100644
index 0000000..68589c0
--- /dev/null
+++ b/docs/_sass/right-nav.scss
@@ -0,0 +1,73 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+.right-nav {
+    width: 289px;
+    padding: 12px 26px;
+    overflow-y: auto;
+    height: calc(100vh - var(--header-height));
+    top: 0;
+    position: -webkit-sticky;
+    position: sticky;
+    display: flex;
+    flex-direction: column;
+    font-family: 'Open sans';
+    padding-top: var(--padding-top);
+
+    h6 {
+        margin: 12px 0;
+        font-size: 16px;
+        font-weight: normal;
+    }
+
+    ul {
+        list-style: none;
+        padding: 0;
+        margin: 0;
+        // margin-bottom: auto;
+    }
+
+    li {
+        padding: 0;
+    }
+
+    a {
+        --border-width: 0px;
+        font-size: 14px;
+        color: #757575;
+        padding-left: calc(15px * var(--nesting-level) + 8px - var(--border-width));
+        margin: 0.3em 0;
+        display: inline-block;
+
+        &:hover {
+          color: var(--link-color);
+        }
+
+        &.active {
+            --border-width: var(--orange-line-thickness);
+            border-left: var(--border-width) solid var(--link-color);
+            color: #393939;
+        }
+    }
+
+    .sectlevel1 {
+        border-left: 2px solid #dddddd;
+    }
+
+    @for $i from 1 through 6 {
+        .sectlevel#{$i} {
+            --nesting-level: #{$i - 1};
+        }
+    }
+}
diff --git a/docs/_sass/rouge-base16-solarized.scss b/docs/_sass/rouge-base16-solarized.scss
new file mode 100644
index 0000000..10b1891
--- /dev/null
+++ b/docs/_sass/rouge-base16-solarized.scss
@@ -0,0 +1,99 @@
+//# MIT license.  See http://www.opensource.org/licenses/mit-license.php
+//
+//Copyright (c) 2012 Jeanine Adkisson.
+//
+//Permission is hereby granted, free of charge, to any person obtaining a copy
+//of this software and associated documentation files (the "Software"), to deal
+//in the Software without restriction, including without limitation the rights
+//to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+//copies of the Software, and to permit persons to whom the Software is
+//furnished to do so, subject to the following conditions:
+//
+//The above copyright notice and this permission notice shall be included in
+//all copies or substantial portions of the Software.
+//
+//THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+//IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+//FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+//AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+//LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+//OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+//THE SOFTWARE.
+
+.highlight table td { padding: 5px; }
+.highlight table pre { margin: 0; }
+.highlight, .highlight .w {
+  color: #586e75;
+}
+.highlight .err {
+  color: #002b36;
+  background-color: #dc322f;
+}
+.highlight .c, .highlight .cd, .highlight .cm, .highlight .c1, .highlight .cs {
+  color: #657b83;
+}
+.highlight .cp {
+  color: #b58900;
+}
+.highlight .nt {
+  color: #b58900;
+}
+.highlight .o, .highlight .ow {
+  color: #93a1a1;
+}
+.highlight .p, .highlight .pi {
+  color: #93a1a1;
+}
+.highlight .gi {
+  color: #859900;
+}
+.highlight .gd {
+  color: #dc322f;
+}
+.highlight .gh {
+  color: #268bd2;
+  background-color: #002b36;
+  font-weight: bold;
+}
+.highlight .k, .highlight .kn, .highlight .kp, .highlight .kr, .highlight .kv {
+  color: #6c71c4;
+}
+.highlight .kc {
+  color: #cb4b16;
+}
+.highlight .kt {
+  color: #cb4b16;
+}
+.highlight .kd {
+  color: #cb4b16;
+}
+.highlight .s, .highlight .sb, .highlight .sc, .highlight .sd, .highlight .s2, .highlight .sh, .highlight .sx, .highlight .s1 {
+  color: #859900;
+}
+.highlight .sr {
+  color: #2aa198;
+}
+.highlight .si {
+  color: #d33682;
+}
+.highlight .se {
+  color: #d33682;
+}
+.highlight .nn {
+  color: #b58900;
+}
+.highlight .nc {
+  color: #b58900;
+}
+.highlight .no {
+  color: #b58900;
+}
+.highlight .na {
+  color: #268bd2;
+}
+.highlight .m, .highlight .mf, .highlight .mh, .highlight .mi, .highlight .il, .highlight .mo, .highlight .mb, .highlight .mx {
+  color: #859900;
+}
+.highlight .ss {
+  color: #859900;
+}
diff --git a/docs/_sass/text.scss b/docs/_sass/text.scss
new file mode 100644
index 0000000..711ba7d
--- /dev/null
+++ b/docs/_sass/text.scss
@@ -0,0 +1,62 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+body {
+    font-family: 'Open Sans', sans-serif;
+}
+
+h1, h2, h3, h4 {
+    color: #000;
+    font-weight: normal;
+    font-family: 'Open Sans';
+}
+
+h1 {
+    font-size: 36px;
+    line-height: 40px;
+}
+
+a {
+    text-decoration: none;
+    color: var(--link-color);
+}
+
+
+section {
+    color: #545454;
+}
+
+table {
+    border-collapse: collapse;
+
+    td, th {
+        text-align: left;
+        padding: 5px 10px;
+        border-bottom: 1px solid hsl(0, 0%, 85%);
+        border-top: 1px solid hsl(0, 0%, 85%);
+    }
+
+    td p.tableblock {
+        margin-top: 0.5em;
+        margin-bottom: 0.5em;
+
+        &:first-child {
+            margin-top: 0.125em;
+        }
+
+        &:last-child {
+            margin-bottom: 0.125em;
+        }
+    }
+}
diff --git a/docs/_sass/variables.scss b/docs/_sass/variables.scss
new file mode 100644
index 0000000..9b63c5b
--- /dev/null
+++ b/docs/_sass/variables.scss
@@ -0,0 +1,33 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+:root {
+    --gg-red: #ec1c24;
+    --gg-orange: #ec1c24;
+    --gg-orange-dark: #bc440b;
+    --gg-orange-filter: invert(47%) sepia(61%) saturate(1950%) hue-rotate(345deg) brightness(100%) contrast(95%);
+    --gg-dark-gray: #333333;
+    --orange-line-thickness: 3px;
+    --block-code-background: rgba(241, 241, 241, 20%);
+    --inline-code-background: rgba(241, 241, 241, 90%);
+    --padding-top: 25px; 
+    --link-color: #ec1c24;
+}
+
+@font-face {
+    font-family: 'Open Sans';
+    font-weight: 300;
+    font-display: swap;
+    font-style: normal;
+}
diff --git a/docs/assets/css/asciidoc-pygments.css b/docs/assets/css/asciidoc-pygments.css
new file mode 100644
index 0000000..6de1084
--- /dev/null
+++ b/docs/assets/css/asciidoc-pygments.css
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2013-2018 Dan Allen, Paul Rayner, and the Asciidoctor Project
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+pre.pygments .hll { background-color: #ffffcc }
+pre.pygments, pre.pygments code { background: #ffffff; }
+pre.pygments .tok-c { color: #008000 } /* Comment */
+pre.pygments .tok-err { border: 1px solid #FF0000 } /* Error */
+pre.pygments .tok-k { color: #0000ff } /* Keyword */
+pre.pygments .tok-ch { color: #008000 } /* Comment.Hashbang */
+pre.pygments .tok-cm { color: #008000 } /* Comment.Multiline */
+pre.pygments .tok-cp { color: #0000ff } /* Comment.Preproc */
+pre.pygments .tok-cpf { color: #008000 } /* Comment.PreprocFile */
+pre.pygments .tok-c1 { color: #008000 } /* Comment.Single */
+pre.pygments .tok-cs { color: #008000 } /* Comment.Special */
+pre.pygments .tok-ge { font-style: italic } /* Generic.Emph */
+pre.pygments .tok-gh { font-weight: bold } /* Generic.Heading */
+pre.pygments .tok-gp { font-weight: bold } /* Generic.Prompt */
+pre.pygments .tok-gs { font-weight: bold } /* Generic.Strong */
+pre.pygments .tok-gu { font-weight: bold } /* Generic.Subheading */
+pre.pygments .tok-kc { color: #0000ff } /* Keyword.Constant */
+pre.pygments .tok-kd { color: #0000ff } /* Keyword.Declaration */
+pre.pygments .tok-kn { color: #0000ff } /* Keyword.Namespace */
+pre.pygments .tok-kp { color: #0000ff } /* Keyword.Pseudo */
+pre.pygments .tok-kr { color: #0000ff } /* Keyword.Reserved */
+pre.pygments .tok-kt { color: #2b91af } /* Keyword.Type */
+pre.pygments .tok-s { color: #a31515 } /* Literal.String */
+pre.pygments .tok-nc { color: #2b91af } /* Name.Class */
+pre.pygments .tok-ow { color: #0000ff } /* Operator.Word */
+pre.pygments .tok-sa { color: #a31515 } /* Literal.String.Affix */
+pre.pygments .tok-sb { color: #a31515 } /* Literal.String.Backtick */
+pre.pygments .tok-sc { color: #a31515 } /* Literal.String.Char */
+pre.pygments .tok-dl { color: #a31515 } /* Literal.String.Delimiter */
+pre.pygments .tok-sd { color: #a31515 } /* Literal.String.Doc */
+pre.pygments .tok-s2 { color: #a31515 } /* Literal.String.Double */
+pre.pygments .tok-se { color: #a31515 } /* Literal.String.Escape */
+pre.pygments .tok-sh { color: #a31515 } /* Literal.String.Heredoc */
+pre.pygments .tok-si { color: #a31515 } /* Literal.String.Interpol */
+pre.pygments .tok-sx { color: #a31515 } /* Literal.String.Other */
+pre.pygments .tok-sr { color: #a31515 } /* Literal.String.Regex */
+pre.pygments .tok-s1 { color: #a31515 } /* Literal.String.Single */
+pre.pygments .tok-ss { color: #a31515 } /* Literal.String.Symbol */
diff --git a/docs/assets/css/docs.scss b/docs/assets/css/docs.scss
new file mode 100644
index 0000000..2e05a98
--- /dev/null
+++ b/docs/assets/css/docs.scss
@@ -0,0 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+---
+---
+// Docs-specific global styles
+body {
+}
diff --git a/docs/assets/css/styles.scss b/docs/assets/css/styles.scss
new file mode 100644
index 0000000..f23e704
--- /dev/null
+++ b/docs/assets/css/styles.scss
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+---
+---
+@import "variables";
+@import "header";
+@import "code";
+@import "rouge-base16-solarized";
+@import "text";
+@import "callouts";
+@import "layout";
+@import "left-nav";
+@import "right-nav";
+@import "footer";
+
+@import "docs";
diff --git a/docs/assets/images/apple-blob.svg b/docs/assets/images/apple-blob.svg
new file mode 100644
index 0000000..308bf94
--- /dev/null
+++ b/docs/assets/images/apple-blob.svg
@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="111" height="274" viewBox="0 0 111 274">
+    <defs>
+        <linearGradient id="a" x1="50%" x2="50%" y1="0%" y2="100%">
+            <stop offset="0%" stop-color="#FCA44F"/>
+            <stop offset="100%" stop-color="#F86B27"/>
+        </linearGradient>
+        <linearGradient id="b" x1="50%" x2="50%" y1="0%" y2="100%">
+            <stop offset="0%" stop-color="#F1474E"/>
+            <stop offset="100%" stop-color="#DF2226"/>
+        </linearGradient>
+    </defs>
+    <g fill="none" fill-rule="evenodd" transform="translate(-13.406 3.425)">
+        <path fill="url(#a)" d="M120.697 3.889L142.52 48.75c2.899 5.96.418 13.141-5.542 16.04a12 12 0 0 1-5.25 1.209H88.315c-6.628 0-12-5.373-12-12a12 12 0 0 1 1.187-5.204L99.093 3.934c2.875-5.972 10.046-8.483 16.017-5.609a12 12 0 0 1 5.587 5.564z" transform="rotate(-7 110 35)"/>
+        <rect width="195" height="196" x="27" y="60.979" fill="url(#b)" opacity=".9" rx="50" transform="rotate(-19 124.5 158.979)"/>
+    </g>
+</svg>
diff --git a/docs/assets/images/arrow-down-white.svg b/docs/assets/images/arrow-down-white.svg
new file mode 100644
index 0000000..12a5613
--- /dev/null
+++ b/docs/assets/images/arrow-down-white.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="8" height="4" viewBox="0 0 8 4">
+    <path fill="#f3f3f3" fill-rule="nonzero" d="M0 0l4 4 4-4z"/>
+</svg>
diff --git a/docs/assets/images/arrow-down.svg b/docs/assets/images/arrow-down.svg
new file mode 100644
index 0000000..170a167
--- /dev/null
+++ b/docs/assets/images/arrow-down.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="8" height="4" viewBox="0 0 8 4">
+    <path fill="#333" fill-rule="nonzero" d="M0 0l4 4 4-4z"/>
+</svg>
diff --git a/docs/assets/images/background-lines.svg b/docs/assets/images/background-lines.svg
new file mode 100644
index 0000000..50524eb
--- /dev/null
+++ b/docs/assets/images/background-lines.svg
@@ -0,0 +1,54 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="998" viewBox="0 0 1440 998">
+    <g fill="none" fill-rule="evenodd" stroke="#979797" opacity=".06">
+        <path d="M1087.77 102.125C914.927 152.38 790.92 262.896 715.745 433.67 602.985 689.833 378.618 770.826 265.85 780.258c-112.768 9.433-535.598 120.267-668.67 272.941-88.715 101.783-151.124 182.837-187.229 243.16"/>
+        <path d="M1106.995 96.612C934.152 146.868 810.144 257.383 734.97 428.158 622.21 684.32 397.843 765.313 285.075 774.746c-112.769 9.432-535.599 120.266-668.67 272.94-88.716 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1126.22 91.1c-172.843 50.255-296.85 160.77-372.024 331.545C641.436 678.807 417.068 759.8 304.3 769.233c-112.769 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1145.446 85.586C972.603 135.842 848.594 246.358 773.42 417.132 660.66 673.294 436.294 754.288 323.525 763.72c-112.768 9.432-535.598 120.266-668.67 272.941-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1164.671 80.074C991.828 130.33 867.82 240.845 792.646 411.62 679.886 667.782 455.519 748.775 342.75 758.207c-112.768 9.433-535.598 120.267-668.67 272.941-88.715 101.783-151.124 182.837-187.229 243.16"/>
+        <path d="M1183.896 74.56c-172.843 50.257-296.851 160.772-372.025 331.547-112.76 256.162-337.127 337.155-449.895 346.588-112.769 9.432-535.599 120.266-668.67 272.94-88.716 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1203.122 69.048C1030.278 119.304 906.27 229.82 831.096 400.594 718.336 656.756 493.97 737.75 381.201 747.182c-112.769 9.432-535.599 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1222.347 63.535c-172.843 50.256-296.852 160.772-372.025 331.546-112.76 256.162-337.127 337.156-449.896 346.588-112.769 9.433-535.598 120.266-668.67 272.941-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1241.572 58.023C1068.73 108.279 944.72 218.794 869.547 389.569 756.787 645.73 532.42 726.724 419.65 736.156c-112.768 9.433-535.598 120.267-668.67 272.941-88.715 101.783-151.125 182.837-187.229 243.16"/>
+        <path d="M1260.797 52.51c-172.843 50.256-296.851 160.771-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.124 182.837-187.229 243.161"/>
+        <path d="M1280.023 46.997C1107.179 97.253 983.17 207.77 907.997 378.543 795.237 634.705 570.87 715.698 458.102 725.131c-112.769 9.432-535.599 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1299.248 41.484C1126.405 91.74 1002.396 202.256 927.223 373.03c-112.76 256.162-337.128 337.156-449.896 346.588-112.769 9.433-535.598 120.266-668.67 272.941-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1318.473 35.972c-172.843 50.256-296.852 160.771-372.025 331.546C833.688 623.68 609.32 704.673 496.552 714.105c-112.768 9.433-535.598 120.267-668.67 272.941-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1337.698 30.459c-172.843 50.256-296.851 160.771-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.124 182.837-187.229 243.161"/>
+        <path d="M1356.923 24.946c-172.843 50.256-296.851 160.772-372.025 331.546-112.76 256.162-337.127 337.155-449.895 346.588-112.769 9.432-535.599 120.266-668.67 272.94-88.716 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1376.149 19.433c-172.843 50.256-296.852 160.772-372.025 331.546-112.76 256.162-337.128 337.156-449.896 346.588C441.459 707 18.63 817.833-114.442 970.508c-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1395.374 13.92c-172.843 50.257-296.852 160.772-372.025 331.547-112.76 256.162-337.127 337.155-449.896 346.587-112.768 9.433-535.598 120.267-668.67 272.941-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1414.6 8.408c-172.844 50.256-296.852 160.771-372.026 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.124 182.837-187.229 243.161"/>
+        <path d="M1433.824 2.895c-172.843 50.256-296.851 160.772-372.025 331.546C949.04 590.603 724.672 671.596 611.904 681.03c-112.769 9.432-535.599 120.266-668.67 272.94-88.716 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1453.05-2.618c-172.844 50.256-296.852 160.772-372.025 331.546-112.76 256.162-337.128 337.156-449.896 346.588C518.36 684.95 95.53 795.782-37.541 948.457c-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1472.275-8.13c-172.843 50.256-296.852 160.771-372.025 331.546C987.49 579.578 763.123 660.57 650.354 670.003c-112.768 9.433-535.598 120.267-668.67 272.941-88.715 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1491.5-13.643c-172.843 50.256-296.851 160.771-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588C556.811 673.923 133.981 784.757.91 937.43c-88.715 101.784-151.125 182.837-187.229 243.161"/>
+        <path d="M1510.725-19.156C1337.882 31.1 1213.874 141.616 1138.7 312.39c-112.76 256.162-337.127 337.155-449.895 346.588-112.769 9.432-535.599 120.266-668.67 272.94-88.716 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1529.95-24.669c-172.843 50.256-296.851 160.772-372.025 331.546-112.76 256.162-337.127 337.156-449.895 346.588C595.26 662.898 172.43 773.731 39.36 926.406c-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1549.176-30.181c-172.843 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.128 337.155-449.896 346.587-112.769 9.433-535.598 120.267-668.67 272.941-88.715 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1568.401-35.694c-172.843 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.229 243.161"/>
+        <path d="M1587.626-41.207C1414.783 9.05 1290.775 119.565 1215.601 290.34c-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94C8.32 1011.652-54.089 1092.705-90.194 1153.029"/>
+        <path d="M1606.852-46.72C1434.008 3.536 1310 114.052 1234.826 284.826 1122.066 540.988 897.7 621.982 784.931 631.414c-112.769 9.433-535.599 120.266-668.67 272.941-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1626.077-52.232c-172.843 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.128 337.155-449.896 346.587-112.769 9.433-535.598 120.267-668.67 272.941-88.715 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1645.302-57.745C1472.459-7.49 1348.45 103.026 1273.277 273.8 1160.517 529.963 936.15 610.956 823.38 620.389c-112.768 9.432-535.598 120.266-668.67 272.94C65.996 995.114 3.586 1076.167-32.52 1136.49"/>
+        <path d="M1664.527-63.258c-172.843 50.256-296.851 160.772-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94C85.221 989.6 22.812 1070.655-13.293 1130.978"/>
+        <path d="M1683.752-68.77C1510.91-18.516 1386.901 92 1311.727 262.774 1198.967 518.937 974.6 599.931 861.832 609.363c-112.769 9.433-535.599 120.266-668.67 272.941-88.716 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1702.978-74.283c-172.844 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.128 337.155-449.896 346.587-112.769 9.433-535.598 120.267-668.67 272.941-88.715 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1722.203-79.796C1549.36-29.54 1425.35 80.975 1350.178 251.75c-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1741.428-85.309c-172.843 50.256-296.851 160.772-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.124 182.838-187.229 243.161"/>
+        <path d="M1760.653-90.822C1587.81-40.566 1463.802 69.95 1388.628 240.724c-112.76 256.162-337.127 337.156-449.895 346.588-112.769 9.433-535.599 120.266-668.67 272.941-88.716 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1779.879-96.334c-172.844 50.256-296.852 160.771-372.026 331.546-112.76 256.162-337.127 337.155-449.895 346.587-112.769 9.433-535.598 120.267-668.67 272.941-88.715 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1799.104-101.847c-172.843 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.769 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1818.33-107.36c-172.844 50.256-296.852 160.772-372.026 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.838-187.229 243.161"/>
+        <path d="M1837.554-112.873C1664.711-62.616 1540.703 47.9 1465.53 218.674c-112.76 256.161-337.127 337.155-449.896 346.587-112.768 9.433-535.598 120.266-668.67 272.941-88.715 101.783-151.124 182.837-187.229 243.16"/>
+        <path d="M1856.78-118.385C1683.936-68.13 1559.928 42.386 1484.754 213.16c-112.76 256.162-337.127 337.155-449.895 346.587-112.769 9.433-535.599 120.267-668.67 272.941-88.715 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1876.005-123.898c-172.843 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.128 337.155-449.896 346.588-112.769 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1895.23-129.41c-172.843 50.255-296.852 160.77-372.025 331.545-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.838-187.23 243.161"/>
+        <path d="M1914.455-134.924c-172.843 50.257-296.851 160.772-372.025 331.547-112.76 256.161-337.127 337.155-449.896 346.587-112.768 9.433-535.598 120.266-668.67 272.941-88.715 101.783-151.124 182.837-187.229 243.16"/>
+        <path d="M1933.68-140.436C1760.838-90.18 1636.83 20.335 1561.656 191.11c-112.76 256.162-337.127 337.155-449.895 346.587C998.99 547.13 576.16 657.964 443.09 810.638c-88.716 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1952.906-145.949c-172.843 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.128 337.155-449.896 346.588-112.769 9.432-535.598 120.266-668.67 272.94C373.6 906.91 311.19 987.963 275.084 1048.287"/>
+        <path d="M1972.131-151.462c-172.843 50.256-296.852 160.772-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.838-187.23 243.161"/>
+        <path d="M1991.356-156.975c-172.843 50.257-296.851 160.772-372.025 331.547-112.76 256.162-337.127 337.155-449.896 346.587-112.768 9.433-535.598 120.266-668.67 272.941-88.715 101.783-151.124 182.837-187.229 243.16"/>
+        <path d="M2010.581-162.487c-172.843 50.256-296.851 160.771-372.025 331.546-112.76 256.162-337.127 337.155-449.895 346.587-112.769 9.433-535.599 120.267-668.67 272.941-88.716 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M2029.807-168c-172.844 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.128 337.155-449.896 346.588-112.769 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+    </g>
+</svg>
diff --git a/docs/assets/images/cancel.svg b/docs/assets/images/cancel.svg
new file mode 100644
index 0000000..1ca9a6a
--- /dev/null
+++ b/docs/assets/images/cancel.svg
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: Sketch 53.2 (72643) - https://sketchapp.com -->
+    <title>Cancel-icon</title>
+    <desc>Created with Sketch.</desc>
+    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="Pathes" transform="translate(-718.000000, -27.000000)" fill="#FFFFFF">
+            <polyline id="Cancel-icon" points="732 28.41 730.59 27 725 32.59 719.41 27 718 28.41 723.59 34 718 39.59 719.41 41 725 35.41 730.59 41 732 39.59 726.41 34 732 28.41"></polyline>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/docs/assets/images/checkmark-green.svg b/docs/assets/images/checkmark-green.svg
new file mode 100644
index 0000000..7f4bd06
--- /dev/null
+++ b/docs/assets/images/checkmark-green.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="15" viewBox="0 0 20 15">
+    <path fill="#157136" fill-rule="evenodd" d="M19.753.348a.846.846 0 0 0-1.189 0L6.666 12.167 1.436 7.01a.846.846 0 0 0-1.19 0 .827.827 0 0 0 0 1.177l5.828 5.745a.855.855 0 0 0 1.19 0l12.49-12.407a.826.826 0 0 0 0-1.177c-.329-.326.328.325 0 0z"/>
+</svg>
diff --git a/docs/assets/images/copy-icon.svg b/docs/assets/images/copy-icon.svg
new file mode 100644
index 0000000..9ee5957
--- /dev/null
+++ b/docs/assets/images/copy-icon.svg
@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15" height="18" viewBox="0 0 15 18">
+    <defs>
+        <path id="a" d="M589 97.75h-9c-.825 0-1.5.675-1.5 1.5v10.5h1.5v-10.5h9v-1.5zm2.25 3H583c-.825 0-1.5.675-1.5 1.5v10.5c0 .825.675 1.5 1.5 1.5h8.25c.825 0 1.5-.675 1.5-1.5v-10.5c0-.825-.675-1.5-1.5-1.5zm0 12H583v-10.5h8.25v10.5z"/>
+    </defs>
+    <use fill="#757575" fill-rule="nonzero" transform="translate(-578 -97)" xlink:href="#a"/>
+</svg>
diff --git a/docs/assets/images/cpp.svg b/docs/assets/images/cpp.svg
new file mode 100644
index 0000000..2ad3e6d
--- /dev/null
+++ b/docs/assets/images/cpp.svg
@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="58" height="66" viewBox="0 0 58 66">
+    <g fill="none" fill-rule="nonzero">
+        <path fill="#00599C" d="M57.262 48.952c.455-.789.738-1.677.738-2.474V18.79c0-.797-.282-1.685-.738-2.474L29 32.634l28.262 16.318z"/>
+        <path fill="#004482" d="M31.511 64.67L55.49 50.829c.69-.4 1.318-1.088 1.773-1.876L29 32.634.738 48.952c.455.788 1.083 1.477 1.773 1.876L26.49 64.67c1.38.797 3.641.797 5.022 0z"/>
+        <path fill="#659AD2" d="M57.262 16.317c-.455-.788-1.083-1.477-1.773-1.876L31.51.598c-1.38-.797-3.641-.797-5.022 0L2.51 14.441C1.131 15.24 0 17.196 0 18.791v27.687c0 .797.283 1.685.738 2.474L29 32.634l28.262-16.317z"/>
+        <path fill="#FFF" d="M29 51.968c-10.66 0-19.333-8.673-19.333-19.334 0-10.66 8.673-19.333 19.333-19.333 6.879 0 13.294 3.702 16.742 9.66l-8.366 4.842A9.708 9.708 0 0 0 29 22.968c-5.33 0-9.667 4.336-9.667 9.666S23.67 42.301 29 42.301c3.44 0 6.65-1.853 8.376-4.836l8.367 4.841c-3.448 5.96-9.864 9.662-16.743 9.662z"/>
+        <path fill="#FFF" d="M48.333 31.56h-2.148v-2.148h-2.148v2.148H41.89v2.148h2.148v2.149h2.148v-2.149h2.148zM56.389 31.56H54.24v-2.148h-2.148v2.148h-2.149v2.148h2.149v2.149h2.148v-2.149h2.148z"/>
+    </g>
+</svg>
diff --git a/docs/assets/images/dev-internal-bg.jpg b/docs/assets/images/dev-internal-bg.jpg
new file mode 100644
index 0000000..847a3f5
Binary files /dev/null and b/docs/assets/images/dev-internal-bg.jpg differ
diff --git a/docs/assets/images/dotnet.svg b/docs/assets/images/dotnet.svg
new file mode 100644
index 0000000..5801271
--- /dev/null
+++ b/docs/assets/images/dotnet.svg
@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="57" height="57" viewBox="0 0 57 57">
+    <g fill="none" fill-rule="nonzero">
+        <path fill="#672572" d="M.118.118h56.763v56.763H.118z"/>
+        <g fill="#FFF">
+            <path d="M36.649 21.809c.29-.258.436-.58.436-.967 0-.353-.117-.644-.348-.872-.177-.18-.47-.357-.876-.526-.361-.153-.6-.286-.714-.394-.126-.118-.19-.28-.19-.49 0-.196.075-.355.228-.48.15-.122.352-.184.605-.184.406 0 .765.113 1.078.34v-.766a2.25 2.25 0 0 0-1.016-.221c-.492 0-.893.13-1.206.392-.31.262-.468.59-.468.983 0 .352.1.638.301.858.167.186.45.364.848.539.386.169.645.315.778.437.133.12.2.273.2.459 0 .441-.302.663-.903.663-.45 0-.86-.153-1.235-.455v.817c.335.19.727.286 1.17 [...]
+            <path d="M50.668 18.881c.36 0 .66-.122.905-.362.246-.24.368-.538.368-.893 0-.362-.122-.664-.37-.9a1.242 1.242 0 0 0-.894-.349c-.362 0-.663.122-.907.364a1.213 1.213 0 0 0-.364.894c0 .361.12.658.36.893.237.233.538.353.902.353zm-.796-2.045c.213-.213.479-.32.8-.32.31 0 .577.107.792.32.215.213.324.48.324.796 0 .32-.109.588-.326.799a1.075 1.075 0 0 1-.79.324 1.08 1.08 0 0 1-.79-.32 1.084 1.084 0 0 1-.327-.803c0-.317.106-.58.317-.796zM19.176 17.364h1v4.749h-1zM30.949 22.226c.723 0 1 [...]
+        </g>
+    </g>
+</svg>
diff --git a/docs/assets/images/edition-ce.svg b/docs/assets/images/edition-ce.svg
new file mode 100644
index 0000000..fad4eb5
--- /dev/null
+++ b/docs/assets/images/edition-ce.svg
@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="86" height="74" viewBox="0 0 86 74">
+    <defs>
+        <path id="a" d="M.022.27h85.154v72.867H.022z"/>
+    </defs>
+    <g fill="none" fill-rule="evenodd">
+        <path fill="#DF2226" d="M46.604 43.541a4.004 4.004 0 0 1-4.006 4.004 3.998 3.998 0 0 1-3.995-4.004 3.998 3.998 0 0 1 3.995-4.003 4.004 4.004 0 0 1 4.006 4.003"/>
+        <path fill="#DF2226" d="M42.602 40.9a2.65 2.65 0 0 0-2.648 2.642 2.649 2.649 0 0 0 2.648 2.64 2.648 2.648 0 0 0 2.645-2.64 2.649 2.649 0 0 0-2.645-2.642m0 8.001c-2.957 0-5.365-2.405-5.365-5.359a5.372 5.372 0 0 1 5.365-5.361 5.371 5.371 0 0 1 5.362 5.361 5.369 5.369 0 0 1-5.362 5.359"/>
+        <path fill="#DF2226" d="M41.073 45.073L29.516 31.201a.582.582 0 0 1 .074-.828.583.583 0 0 1 .753 0l13.873 11.56a2.227 2.227 0 0 1 .282 3.14 2.229 2.229 0 0 1-3.425 0M13.345 44.517H1.142a1.142 1.142 0 0 1 0-2.283h12.203a1.142 1.142 0 1 1 0 2.283M83.873 44.517H71.67a1.142 1.142 0 0 1 0-2.283h12.203a1.142 1.142 0 0 1 0 2.283"/>
+        <g transform="translate(0 .696)">
+            <mask id="b" fill="#fff">
+                <use xlink:href="#a"/>
+            </mask>
+            <path fill="#DF2226" d="M13.165 73.137h-.003a1.14 1.14 0 0 1-.806-.338C4.402 64.772.022 54.131.022 42.845.022 19.367 19.126.269 42.602.269c23.477 0 42.575 19.098 42.575 42.576 0 11.286-4.377 21.924-12.33 29.954-.217.217-.487.258-.81.338-.303 0-.593-.121-.807-.332l-8.656-8.632a1.142 1.142 0 0 1 0-1.614 1.133 1.133 0 0 1 1.61 0l7.838 7.809c7.022-7.494 10.875-17.224 10.875-27.523 0-22.218-18.078-40.296-40.296-40.296S2.306 20.627 2.306 42.845c0 10.299 3.852 20.029 10.871 27.523l7 [...]
+        </g>
+    </g>
+</svg>
diff --git a/docs/assets/images/edition-ee.svg b/docs/assets/images/edition-ee.svg
new file mode 100644
index 0000000..fbc466d
--- /dev/null
+++ b/docs/assets/images/edition-ee.svg
@@ -0,0 +1,25 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="84" height="84" viewBox="0 0 84 84">
+    <defs>
+        <path id="a" d="M.559.511h34.1v39.027H.56z"/>
+        <path id="c" d="M.333.109h34.099v11.383H.333z"/>
+    </defs>
+    <g fill="none" fill-rule="evenodd">
+        <path fill="#713C80" d="M2.164 69.539l14.888 8.59 14.888-8.59V52.352L17.052 43.74 2.164 52.352V69.54zM17.052 80.46c-.19 0-.371-.052-.54-.145L.54 71.096a1.084 1.084 0 0 1-.54-.931V51.726c0-.385.21-.743.54-.932l15.972-9.24a1.116 1.116 0 0 1 1.08 0l15.972 9.24c.334.19.537.547.537.932v18.439c0 .382-.203.736-.537.932l-15.972 9.22a1.114 1.114 0 0 1-.54.144zM51.654 69.539l14.885 8.59 14.888-8.59V52.352L66.54 43.74l-14.885 8.613V69.54zM66.539 80.46a1.1 1.1 0 0 1-.537-.145l-15.972-9.22a1. [...]
+        <path fill="#713C80" d="M29.045 73.711l13.643 7.888 12.763-7.375-5.418-3.127a1.066 1.066 0 0 1-.544-.936V51.726c0-.385.207-.736.544-.932l15.965-9.24c.337-.193.75-.186 1.083 0L72.52 44.7V29.937l-12.78-7.372v6.608c0 .386-.206.747-.54.933L43.228 39.32c-.337.2-.746.2-1.076 0L26.18 30.106a1.061 1.061 0 0 1-.54-.933v-6.608l-12.76 7.372v13.719l3.63-2.102a1.123 1.123 0 0 1 1.084 0l15.968 9.24c.334.196.54.547.54.932V70.16c0 .385-.206.746-.54.936l-4.517 2.614zm13.643 10.217c-.185 0-.375-.0 [...]
+        <g transform="translate(25.08 -.072)">
+            <mask id="b" fill="#fff">
+                <use xlink:href="#a"/>
+            </mask>
+            <path fill="#713C80" d="M2.722 28.62l14.885 8.589 14.889-8.59V11.433l-14.889-8.59-14.885 8.59v17.186zm14.885 10.918c-.185 0-.371-.049-.536-.145L1.099 30.177a1.075 1.075 0 0 1-.54-.928V10.81c0-.389.206-.746.54-.935L17.07.655a1.075 1.075 0 0 1 1.076 0l15.972 9.22c.337.189.54.546.54.935V29.25c0 .381-.203.736-.54.928l-15.972 9.216c-.165.096-.35.145-.54.145z" mask="url(#b)"/>
+        </g>
+        <g transform="translate(49.16 50.528)">
+            <mask id="d" fill="#fff">
+                <use xlink:href="#c"/>
+            </mask>
+            <path fill="#713C80" d="M17.383 11.492c-.19 0-.372-.048-.54-.144L.874 2.128C.358 1.83.18 1.168.48.656c.299-.523.96-.698 1.475-.402l15.429 8.91L32.81.253c.52-.3 1.18-.12 1.476.402.3.513.124 1.173-.392 1.472l-15.972 9.22a1.087 1.087 0 0 1-.54.144" mask="url(#d)"/>
+        </g>
+        <path fill="#713C80" d="M66.543 80.46c-.599 0-1.08-.485-1.08-1.073V60.94c0-.598.481-1.08 1.08-1.08.598 0 1.08.482 1.08 1.08v18.446c0 .588-.482 1.073-1.08 1.073M17.059 62.02c-.19 0-.372-.048-.54-.144L.547 52.656c-.516-.298-.691-.959-.392-1.472.296-.522.96-.698 1.476-.402l15.428 8.91 15.428-8.91c.516-.3 1.177-.12 1.476.402.3.513.12 1.174-.395 1.473l-15.969 9.219a1.087 1.087 0 0 1-.54.144"/>
+        <path fill="#713C80" d="M17.059 80.46c-.599 0-1.08-.485-1.08-1.073V60.94c0-.598.481-1.08 1.08-1.08.599 0 1.08.482 1.08 1.08v18.446c0 .588-.481 1.073-1.08 1.073M42.695 21.033c-.19 0-.372-.048-.54-.145l-15.972-9.222a1.073 1.073 0 0 1-.396-1.47c.3-.522.96-.7 1.476-.402l15.432 8.91 15.428-8.91c.516-.299 1.176-.12 1.476.403.299.512.12 1.17-.396 1.469l-15.972 9.222c-.168.097-.35.145-.536.145"/>
+        <path fill="#713C80" d="M42.695 39.472a1.08 1.08 0 0 1-1.08-1.076V19.954a1.078 1.078 0 1 1 2.156 0v18.442c0 .591-.481 1.076-1.076 1.076"/>
+    </g>
+</svg>
diff --git a/docs/assets/images/edition-ue.svg b/docs/assets/images/edition-ue.svg
new file mode 100644
index 0000000..0d788ed
--- /dev/null
+++ b/docs/assets/images/edition-ue.svg
@@ -0,0 +1,28 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="86" height="87" viewBox="0 0 86 87">
+    <defs>
+        <path id="a" d="M.841.473h15.423v15.365H.841z"/>
+        <path id="c" d="M1.26.484h11.02v10.983H1.26z"/>
+        <path id="e" d="M0 88.393h85.903V2.866H0z"/>
+    </defs>
+    <g fill="none" fill-rule="evenodd" transform="translate(0 -2)">
+        <path fill="#F16623" d="M42.953 31.386c-7.892 0-14.314 6.39-14.314 14.242 0 7.854 6.422 14.244 14.314 14.244s14.31-6.39 14.31-14.244c0-7.852-6.418-14.242-14.31-14.242m0 30.696c-9.113 0-16.524-7.381-16.524-16.454 0-9.07 7.41-16.452 16.524-16.452 9.11 0 16.523 7.381 16.523 16.452 0 9.073-7.413 16.454-16.523 16.454"/>
+        <g transform="translate(34.4 2.393)">
+            <mask id="b" fill="#fff">
+                <use xlink:href="#a"/>
+            </mask>
+            <path fill="#F16623" d="M8.553 2.683c-3.036 0-5.504 2.454-5.504 5.47 0 3.018 2.468 5.472 5.504 5.472 3.035 0 5.5-2.454 5.5-5.472 0-3.016-2.465-5.47-5.5-5.47m0 13.155C4.3 15.838.84 12.392.84 8.153c0-4.235 3.46-7.68 7.712-7.68 4.251 0 7.711 3.445 7.711 7.68 0 4.24-3.46 7.685-7.711 7.685" mask="url(#b)"/>
+        </g>
+        <path fill="#F16623" d="M5.51 13.844a3.292 3.292 0 0 0-3.297 3.283 3.292 3.292 0 0 0 3.297 3.28c1.82 0 3.3-1.474 3.3-3.28 0-1.81-1.48-3.283-3.3-3.283m0 8.772c-3.039 0-5.51-2.462-5.51-5.49 0-3.027 2.471-5.492 5.51-5.492 3.041 0 5.512 2.465 5.512 5.493 0 3.027-2.47 5.49-5.512 5.49M12.12 35.77c-3.037 0-5.505 2.454-5.505 5.472 0 3.019 2.468 5.473 5.504 5.473 3.033 0 5.501-2.454 5.501-5.473 0-3.018-2.468-5.472-5.5-5.472m0 13.155c-4.252 0-7.712-3.446-7.712-7.683 0-4.234 3.46-7.682 7.71 [...]
+        <g transform="translate(51.6 76.927)">
+            <mask id="d" fill="#fff">
+                <use xlink:href="#c"/>
+            </mask>
+            <path fill="#F16623" d="M6.77 2.694c-1.821 0-3.3 1.47-3.3 3.285 0 1.803 1.479 3.274 3.3 3.274 1.82 0 3.296-1.47 3.296-3.274a3.291 3.291 0 0 0-3.297-3.285m0 8.775c-3.038 0-5.51-2.468-5.51-5.49C1.26 2.946 3.732.484 6.77.484c3.039 0 5.51 2.462 5.51 5.495 0 3.022-2.471 5.49-5.51 5.49" mask="url(#d)"/>
+        </g>
+        <path fill="#F16623" d="M31.313 35.8L8.695 20.227l1.252-1.817L32.565 33.98z"/>
+        <mask id="f" fill="#fff">
+            <use xlink:href="#e"/>
+        </mask>
+        <path fill="#F16623" d="M41.69 30.728h2.21V17.466h-2.21zM56.71 38.684l-1.087-1.926 17.11-9.632 1.087 1.926zM67.224 57.816l-10.32-6.052 1.121-1.906 10.32 6.051zM55.147 79.531l-7.955-19.049 2.041-.848 7.952 19.046zM36.293 67.897l-2.099-.685 2.449-7.497 2.1.688zM12.95 79.834l-1.665-1.454 19.82-22.74 1.669 1.45zM27.595 44.535l-9.116-.82.2-2.201 9.114.82zM42.12 55.189c.578.06 1.086.06 1.665 0l.37-1.669a.997.997 0 0 1 .705-.745 6.945 6.945 0 0 0 1.493-.62c.324-.18.72-.168 1.032.032l1.4 [...]
+    </g>
+</svg>
diff --git a/docs/assets/images/events-nav-arrow.svg b/docs/assets/images/events-nav-arrow.svg
new file mode 100644
index 0000000..217fdaa
--- /dev/null
+++ b/docs/assets/images/events-nav-arrow.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="14" height="26" viewBox="0 0 14 26">
+    <path fill="none" fill-rule="evenodd" stroke="#F86B27" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 1L1.444 12.556 13 24.11"/>
+</svg>
diff --git a/docs/assets/images/feature-easy-installation.svg b/docs/assets/images/feature-easy-installation.svg
new file mode 100644
index 0000000..0d788ed
--- /dev/null
+++ b/docs/assets/images/feature-easy-installation.svg
@@ -0,0 +1,28 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="86" height="87" viewBox="0 0 86 87">
+    <defs>
+        <path id="a" d="M.841.473h15.423v15.365H.841z"/>
+        <path id="c" d="M1.26.484h11.02v10.983H1.26z"/>
+        <path id="e" d="M0 88.393h85.903V2.866H0z"/>
+    </defs>
+    <g fill="none" fill-rule="evenodd" transform="translate(0 -2)">
+        <path fill="#F16623" d="M42.953 31.386c-7.892 0-14.314 6.39-14.314 14.242 0 7.854 6.422 14.244 14.314 14.244s14.31-6.39 14.31-14.244c0-7.852-6.418-14.242-14.31-14.242m0 30.696c-9.113 0-16.524-7.381-16.524-16.454 0-9.07 7.41-16.452 16.524-16.452 9.11 0 16.523 7.381 16.523 16.452 0 9.073-7.413 16.454-16.523 16.454"/>
+        <g transform="translate(34.4 2.393)">
+            <mask id="b" fill="#fff">
+                <use xlink:href="#a"/>
+            </mask>
+            <path fill="#F16623" d="M8.553 2.683c-3.036 0-5.504 2.454-5.504 5.47 0 3.018 2.468 5.472 5.504 5.472 3.035 0 5.5-2.454 5.5-5.472 0-3.016-2.465-5.47-5.5-5.47m0 13.155C4.3 15.838.84 12.392.84 8.153c0-4.235 3.46-7.68 7.712-7.68 4.251 0 7.711 3.445 7.711 7.68 0 4.24-3.46 7.685-7.711 7.685" mask="url(#b)"/>
+        </g>
+        <path fill="#F16623" d="M5.51 13.844a3.292 3.292 0 0 0-3.297 3.283 3.292 3.292 0 0 0 3.297 3.28c1.82 0 3.3-1.474 3.3-3.28 0-1.81-1.48-3.283-3.3-3.283m0 8.772c-3.039 0-5.51-2.462-5.51-5.49 0-3.027 2.471-5.492 5.51-5.492 3.041 0 5.512 2.465 5.512 5.493 0 3.027-2.47 5.49-5.512 5.49M12.12 35.77c-3.037 0-5.505 2.454-5.505 5.472 0 3.019 2.468 5.473 5.504 5.473 3.033 0 5.501-2.454 5.501-5.473 0-3.018-2.468-5.472-5.5-5.472m0 13.155c-4.252 0-7.712-3.446-7.712-7.683 0-4.234 3.46-7.682 7.71 [...]
+        <g transform="translate(51.6 76.927)">
+            <mask id="d" fill="#fff">
+                <use xlink:href="#c"/>
+            </mask>
+            <path fill="#F16623" d="M6.77 2.694c-1.821 0-3.3 1.47-3.3 3.285 0 1.803 1.479 3.274 3.3 3.274 1.82 0 3.296-1.47 3.296-3.274a3.291 3.291 0 0 0-3.297-3.285m0 8.775c-3.038 0-5.51-2.468-5.51-5.49C1.26 2.946 3.732.484 6.77.484c3.039 0 5.51 2.462 5.51 5.495 0 3.022-2.471 5.49-5.51 5.49" mask="url(#d)"/>
+        </g>
+        <path fill="#F16623" d="M31.313 35.8L8.695 20.227l1.252-1.817L32.565 33.98z"/>
+        <mask id="f" fill="#fff">
+            <use xlink:href="#e"/>
+        </mask>
+        <path fill="#F16623" d="M41.69 30.728h2.21V17.466h-2.21zM56.71 38.684l-1.087-1.926 17.11-9.632 1.087 1.926zM67.224 57.816l-10.32-6.052 1.121-1.906 10.32 6.051zM55.147 79.531l-7.955-19.049 2.041-.848 7.952 19.046zM36.293 67.897l-2.099-.685 2.449-7.497 2.1.688zM12.95 79.834l-1.665-1.454 19.82-22.74 1.669 1.45zM27.595 44.535l-9.116-.82.2-2.201 9.114.82zM42.12 55.189c.578.06 1.086.06 1.665 0l.37-1.669a.997.997 0 0 1 .705-.745 6.945 6.945 0 0 0 1.493-.62c.324-.18.72-.168 1.032.032l1.4 [...]
+    </g>
+</svg>
diff --git a/docs/assets/images/feature-fast.svg b/docs/assets/images/feature-fast.svg
new file mode 100644
index 0000000..5889878
--- /dev/null
+++ b/docs/assets/images/feature-fast.svg
@@ -0,0 +1,16 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="86" height="74" viewBox="0 0 86 74">
+    <defs>
+        <path id="a" d="M.022 1.27h85.154v72.867H.022z"/>
+    </defs>
+    <g fill="none" fill-rule="evenodd">
+        <path fill="#F16623" d="M46.604 43.541a4.004 4.004 0 0 1-4.006 4.004 3.998 3.998 0 0 1-3.995-4.004 3.998 3.998 0 0 1 3.995-4.003 4.004 4.004 0 0 1 4.006 4.003"/>
+        <path fill="#F16623" d="M42.602 40.9a2.65 2.65 0 0 0-2.648 2.642 2.649 2.649 0 0 0 2.648 2.64 2.648 2.648 0 0 0 2.645-2.64 2.649 2.649 0 0 0-2.645-2.642m0 8.001c-2.957 0-5.365-2.405-5.365-5.359a5.372 5.372 0 0 1 5.365-5.361 5.371 5.371 0 0 1 5.362 5.361 5.369 5.369 0 0 1-5.362 5.359"/>
+        <path fill="#F16623" d="M41.073 45.073L29.516 31.201a.582.582 0 0 1 .074-.828.583.583 0 0 1 .753 0l13.873 11.56a2.227 2.227 0 0 1 .282 3.14 2.229 2.229 0 0 1-3.425 0M13.345 44.517H1.142a1.142 1.142 0 0 1 0-2.283h12.203a1.142 1.142 0 1 1 0 2.283M83.873 44.517H71.67a1.142 1.142 0 0 1 0-2.283h12.203a1.142 1.142 0 0 1 0 2.283"/>
+        <g transform="translate(0 -.304)">
+            <mask id="b" fill="#fff">
+                <use xlink:href="#a"/>
+            </mask>
+            <path fill="#F16623" d="M13.165 74.137h-.003a1.14 1.14 0 0 1-.806-.338C4.402 65.772.022 55.131.022 43.845c0-23.478 19.104-42.576 42.58-42.576 23.477 0 42.575 19.098 42.575 42.576 0 11.286-4.377 21.924-12.33 29.954-.217.217-.487.258-.81.338-.303 0-.593-.121-.807-.332l-8.656-8.632a1.142 1.142 0 0 1 0-1.614 1.133 1.133 0 0 1 1.61 0l7.838 7.809c7.022-7.494 10.875-17.224 10.875-27.523 0-22.218-18.078-40.296-40.296-40.296S2.306 21.627 2.306 43.845c0 10.299 3.852 20.029 10.871 27.52 [...]
+        </g>
+    </g>
+</svg>
diff --git a/docs/assets/images/feature-reliable.svg b/docs/assets/images/feature-reliable.svg
new file mode 100644
index 0000000..d677c70
--- /dev/null
+++ b/docs/assets/images/feature-reliable.svg
@@ -0,0 +1,25 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="84" height="84" viewBox="0 0 84 84">
+    <defs>
+        <path id="a" d="M1.559 2.511h34.1v39.027H1.56z"/>
+        <path id="c" d="M1.333 1.109h34.099v11.383H1.333z"/>
+    </defs>
+    <g fill="none" fill-rule="evenodd">
+        <path fill="#FFF" d="M2.164 69.539l14.888 8.59 14.888-8.59V52.352L17.052 43.74 2.164 52.352V69.54zM17.052 80.46c-.19 0-.371-.052-.54-.145L.54 71.096a1.084 1.084 0 0 1-.54-.931V51.726c0-.385.21-.743.54-.932l15.972-9.24a1.116 1.116 0 0 1 1.08 0l15.972 9.24c.334.19.537.547.537.932v18.439c0 .382-.203.736-.537.932l-15.972 9.22a1.114 1.114 0 0 1-.54.144zM51.654 69.539l14.885 8.59 14.888-8.59V52.352L66.54 43.74l-14.885 8.613V69.54zM66.539 80.46a1.1 1.1 0 0 1-.537-.145l-15.972-9.22a1.076 [...]
+        <path fill="#FFF" d="M29.045 73.711l13.643 7.888 12.763-7.375-5.418-3.127a1.066 1.066 0 0 1-.544-.936V51.726c0-.385.207-.736.544-.932l15.965-9.24c.337-.193.75-.186 1.083 0L72.52 44.7V29.937l-12.78-7.372v6.608c0 .386-.206.747-.54.933L43.228 39.32c-.337.2-.746.2-1.076 0L26.18 30.106a1.061 1.061 0 0 1-.54-.933v-6.608l-12.76 7.372v13.719l3.63-2.102a1.123 1.123 0 0 1 1.084 0l15.968 9.24c.334.196.54.547.54.932V70.16c0 .385-.206.746-.54.936l-4.517 2.614zm13.643 10.217c-.185 0-.375-.048- [...]
+        <g transform="translate(24.08 -2.072)">
+            <mask id="b" fill="#fff">
+                <use xlink:href="#a"/>
+            </mask>
+            <path fill="#FFF" d="M3.722 30.62l14.885 8.589 14.889-8.59V13.433l-14.889-8.59-14.885 8.59v17.186zm14.885 10.918c-.185 0-.371-.049-.536-.145L2.099 32.177a1.075 1.075 0 0 1-.54-.928V12.81c0-.389.206-.746.54-.935l15.972-9.22a1.075 1.075 0 0 1 1.076 0l15.972 9.22c.337.189.54.546.54.935V31.25c0 .381-.203.736-.54.928l-15.972 9.216c-.165.096-.35.145-.54.145z" mask="url(#b)"/>
+        </g>
+        <g transform="translate(48.16 49.528)">
+            <mask id="d" fill="#fff">
+                <use xlink:href="#c"/>
+            </mask>
+            <path fill="#FFF" d="M18.383 12.492c-.19 0-.372-.048-.54-.144L1.874 3.128c-.516-.299-.695-.96-.395-1.472.299-.523.96-.698 1.475-.402l15.429 8.91 15.428-8.91c.52-.3 1.18-.12 1.476.402.3.513.124 1.173-.392 1.472l-15.972 9.22a1.087 1.087 0 0 1-.54.144" mask="url(#d)"/>
+        </g>
+        <path fill="#FFF" d="M66.543 80.46c-.599 0-1.08-.485-1.08-1.073V60.94c0-.598.481-1.08 1.08-1.08.598 0 1.08.482 1.08 1.08v18.446c0 .588-.482 1.073-1.08 1.073M17.059 62.02c-.19 0-.372-.048-.54-.144L.547 52.656c-.516-.298-.691-.959-.392-1.472.296-.522.96-.698 1.476-.402l15.428 8.91 15.428-8.91c.516-.3 1.177-.12 1.476.402.3.513.12 1.174-.395 1.473l-15.969 9.219a1.087 1.087 0 0 1-.54.144"/>
+        <path fill="#FFF" d="M17.059 80.46c-.599 0-1.08-.485-1.08-1.073V60.94c0-.598.481-1.08 1.08-1.08.599 0 1.08.482 1.08 1.08v18.446c0 .588-.481 1.073-1.08 1.073M42.695 21.033c-.19 0-.372-.048-.54-.145l-15.972-9.222a1.073 1.073 0 0 1-.396-1.47c.3-.522.96-.7 1.476-.402l15.432 8.91 15.428-8.91c.516-.299 1.176-.12 1.476.403.299.512.12 1.17-.396 1.469l-15.972 9.222c-.168.097-.35.145-.536.145"/>
+        <path fill="#FFF" d="M42.695 39.472a1.08 1.08 0 0 1-1.08-1.076V19.954a1.078 1.078 0 1 1 2.156 0v18.442c0 .591-.481 1.076-1.076 1.076"/>
+    </g>
+</svg>
diff --git a/docs/assets/images/github-gray.svg b/docs/assets/images/github-gray.svg
new file mode 100644
index 0000000..664368e
--- /dev/null
+++ b/docs/assets/images/github-gray.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path fill="#333" fill-rule="nonzero" d="M12 0C5.373 0 0 5.373 0 12c0 5.303 3.438 9.8 8.207 11.386.6.11.819-.26.819-.577 0-.286-.011-1.232-.017-2.234-3.337.725-4.042-1.415-4.042-1.415-.547-1.386-1.333-1.755-1.333-1.755-1.09-.744.083-.73.083-.73 1.205.084 1.84 1.237 1.84 1.237 1.07 1.834 2.809 1.304 3.491.996.11-.773.42-1.304.762-1.602-2.664-.304-5.466-1.333-5.466-5.932 0-1.31.468-2.38 1.234-3.22-.122-.305-.535-1.526.119-3.177 0 0 1.006-.322 3.3 1.23.957-.267 1.983-.399 3.003-.403 1.0 [...]
+</svg>
diff --git a/docs/assets/images/github-white.svg b/docs/assets/images/github-white.svg
new file mode 100644
index 0000000..5ae1ae6
--- /dev/null
+++ b/docs/assets/images/github-white.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path fill="#FFF" fill-rule="nonzero" d="M12 0C5.373 0 0 5.373 0 12c0 5.303 3.438 9.8 8.207 11.386.6.11.819-.26.819-.577 0-.286-.011-1.232-.017-2.234-3.337.725-4.042-1.415-4.042-1.415-.547-1.386-1.333-1.755-1.333-1.755-1.09-.744.083-.73.083-.73 1.205.084 1.84 1.237 1.84 1.237 1.07 1.834 2.809 1.304 3.491.996.11-.773.42-1.304.762-1.602-2.664-.304-5.466-1.333-5.466-5.932 0-1.31.468-2.38 1.234-3.22-.122-.305-.535-1.526.119-3.177 0 0 1.006-.322 3.3 1.23.957-.267 1.983-.399 3.003-.403 1.0 [...]
+</svg>
diff --git a/docs/assets/images/glowing-box.svg b/docs/assets/images/glowing-box.svg
new file mode 100644
index 0000000..c384c4a
--- /dev/null
+++ b/docs/assets/images/glowing-box.svg
@@ -0,0 +1,170 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="347" height="366" viewBox="0 0 347 366">
+    <defs>
+        <path id="a" d="M62.597 186.739c-2.392-.01-4.672-.5-6.38-1.486L2.575 154.282c-1.983-1.144-2.78-2.734-2.494-4.353H0V0h126.242v149.929h-.049c.057 1.722-1.129 3.549-3.593 4.972l-51.503 29.734c-2.387 1.378-5.438 2.091-8.34 2.104h-.16z"/>
+        <linearGradient id="b" x1="50%" x2="50%" y1="100%" y2="18.88%">
+            <stop offset="0%" stop-color="#F86B27"/>
+            <stop offset="100%" stop-color="#F9F9F9"/>
+        </linearGradient>
+        <path id="d" d="M6.886 6.98c-9.181 9.181-9.181 24.068 0 33.249 9.182 9.182 24.068 9.182 33.249 0 9.182-9.181 9.182-24.068 0-33.249A23.433 23.433 0 0 0 23.511.094 23.437 23.437 0 0 0 6.886 6.98"/>
+        <path id="f" d="M.206 10.482c0 5.377 4.36 9.736 9.736 9.736 5.378 0 9.737-4.359 9.737-9.736 0-5.378-4.359-9.736-9.737-9.736C4.566.746.206 5.104.206 10.482"/>
+        <path id="h" d="M2.202 10.533c-4.299 8.655-.77 19.157 7.884 23.457 8.655 4.299 19.156.77 23.456-7.884a17.425 17.425 0 0 0 1.832-7.665v-.216c-.04-6.395-3.597-12.535-9.715-15.575A17.425 17.425 0 0 0 17.886.819c-6.434 0-12.627 3.562-15.684 9.714"/>
+        <path id="j" d="M95.387 4.612L7.023 55.629c-4.13 2.385-6.5 5.581-6.5 8.769 0 2.67 1.658 5.098 4.668 6.835l92.032 53.135c3.029 1.749 7.086 2.606 11.336 2.606 5.112 0 10.499-1.241 14.693-3.663l88.365-51.018c4.131-2.385 6.5-5.581 6.5-8.769 0-2.671-1.657-5.098-4.668-6.836L121.416 3.554c-3.027-1.748-7.085-2.605-11.334-2.605-5.112 0-10.499 1.241-14.695 3.663m2.336 118.891L5.691 70.368c-2.688-1.552-4.168-3.672-4.168-5.97 0-2.821 2.187-5.702 6-7.904L95.887 5.476c4.059-2.342 9.263-3.544 1 [...]
+        <path id="l" d="M74.607 3.655L36.262 25.793H.546V125.89h.01c-.145 2.003.971 3.934 3.433 5.356l72.056 41.601c5.123 2.958 14.071 2.587 19.988-.828l69.183-39.943c3.073-1.774 4.71-4.021 4.867-6.186h.027V25.793h-35.735L94.596 2.826C92.275 1.486 89.168.83 85.914.829c-3.928 0-8.071.958-11.307 2.826"/>
+        <linearGradient id="m" x1="50%" x2="50%" y1="0%" y2="98.762%">
+            <stop offset="0%" stop-color="#DF2226"/>
+            <stop offset="100%" stop-color="#713C80"/>
+        </linearGradient>
+        <path id="o" d="M74.607 3.665L5.424 43.608c-5.916 3.416-6.559 8.583-1.435 11.54L76.045 96.75c5.123 2.957 14.071 2.586 19.988-.828l69.183-39.944c5.916-3.415 6.558-8.582 1.434-11.54L94.596 2.837C92.274 1.497 89.168.84 85.914.84c-3.928 0-8.071.957-11.307 2.825"/>
+        <linearGradient id="p" x1="-.815%" x2="99.309%" y1="50.001%" y2="49.999%">
+            <stop offset="0%" stop-color="#713C80"/>
+            <stop offset="100%" stop-color="#DF2226"/>
+        </linearGradient>
+        <path id="r" d="M.247 1.705l2.79 3.181V28.48c0 5.152 3.132 11.135 6.996 13.366L61.377 71.49c.055.032.107.052.16.082l1.658 1.889 2.608-1.521c.036-.019.071-.042.107-.063l.247-.144-.008-.007c1.366-.914 2.225-2.835 2.225-5.524V37.808L3.037.086.247 1.705z"/>
+        <linearGradient id="s" x1="-84.629%" x2="93.369%" y1="17.044%" y2="61.111%">
+            <stop offset="0%" stop-color="#781416"/>
+            <stop offset="100%" stop-color="#8C413D"/>
+        </linearGradient>
+        <path id="u" d="M.615 1.995l2.79 3.181V28.77c0 5.151 3.132 11.135 6.995 13.367l51.346 29.644c.053.03.106.052.16.081l1.657 1.889 2.607-1.52c.037-.019.072-.043.108-.063l.246-.144-.007-.008c1.365-.915 2.225-2.834 2.225-5.524V38.098L3.405.376.615 1.995z"/>
+        <linearGradient id="v" x1="-84.629%" x2="93.369%" y1="17.044%" y2="61.111%">
+            <stop offset="0%" stop-color="#781416"/>
+            <stop offset="100%" stop-color="#8C413D"/>
+        </linearGradient>
+        <path id="x" d="M.615 29.389c0 5.151 3.132 11.136 6.995 13.366L58.956 72.4c3.863 2.23 6.996-.138 6.996-5.289V38.717L.615.996v28.393z"/>
+        <linearGradient id="y" x1="-4.361%" x2="157.759%" y1="50.276%" y2="49.409%">
+            <stop offset="0%" stop-color="#DF2226"/>
+            <stop offset="100%" stop-color="#F86B27"/>
+        </linearGradient>
+    </defs>
+    <g fill="none" fill-rule="evenodd">
+        <g transform="translate(112)">
+            <mask id="c" fill="#fff">
+                <use xlink:href="#a"/>
+            </mask>
+            <path fill="url(#b)" d="M126.242 0H0v149.929h.081c-.286 1.619.511 3.209 2.494 4.353l53.642 30.971c3.813 2.202 10.476 1.925 14.88-.618l51.503-29.734c2.464-1.423 3.65-3.25 3.593-4.972h.049V0z" mask="url(#c)"/>
+        </g>
+        <g transform="translate(0 262.5)">
+            <mask id="e" fill="#fff">
+                <use xlink:href="#d"/>
+            </mask>
+            <path d="M6.886 6.98c-9.181 9.181-9.181 24.068 0 33.249 9.182 9.182 24.068 9.182 33.249 0 9.182-9.181 9.182-24.068 0-33.249A23.433 23.433 0 0 0 23.511.094 23.437 23.437 0 0 0 6.886 6.98" mask="url(#e)"/>
+        </g>
+        <g transform="translate(44 109.5)">
+            <mask id="g" fill="#fff">
+                <use xlink:href="#f"/>
+            </mask>
+            <path d="M.206 10.482c0 5.377 4.36 9.736 9.736 9.736 5.378 0 9.737-4.359 9.737-9.736 0-5.378-4.359-9.736-9.737-9.736C4.566.746.206 5.104.206 10.482" mask="url(#g)"/>
+        </g>
+        <g transform="translate(315 196.5)">
+            <mask id="i" fill="#fff">
+                <use xlink:href="#h"/>
+            </mask>
+            <path d="M2.202 10.533c-4.299 8.655-.77 19.157 7.884 23.457 8.655 4.299 19.156.77 23.456-7.884a17.425 17.425 0 0 0 1.832-7.665v-.216c-.04-6.395-3.597-12.535-9.715-15.575A17.425 17.425 0 0 0 17.886.819c-6.434 0-12.627 3.562-15.684 9.714" mask="url(#i)"/>
+        </g>
+        <path fill="#757575" d="M337.354 285.698c-7.036 1.365-14.658-.82-17.023-4.884-2.366-4.062 1.421-8.464 8.458-9.829 7.037-1.365 14.659.821 17.024 4.884 2.365 4.062-1.422 8.463-8.459 9.83M29.748 364.935c-9.791 1.899-20.395-1.143-23.686-6.795-3.291-5.652 1.978-11.775 11.769-13.675 9.79-1.9 20.395 1.143 23.685 6.795 3.29 5.653-1.978 11.775-11.768 13.675M56.081 159.338c-3.515.682-7.32-.41-8.503-2.44-1.18-2.03.711-4.227 4.225-4.91 3.516-.68 7.322.412 8.504 2.44 1.18 2.03-.71 4.228-4.226 [...]
+        <path fill="#DF2226" d="M120.757 79.471a2.494 2.494 0 1 1-4.988 0 2.494 2.494 0 0 1 4.988 0M77.548 333.106a3.005 3.005 0 1 1-6.01 0 3.005 3.005 0 0 1 6.01 0"/>
+        <path fill="#F86B27" d="M57.036 319.807a1.547 1.547 0 1 1-3.094 0 1.547 1.547 0 0 1 3.094 0M319.627 262.7a1.6 1.6 0 1 1-3.199-.001 1.6 1.6 0 0 1 3.199 0M23.789 154.769a2.25 2.25 0 1 1-4.501 0 2.25 2.25 0 1 1 4.5 0"/>
+        <path fill="#713C80" d="M191.996 72.7a2.25 2.25 0 1 1-4.501-.001 2.25 2.25 0 0 1 4.5 0"/>
+        <path fill="#F86B27" d="M32.951 149.781a1.247 1.247 0 1 1-2.494 0 1.247 1.247 0 0 1 2.494 0"/>
+        <path fill="#DF2226" d="M247.481 80.738a1.473 1.473 0 1 1-2.946 0 1.473 1.473 0 0 1 2.946 0"/>
+        <path fill="#F86B27" d="M31.24 228.566l-.538-1.926 4.28-1.197-1.197-4.28 1.926-.539 1.736 6.206z"/>
+        <path fill="#F86B27" d="M27.463 235.276l-.539-1.926 4.28-1.197-1.196-4.28 1.926-.539 1.735 6.206z"/>
+        <path fill="#F86B27" d="M31.474 233.116l-1.735-6.206 6.206-1.736.54 1.925-4.282 1.198 1.197 4.28z"/>
+        <path fill="#713C80" d="M179.164 77.977a2.764 2.764 0 0 0-2.761 2.76 2.765 2.765 0 0 0 2.76 2.762 2.764 2.764 0 0 0 2.76-2.762 2.764 2.764 0 0 0-2.76-2.76m0 7.521a4.767 4.767 0 0 1-4.76-4.76 4.766 4.766 0 0 1 4.76-4.76 4.765 4.765 0 0 1 4.76 4.76 4.766 4.766 0 0 1-4.76 4.76"/>
+        <path fill="#F86B27" d="M281.002 318.256l2.573 2.574 2.575-2.574-2.575-2.574-2.573 2.574zm2.573 5.402l-5.401-5.402 5.401-5.402 5.404 5.402-5.404 5.402z"/>
+        <path fill="#DF2226" d="M300.805 133.69l-5.783-5.783 1.414-1.414 5.783 5.783z"/>
+        <path fill="#DF2226" d="M296.436 133.69l-1.414-1.414 5.783-5.783 1.414 1.414z"/>
+        <g transform="translate(64 231.5)">
+            <mask id="k" fill="#fff">
+                <use xlink:href="#j"/>
+            </mask>
+            <path d="M95.387 4.612L7.023 55.629c-4.13 2.385-6.5 5.581-6.5 8.769 0 2.67 1.658 5.098 4.668 6.835l92.032 53.135c3.029 1.749 7.086 2.606 11.336 2.606 5.112 0 10.499-1.241 14.693-3.663l88.365-51.018c4.131-2.385 6.5-5.581 6.5-8.769 0-2.671-1.657-5.098-4.668-6.836L121.416 3.554c-3.027-1.748-7.085-2.605-11.334-2.605-5.112 0-10.499 1.241-14.695 3.663m2.336 118.891L5.691 70.368c-2.688-1.552-4.168-3.672-4.168-5.97 0-2.821 2.187-5.702 6-7.904L95.887 5.476c4.059-2.342 9.263-3.544 14.1 [...]
+        </g>
+        <path fill="#757575" fill-opacity=".3" d="M164.566 339.775l-68.002-39.26c-4.835-2.792-4.229-7.669 1.354-10.89l65.292-37.698c5.583-3.222 14.028-3.573 18.862-.78l68.003 39.26c4.835 2.792 4.23 7.668-1.354 10.89l-65.29 37.697c-5.584 3.222-14.03 3.573-18.865.781"/>
+        <g transform="translate(88 149.5)">
+            <mask id="n" fill="#fff">
+                <use xlink:href="#l"/>
+            </mask>
+            <path fill="url(#m)" d="M74.607 3.655L36.262 25.793H.546V125.89h.01c-.145 2.003.971 3.934 3.433 5.356l72.056 41.601c5.123 2.958 14.071 2.587 19.988-.828l69.183-39.943c3.073-1.774 4.71-4.021 4.867-6.186h.027V25.793h-35.735L94.596 2.826C92.275 1.486 89.168.83 85.914.829c-3.928 0-8.071.958-11.307 2.826" mask="url(#n)"/>
+        </g>
+        <g>
+            <path fill="#D4088C" d="M97.595 175.293h-9.05v100.098h.012c-.104 1.421.442 2.801 1.64 3.995-.765-1.021-1.112-2.144-1.028-3.293h-.012V175.996h9.145a13.392 13.392 0 0 0-.707-.703"/>
+            <path fill="#F86B27" d="M246.671 175.293c-.064.201-.134.401-.205.602h11.001v100.097h-.026c-.098 1.342-.766 2.715-1.99 3.988 1.627-1.436 2.518-3.033 2.632-4.589h.026V175.293h-11.438z"/>
+            <path fill="#DF2226" d="M113.786 293.328v-116.1H100.81v108.608zM121.754 297.929V185.025h-3.545v110.857zM128.1 301.592V186.388h-3.545v113.157z" style="mix-blend-mode:overlay"/>
+        </g>
+        <g transform="translate(88 125.5)">
+            <mask id="q" fill="#fff">
+                <use xlink:href="#o"/>
+            </mask>
+            <path fill="url(#p)" d="M74.607 3.665L5.424 43.608c-5.916 3.416-6.559 8.583-1.435 11.54L76.045 96.75c5.123 2.957 14.071 2.586 19.988-.828l69.183-39.944c5.916-3.415 6.558-8.582 1.434-11.54L94.596 2.837C92.274 1.497 89.168.84 85.914.84c-3.928 0-8.071.957-11.307 2.825" mask="url(#q)"/>
+        </g>
+        <g>
+            <path fill="#D4088C" d="M164.838 222.25l-72.056-41.602c-5.123-2.957-4.481-8.124 1.435-11.54l69.184-39.942c2.93-1.692 6.604-2.632 10.19-2.795-3.834.05-7.835.977-10.984 2.795l-69.183 39.942c-5.916 3.416-6.558 8.583-1.435 11.54l72.056 41.602c2.585 1.493 6.145 2.132 9.797 1.966-3.368.044-6.608-.582-9.004-1.966"/>
+            <path fill="#F86B27" d="M254.65 169.938l-72.055-41.602c-2.59-1.494-6.156-2.133-9.814-1.964 3.327-.028 6.522.597 8.89 1.964l72.057 41.602c5.123 2.958 4.48 8.125-1.435 11.54l-69.183 39.943c-2.926 1.689-6.594 2.628-10.174 2.793 3.868-.032 7.917-.957 11.097-2.793l69.183-39.943c5.915-3.415 6.558-8.582 1.435-11.54"/>
+            <path fill="#F86B27" d="M166.415 210.252l-53.646-30.972c-3.814-2.202-3.335-6.049 1.069-8.591l51.507-29.738c4.404-2.543 11.067-2.819 14.88-.617l53.646 30.972c3.815 2.203 3.336 6.049-1.068 8.592l-51.507 29.737c-4.404 2.543-11.067 2.82-14.881.617"/>
+            <path fill="#4A2754" d="M113.837 176.475l51.507-29.737c4.404-2.543 11.067-2.819 14.881-.617l53.645 30.972c.5.288.921.606 1.274.944 2.05-2.315 1.691-5.019-1.274-6.73l-53.645-30.973c-3.814-2.202-10.477-1.926-14.88.617l-51.508 29.737c-3.828 2.21-4.686 5.404-2.342 7.648.588-.662 1.362-1.295 2.342-1.86"/>
+            <path fill="#F86B27" d="M186.088 229.354l60.952-35.256c.558-.322 1.01-1.185 1.01-1.929v-1c0-.743-.452-1.085-1.01-.763l-60.952 35.256c-.558.322-1.01 1.185-1.01 1.929v1c0 .743.452 1.085 1.01.763"/>
+            <path fill="#C7531B" d="M245.706 193.336c.558-.322 1.01-1.186 1.01-1.93v-.812l.325-.188c.558-.321 1.01.02 1.01.763v1c0 .744-.452 1.607-1.01 1.93l-60.952 35.255c-.558.322-1.01-.02-1.01-.763v-.187l60.627-35.068z"/>
+            <path fill="#F86B27" d="M186.088 240.081l60.952-35.255c.558-.323 1.01-1.186 1.01-1.93v-1c0-.743-.452-1.085-1.01-.763l-60.952 35.256c-.558.322-1.01 1.185-1.01 1.928v1c0 .744.452 1.086 1.01.764"/>
+            <path fill="#C7531B" d="M245.706 204.063c.558-.322 1.01-1.186 1.01-1.929v-.813l.325-.188c.558-.321 1.01.02 1.01.763v1c0 .744-.452 1.607-1.01 1.93l-60.952 35.255c-.558.322-1.01-.019-1.01-.764v-.186l60.627-35.068z"/>
+            <path fill="#F86B27" d="M186.088 250.808l60.952-35.255c.558-.322 1.01-1.185 1.01-1.93v-1c0-.742-.452-1.084-1.01-.762l-60.952 35.256c-.558.32-1.01 1.185-1.01 1.928v1c0 .743.452 1.085 1.01.763"/>
+            <path fill="#C7531B" d="M245.706 214.79c.558-.322 1.01-1.186 1.01-1.929v-.813l.325-.188c.558-.321 1.01.02 1.01.763v1c0 .744-.452 1.607-1.01 1.93l-60.952 35.255c-.558.322-1.01-.02-1.01-.763v-.187l60.627-35.068z"/>
+            <path fill="#F86B27" d="M186.088 261.535l60.952-35.255c.558-.323 1.01-1.186 1.01-1.93v-1c0-.743-.452-1.085-1.01-.763l-60.952 35.256c-.558.322-1.01 1.185-1.01 1.928v1c0 .744.452 1.086 1.01.764"/>
+            <path fill="#C7531B" d="M245.706 225.517c.558-.322 1.01-1.186 1.01-1.929v-.813l.325-.188c.558-.32 1.01.02 1.01.763v1c0 .744-.452 1.607-1.01 1.93l-60.952 35.255c-.558.322-1.01-.019-1.01-.764v-.186l60.627-35.068z"/>
+            <path fill="#F86B27" d="M186.088 272.262l60.952-35.255c.558-.322 1.01-1.185 1.01-1.93v-1c0-.742-.452-1.084-1.01-.762l-60.952 35.256c-.558.32-1.01 1.185-1.01 1.928v1c0 .743.452 1.085 1.01.763"/>
+            <path fill="#C7531B" d="M245.706 236.244c.558-.322 1.01-1.186 1.01-1.929v-.813l.325-.188c.558-.32 1.01.02 1.01.763v1c0 .744-.452 1.607-1.01 1.93l-60.952 35.255c-.558.322-1.01-.02-1.01-.763v-.187l60.627-35.068z"/>
+            <path fill="#F86B27" d="M186.088 282.99l60.952-35.257c.558-.32 1.01-1.185 1.01-1.929v-1c0-.743-.452-1.085-1.01-.762l-60.952 35.255c-.558.322-1.01 1.185-1.01 1.928v1c0 .744.452 1.086 1.01.764"/>
+            <path fill="#C7531B" d="M245.706 246.972c.558-.322 1.01-1.186 1.01-1.93v-.812l.325-.188c.558-.322 1.01.02 1.01.763v1c0 .743-.452 1.607-1.01 1.929l-60.952 35.256c-.558.322-1.01-.02-1.01-.764v-.187l60.627-35.067z"/>
+            <path fill="#F86B27" d="M186.088 293.716l60.952-35.255c.558-.322 1.01-1.185 1.01-1.93v-1c0-.743-.452-1.085-1.01-.762l-60.952 35.256c-.558.32-1.01 1.185-1.01 1.928v1c0 .743.452 1.085 1.01.763"/>
+            <path fill="#C7531B" d="M245.706 257.698c.558-.322 1.01-1.186 1.01-1.929v-.813l.325-.188c.558-.322 1.01.02 1.01.764v1c0 .743-.452 1.606-1.01 1.93l-60.952 35.254c-.558.322-1.01-.02-1.01-.763v-.187l60.627-35.068z"/>
+            <path fill="#F86B27" d="M186.088 304.443l60.952-35.256c.558-.32 1.01-1.185 1.01-1.929v-1c0-.743-.452-1.085-1.01-.762l-60.952 35.255c-.558.322-1.01 1.185-1.01 1.928v1c0 .744.452 1.086 1.01.764"/>
+            <path fill="#C7531B" d="M245.706 268.426c.558-.322 1.01-1.186 1.01-1.93v-.812l.325-.188c.558-.322 1.01.02 1.01.763v1c0 .743-.452 1.607-1.01 1.929l-60.952 35.256c-.558.322-1.01-.02-1.01-.764v-.187l60.627-35.067z"/>
+            <path fill="#F86B27" d="M186.088 315.17l60.952-35.255c.558-.322 1.01-1.185 1.01-1.93v-1c0-.743-.452-1.085-1.01-.762l-60.952 35.256c-.558.32-1.01 1.185-1.01 1.928v1c0 .743.452 1.085 1.01.763"/>
+            <path fill="#C7531B" d="M245.706 279.152c.558-.322 1.01-1.186 1.01-1.929v-.813l.325-.188c.558-.32 1.01.02 1.01.764v1c0 .743-.452 1.606-1.01 1.93l-60.952 35.254c-.558.322-1.01-.02-1.01-.763v-.187l60.627-35.068z"/>
+            <path fill="#F86B27" d="M174.956 231.099a1.636 1.636 0 1 1-3.272 0 1.636 1.636 0 0 1 3.272 0"/>
+            <path fill="#C7531B" d="M173.32 232.121a1.636 1.636 0 0 1-1.605-1.329 1.636 1.636 0 1 0 3.21 0 1.636 1.636 0 0 1-1.605 1.33"/>
+            <path fill="#F86B27" d="M174.956 241.825a1.636 1.636 0 1 1-3.272.002 1.636 1.636 0 0 1 3.272-.002"/>
+            <path fill="#C7531B" d="M173.32 242.848a1.635 1.635 0 0 1-1.605-1.33 1.636 1.636 0 1 0 3.21 0 1.635 1.635 0 0 1-1.605 1.33"/>
+            <path fill="#F86B27" d="M174.956 252.553a1.636 1.636 0 1 1-3.272 0 1.636 1.636 0 0 1 3.272 0"/>
+            <path fill="#C7531B" d="M173.32 253.575a1.635 1.635 0 0 1-1.605-1.329 1.636 1.636 0 1 0 3.21 0 1.635 1.635 0 0 1-1.605 1.33"/>
+            <path fill="#F86B27" d="M174.956 263.28a1.636 1.636 0 1 1-3.272 0 1.636 1.636 0 0 1 3.272 0"/>
+            <path fill="#C7531B" d="M173.32 264.303a1.636 1.636 0 0 1-1.605-1.33 1.636 1.636 0 1 0 3.21 0 1.636 1.636 0 0 1-1.605 1.33"/>
+            <path fill="#F86B27" d="M174.956 274.007a1.636 1.636 0 1 1-3.272 0 1.636 1.636 0 0 1 3.272 0"/>
+            <path fill="#C7531B" d="M173.32 275.03a1.635 1.635 0 0 1-1.605-1.33 1.636 1.636 0 1 0 3.21 0 1.635 1.635 0 0 1-1.605 1.33"/>
+            <path fill="#F86B27" d="M174.956 284.733a1.636 1.636 0 1 1-3.272.002 1.636 1.636 0 0 1 3.272-.002"/>
+            <path fill="#C7531B" d="M173.32 285.757a1.636 1.636 0 0 1-1.605-1.33 1.636 1.636 0 1 0 3.21 0 1.636 1.636 0 0 1-1.605 1.33"/>
+            <path fill="#F86B27" d="M174.956 295.46a1.636 1.636 0 1 1-3.272 0 1.636 1.636 0 0 1 3.272 0"/>
+            <path fill="#C7531B" d="M173.32 296.483a1.635 1.635 0 0 1-1.605-1.329 1.636 1.636 0 1 0 3.21 0 1.635 1.635 0 0 1-1.605 1.33"/>
+            <path fill="#F86B27" d="M174.956 306.188a1.636 1.636 0 1 1-3.272 0 1.636 1.636 0 0 1 3.272 0"/>
+            <path fill="#C7531B" d="M173.32 307.21a1.636 1.636 0 0 1-1.605-1.33 1.636 1.636 0 1 0 3.21 0 1.636 1.636 0 0 1-1.605 1.33"/>
+            <path fill="#F86B27" d="M174.956 316.915a1.636 1.636 0 1 1-3.272 0 1.636 1.636 0 0 1 3.272 0"/>
+            <path fill="#C7531B" d="M173.32 317.938a1.635 1.635 0 0 1-1.605-1.33 1.636 1.636 0 1 0 3.21 0 1.635 1.635 0 0 1-1.605 1.33"/>
+            <path fill="#4A2754" d="M145.675 227.347a.92.92 0 0 0-.463.119c-.423.244-.665.839-.665 1.63v65.839c0 1.599.97 3.459 2.158 4.145l2.441 1.41c.468.27.91.31 1.245.12.422-.244.665-.84.665-1.631V233.14c0-1.6-.969-3.458-2.158-4.146l-2.44-1.41c-.276-.158-.543-.238-.783-.238m4.254 73.88c-.327 0-.678-.104-1.03-.308l-2.442-1.41c-1.327-.765-2.406-2.817-2.406-4.574v-65.838c0-.975.332-1.726.912-2.061.494-.286 1.113-.243 1.742.12l2.441 1.41c1.327.765 2.406 2.818 2.406 4.575v65.838c0 .974-.3 [...]
+        </g>
+        <g transform="translate(172 99.5)">
+            <mask id="t" fill="#fff">
+                <use xlink:href="#r"/>
+            </mask>
+            <path fill="url(#s)" d="M.247 1.705l2.79 3.181V28.48c0 5.152 3.132 11.135 6.996 13.366L61.377 71.49c.055.032.107.052.16.082l1.658 1.889 2.608-1.521c.036-.019.071-.042.107-.063l.247-.144-.008-.007c1.366-.914 2.225-2.835 2.225-5.524V37.808L3.037.086.247 1.705z" mask="url(#t)"/>
+        </g>
+        <g>
+            <path fill="#F86B27" d="M172.247 101.205l65.336 37.722v28.394c0 5.151-3.13 7.52-6.996 5.288l-51.344-29.644c-3.864-2.23-6.996-8.215-6.996-13.366v-28.394z"/>
+            <path fill="#4A2754" d="M170.707 211.602l-12.507 7.274-56.137-32.411 11.628-6.68z"/>
+        </g>
+        <g transform="translate(108 137.5)">
+            <mask id="w" fill="#fff">
+                <use xlink:href="#u"/>
+            </mask>
+            <path fill="url(#v)" d="M.615 1.995l2.79 3.181V28.77c0 5.151 3.132 11.135 6.995 13.367l51.346 29.644c.053.03.106.052.16.081l1.657 1.889 2.607-1.52c.037-.019.072-.043.108-.063l.246-.144-.007-.008c1.365-.915 2.225-2.834 2.225-5.524V38.098L3.405.376.615 1.995z" mask="url(#w)"/>
+        </g>
+        <g transform="translate(108 138.5)">
+            <mask id="z" fill="#fff">
+                <use xlink:href="#x"/>
+            </mask>
+            <path fill="url(#y)" d="M.615 29.389c0 5.151 3.132 11.136 6.995 13.366L58.956 72.4c3.863 2.23 6.996-.138 6.996-5.289V38.717L.615.996v28.393z" mask="url(#z)"/>
+        </g>
+        <g>
+            <path fill="#38025B" d="M247.724 165.956l-9.852-5.787 9.852 5.787z"/>
+            <path fill="#DF2226" d="M3.612 196.375a1.473 1.473 0 1 1-2.946 0 1.473 1.473 0 0 1 2.946 0"/>
+        </g>
+    </g>
+</svg>
diff --git a/docs/assets/images/integrations/hibernate.svg b/docs/assets/images/integrations/hibernate.svg
new file mode 100644
index 0000000..38e4f31
--- /dev/null
+++ b/docs/assets/images/integrations/hibernate.svg
@@ -0,0 +1,6 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="32" height="34" viewBox="0 0 32 34">
+    <g fill="none" fill-rule="nonzero">
+        <path fill="#59666C" d="M19.209 22.367l-.117.344 6.143 10.418.347.246L32 22.277l-6.418-11.142-6.373 11.232zM6.284.038L0 11.136l6.53 11.23 6.216-11.23-.016-.454L6.57.264 6.285.038z"/>
+        <path fill="#BCAE79" d="M6.284.038l6.463 11.098h12.835L19.075.037H6.285zm.245 22.329l6.329 11.008h12.724L19.21 22.367H6.529z"/>
+    </g>
+</svg>
diff --git a/docs/assets/images/integrations/kafka.svg b/docs/assets/images/integrations/kafka.svg
new file mode 100644
index 0000000..db145e2
--- /dev/null
+++ b/docs/assets/images/integrations/kafka.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="33" height="52" viewBox="0 0 33 52">
+    <path fill="#000" fill-rule="nonzero" d="M25.248 28.802c-2.024 0-3.84.897-5.083 2.31l-3.186-2.256c.338-.931.533-1.93.533-2.977a8.697 8.697 0 0 0-.515-2.929l3.179-2.231a6.758 6.758 0 0 0 5.072 2.298 6.786 6.786 0 0 0 6.78-6.78 6.786 6.786 0 0 0-6.78-6.778 6.786 6.786 0 0 0-6.778 6.779c0 .669.1 1.314.282 1.925l-3.18 2.232a8.75 8.75 0 0 0-5.422-3.15v-3.833c3.071-.645 5.385-3.373 5.385-6.633A6.786 6.786 0 0 0 8.755 0a6.786 6.786 0 0 0-6.778 6.779c0 3.216 2.254 5.91 5.263 6.602v3.883C3.13 [...]
+</svg>
diff --git a/docs/assets/images/integrations/more.svg b/docs/assets/images/integrations/more.svg
new file mode 100644
index 0000000..42a3af1
--- /dev/null
+++ b/docs/assets/images/integrations/more.svg
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg width="33.459" height="8" version="1.1" viewBox="0 0 8.8528 2.1167" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <g transform="translate(-5.163 -286.42)" fill="#ededed" stroke="#8e8e8e" stroke-width=".13935">
+  <circle cx="9.525" cy="287.47" r=".98866" style="paint-order:markers fill stroke"/>
+  <circle cx="6.2213" cy="287.47" r=".98866" style="paint-order:markers fill stroke"/>
+  <circle cx="12.957" cy="287.47" r=".98866" style="paint-order:markers fill stroke"/>
+ </g>
+</svg>
diff --git a/docs/assets/images/integrations/oracle.svg b/docs/assets/images/integrations/oracle.svg
new file mode 100644
index 0000000..484c750
--- /dev/null
+++ b/docs/assets/images/integrations/oracle.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="92" height="12" viewBox="0 0 92 12">
+    <path fill="#F80000" fill-rule="nonzero" d="M38.297 7.504h5.853l-3.095-4.98-5.68 9.003H32.79L39.699.713c.3-.437.8-.7 1.356-.7.537 0 1.038.254 1.329.682l6.936 10.832h-2.585l-1.22-2.012H39.59l-1.293-2.011zm26.852 2.011V.121h-2.194v10.313c0 .283.11.556.32.765.208.21.49.328.8.328h10.004l1.292-2.012H65.15zM28.858 7.831a3.854 3.854 0 1 0 0-7.71H19.26v11.406h2.193V2.133h7.258c1.02 0 1.839.828 1.839 1.848s-.82 1.848-1.839 1.848l-6.184-.01 6.548 5.708h3.186L27.856 7.83h1.002zM5.762 11.527A5.7 [...]
+</svg>
diff --git a/docs/assets/images/integrations/osgi.svg b/docs/assets/images/integrations/osgi.svg
new file mode 100644
index 0000000..dae8409
--- /dev/null
+++ b/docs/assets/images/integrations/osgi.svg
@@ -0,0 +1,17 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="42" height="39" viewBox="0 0 42 39">
+    <g fill="none" fill-rule="nonzero">
+        <path fill="#FF7300" d="M9.376 12.332S15.346.008 21.069.008c5.722 0 11.483 12.324 11.483 12.324l-.936 1.815S27.87 9.256 21.069 9.256c-6.802 0-10.7 4.89-10.7 4.89l-.993-1.814z"/>
+        <path fill="#FFB780" d="M13.537 12.488a13.108 13.108 0 0 0-2.595 2.374c1.753 2.27 5.022 5.247 10.128 5.247 5.077 0 8.24-2.942 9.927-5.206a13.129 13.129 0 0 0-2.557-2.368c-1.64 1.413-4.071 2.779-7.37 2.779-3.35 0-5.852-1.4-7.533-2.826z"/>
+        <path fill="#F30" d="M31.034 9.46c-.033.06-.642 1.174-1.886 2.42 1.62 1.16 2.468 2.267 2.468 2.267l.936-1.816s-.565-1.21-1.518-2.872zm-20.108.03c-.97 1.645-1.552 2.841-1.552 2.841l.997 1.816s.872-1.096 2.514-2.25c-1.301-1.26-1.948-2.388-1.96-2.408z"/>
+        <g>
+            <path fill="#FF7300" d="M36.238 18.719s7.688 11.333 4.826 16.288c-2.86 4.956-16.414 3.783-16.414 3.783l-1.103-1.718s6.108-.798 9.509-6.688c3.4-5.891 1.114-11.712 1.114-11.712l2.068.047z"/>
+            <path fill="#FFB780" d="M34.022 22.245a13.108 13.108 0 0 0-.759-3.435c-2.841.383-7.054 1.726-9.607 6.148-2.538 4.397-1.573 8.607-.455 11.2 1.148-.194 2.271-.54 3.33-1.03-.405-2.127-.372-4.915 1.278-7.772 1.675-2.901 4.137-4.369 6.213-5.111z"/>
+            <path fill="#F30" d="M27.897 38.912c-.036-.059-.696-1.143-1.154-2.843-1.814.822-3.197 1.003-3.197 1.003l1.105 1.719s1.331.115 3.246.121zm10.028-17.43a44.635 44.635 0 0 0-1.685-2.764l-2.071-.045s.513 1.304.692 3.303c1.742-.497 3.042-.494 3.064-.493z"/>
+        </g>
+        <g>
+            <path fill="#FF7300" d="M17.276 38.79s-13.658.99-16.52-3.966c-2.86-4.955 4.932-16.106 4.932-16.106l2.04-.097s-2.364 5.69 1.037 11.58 9.586 6.82 9.586 6.82l-1.075 1.768z"/>
+            <path fill="#FFB780" d="M15.33 35.107c1.066.503 2.195.86 3.354 1.06 1.09-2.652 2.032-6.972-.52-11.394-2.54-4.396-6.668-5.665-9.473-5.994a13.129 13.129 0 0 0-.771 3.399c2.043.713 4.441 2.136 6.09 4.992 1.676 2.902 1.715 5.768 1.32 7.937z"/>
+            <path fill="#F30" d="M3.958 21.469c.07-.002 1.339-.031 3.04.422.195-1.982.73-3.27.73-3.27l-2.041.097s-.766 1.095-1.729 2.75zm10.08 17.4c1.911.016 3.238-.078 3.238-.078l1.074-1.771s-1.385-.208-3.206-1.052c-.44 1.757-1.094 2.88-1.105 2.9z"/>
+        </g>
+    </g>
+</svg>
diff --git a/docs/assets/images/integrations/spark.svg b/docs/assets/images/integrations/spark.svg
new file mode 100644
index 0000000..c0cb1b8
--- /dev/null
+++ b/docs/assets/images/integrations/spark.svg
@@ -0,0 +1,7 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="72" height="38" viewBox="0 0 72 38">
+    <g fill="none" fill-rule="evenodd">
+        <path fill="#E25A1C" d="M65.712 19.035c-.062-.133-.09-.2-.124-.264-.9-1.71-1.798-3.423-2.706-5.13-.091-.171-.08-.273.045-.42 1.432-1.672 2.856-3.351 4.281-5.028a.451.451 0 0 0 .115-.227c-.417.11-.834.217-1.25.327-1.73.459-3.46.915-5.188 1.38-.162.043-.235-.004-.315-.137-.982-1.641-1.97-3.278-2.956-4.916a.67.67 0 0 0-.215-.24c-.079.438-.16.875-.237 1.312-.275 1.544-.55 3.088-.823 4.632-.03.166-.071.332-.085.5-.014.16-.096.218-.24.264-2.039.64-4.075 1.286-6.111 1.931a.676.676 0 0 0 [...]
+        <path fill="#3C3A3E" d="M62.981 33.422c-1.263-.002-2.526-.008-3.789-.003-.166 0-.261-.048-.354-.19-1.495-2.278-2.997-4.55-4.498-6.825-.048-.072-.099-.142-.184-.264l-.955 7.265h-3.308c.039-.322.073-.634.113-.944l.972-7.398c.31-2.356.618-4.712.932-7.068.01-.07.056-.16.113-.196 1.139-.743 2.28-1.478 3.423-2.214.016-.011.04-.013.098-.03l-1.03 7.863.04.028 5.414-6c.053.305.099.566.143.828.129.749.252 1.499.39 2.246.027.15-.013.244-.113.349-1.159 1.212-2.313 2.43-3.468 3.645l-.157.17c. [...]
+        <path fill="#3C3A3E" fill-rule="nonzero" d="M66.6 33.403v-1.296h-.007l-.508 1.296h-.162l-.509-1.296h-.008v1.296h-.256V31.85h.396l.463 1.179.456-1.18h.392v1.553h-.256zm-2.252-1.345v1.345h-.256v-1.345h-.487v-.207h1.229v.207h-.486zM17.664 15.711h.76l-.179-1.152-.581 1.152zm.88.745h-1.266l-.402.788h-.897l1.978-3.696h.864l.674 3.696h-.831l-.12-.788zM23.075 14.293h-.451l-.152.853h.45c.273 0 .49-.18.49-.516 0-.223-.136-.337-.337-.337zm-1.092-.745h1.185c.62 0 1.054.37 1.054 1.005 0 .8-.5 [...]
+    </g>
+</svg>
diff --git a/docs/assets/images/integrations/spring.svg b/docs/assets/images/integrations/spring.svg
new file mode 100644
index 0000000..0e5f74e
--- /dev/null
+++ b/docs/assets/images/integrations/spring.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="37" height="37" viewBox="0 0 37 37">
+    <path fill="#77BC1F" fill-rule="nonzero" d="M33.598 1.925a17.06 17.06 0 0 1-1.972 3.502A18.534 18.534 0 0 0 18.524 0C8.362 0 0 8.372 0 18.548c0 5.076 2.079 9.936 5.754 13.438l.684.607a18.525 18.525 0 0 0 11.932 4.364c9.661 0 17.783-7.574 18.471-17.225.505-4.725-.88-10.7-3.243-17.807zM8.386 32.092c-.298.37-.755.587-1.231.587-.871 0-1.583-.717-1.583-1.587 0-.871.717-1.588 1.583-1.588a1.593 1.593 0 0 1 1.232 2.589zm25.135-5.552c-4.57 6.096-14.333 4.042-20.593 4.335 0 0-1.111.067-2.227.2 [...]
+</svg>
diff --git a/docs/assets/images/java.svg b/docs/assets/images/java.svg
new file mode 100644
index 0000000..962f9d7
--- /dev/null
+++ b/docs/assets/images/java.svg
@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="56" height="76" viewBox="0 0 56 76">
+    <g fill="none" fill-rule="nonzero">
+        <path fill="#5382A1" d="M18.059 58.51s-2.887 1.679 2.054 2.247c5.987.683 9.047.585 15.645-.664 0 0 1.734 1.088 4.157 2.03-14.79 6.339-33.473-.367-21.856-3.613M16.251 50.238s-3.238 2.397 1.708 2.908c6.395.66 11.446.714 20.185-.969 0 0 1.209 1.226 3.11 1.896-17.882 5.229-37.8.412-25.003-3.835"/>
+        <path fill="#E76F00" d="M31.487 36.206c3.645 4.196-.957 7.972-.957 7.972s9.253-4.777 5.004-10.759c-3.97-5.578-7.013-8.35 9.464-17.907 0 0-25.864 6.46-13.51 20.694"/>
+        <path fill="#5382A1" d="M51.048 64.628s2.137 1.76-2.353 3.122c-8.537 2.586-35.532 3.367-43.03.103-2.697-1.172 2.359-2.8 3.949-3.141 1.658-.36 2.606-.293 2.606-.293-2.998-2.112-19.377 4.147-8.32 5.94 30.155 4.89 54.97-2.203 47.148-5.731M19.447 41.667s-13.731 3.262-4.863 4.446c3.745.502 11.21.388 18.163-.194 5.683-.48 11.39-1.499 11.39-1.499s-2.005.858-3.454 1.848C26.739 49.935-.2 48.229 7.556 44.478c6.559-3.17 11.891-2.81 11.891-2.81M44.08 55.436c14.174-7.366 7.62-14.444 3.046-13. [...]
+        <path fill="#E76F00" d="M35.534.081s7.85 7.853-7.446 19.929c-12.266 9.686-2.797 15.21-.005 21.52-7.16-6.46-12.414-12.147-8.89-17.44 5.175-7.768 19.508-11.535 16.34-24.009"/>
+        <path fill="#5382A1" d="M20.84 75.396c13.606.87 34.5-.484 34.994-6.922 0 0-.95 2.44-11.244 4.38-11.613 2.185-25.936 1.93-34.431.529 0 0 1.739 1.44 10.68 2.013"/>
+    </g>
+</svg>
diff --git a/docs/assets/images/left-nav-arrow.svg b/docs/assets/images/left-nav-arrow.svg
new file mode 100644
index 0000000..747a83d
--- /dev/null
+++ b/docs/assets/images/left-nav-arrow.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="7" height="10" viewBox="0 0 7 10">
+    <path fill="#F86D24" fill-rule="nonzero" d="M1.175 0L0 1.175 3.817 5 0 8.825 1.175 10l5-5z"/>
+</svg>
diff --git a/docs/assets/images/lines-bg-1.svg b/docs/assets/images/lines-bg-1.svg
new file mode 100644
index 0000000..c6f714a
--- /dev/null
+++ b/docs/assets/images/lines-bg-1.svg
@@ -0,0 +1,54 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="519" viewBox="0 0 1440 519">
+    <g fill="none" fill-rule="evenodd" stroke="#979797" opacity=".104">
+        <path d="M186.834 10.225c177.381-30.6 337.277 14.316 479.687 134.75 213.615 180.65 450.777 155.08 556.27 114.139 105.494-40.94 534.119-126.673 720.637-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M167.138 13.698c177.381-30.6 337.277 14.316 479.687 134.75 213.615 180.65 450.777 155.08 556.27 114.139 105.494-40.941 534.119-126.673 720.637-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M147.442 17.17c177.381-30.6 337.277 14.317 479.687 134.751 213.615 180.65 450.777 155.08 556.27 114.139 105.494-40.941 534.118-126.673 720.637-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M127.746 20.644c177.38-30.6 337.276 14.316 479.686 134.75 213.615 180.65 450.778 155.08 556.271 114.139 105.494-40.941 534.118-126.673 720.637-47.865 124.346 52.54 215.963 97.987 274.851 136.344"/>
+        <path d="M108.05 24.117c177.38-30.6 337.276 14.316 479.686 134.75 213.615 180.65 450.778 155.08 556.271 114.139 105.494-40.941 534.118-126.673 720.637-47.865 124.346 52.54 215.963 97.987 274.851 136.344"/>
+        <path d="M88.353 27.59C265.735-3.01 425.63 41.906 568.04 162.34c213.615 180.65 450.778 155.08 556.271 114.139 105.494-40.941 534.118-126.673 720.637-47.865 124.345 52.54 215.963 97.987 274.851 136.344"/>
+        <path d="M68.657 31.063c177.381-30.6 337.277 14.316 479.687 134.75 213.615 180.65 450.778 155.08 556.271 114.139 105.493-40.941 534.118-126.673 720.636-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M48.961 34.536c177.381-30.6 337.277 14.316 479.687 134.75 213.615 180.65 450.777 155.08 556.27 114.139 105.494-40.941 534.119-126.674 720.637-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M29.265 38.008c177.381-30.6 337.277 14.317 479.687 134.75 213.615 180.652 450.777 155.08 556.27 114.14 105.494-40.941 534.119-126.674 720.637-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M9.569 41.481c177.381-30.6 337.277 14.317 479.687 134.75 213.614 180.652 450.777 155.08 556.27 114.14 105.494-40.941 534.118-126.674 720.637-47.865 124.346 52.54 215.963 97.987 274.851 136.344"/>
+        <path d="M-10.127 44.954c177.38-30.6 337.276 14.317 479.686 134.75 213.615 180.651 450.778 155.08 556.271 114.14 105.494-40.941 534.118-126.674 720.637-47.865 124.346 52.54 215.963 97.987 274.851 136.344"/>
+        <path d="M-29.823 48.427c177.38-30.6 337.276 14.317 479.686 134.75 213.615 180.651 450.778 155.08 556.271 114.14 105.494-40.941 534.118-126.674 720.637-47.865 124.345 52.54 215.963 97.987 274.851 136.344"/>
+        <path d="M-49.52 51.9c177.382-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.778 155.08 556.271 114.14 105.493-40.941 534.118-126.674 720.637-47.865 124.345 52.54 215.962 97.987 274.851 136.344"/>
+        <path d="M-69.216 55.373c177.381-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.777 155.08 556.27 114.14 105.494-40.941 534.119-126.674 720.637-47.865 124.346 52.539 215.963 97.987 274.852 136.344"/>
+        <path d="M-88.912 58.846c177.381-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.777 155.08 556.27 114.14 105.494-40.941 534.119-126.674 720.637-47.865 124.346 52.539 215.963 97.987 274.852 136.344"/>
+        <path d="M-108.608 62.32c177.381-30.6 337.277 14.316 479.687 134.75 213.615 180.65 450.777 155.079 556.27 114.138 105.494-40.94 534.118-126.673 720.637-47.864 124.346 52.539 215.963 97.987 274.852 136.344"/>
+        <path d="M-128.304 65.792c177.38-30.6 337.276 14.317 479.686 134.75 213.615 180.651 450.778 155.08 556.271 114.14 105.494-40.942 534.118-126.674 720.637-47.865 124.346 52.539 215.963 97.987 274.851 136.344"/>
+        <path d="M-148 69.265c177.38-30.6 337.276 14.317 479.686 134.75 213.615 180.651 450.778 155.08 556.271 114.14 105.494-40.942 534.118-126.674 720.637-47.865 124.346 52.539 215.963 97.987 274.851 136.344"/>
+        <path d="M-167.697 72.738C9.685 42.138 169.58 87.055 311.99 207.488c213.615 180.651 450.778 155.08 556.271 114.14 105.493-40.942 534.118-126.674 720.637-47.865 124.345 52.539 215.963 97.987 274.851 136.344"/>
+        <path d="M-187.393 76.211c177.381-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.778 155.08 556.27 114.14 105.494-40.942 534.119-126.674 720.637-47.865 124.346 52.539 215.963 97.987 274.852 136.344"/>
+        <path d="M-207.089 79.684c177.381-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.777 155.08 556.27 114.14 105.494-40.942 534.119-126.674 720.637-47.865 124.346 52.539 215.963 97.987 274.852 136.344"/>
+        <path d="M-226.785 83.157c177.381-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.777 155.08 556.27 114.139 105.494-40.94 534.119-126.673 720.637-47.864 124.346 52.539 215.963 97.987 274.852 136.344"/>
+        <path d="M-246.481 86.63C-69.1 56.03 90.796 100.947 233.206 221.38 446.82 402.031 683.983 376.46 789.476 335.52c105.494-40.94 534.118-126.673 720.637-47.864 124.346 52.539 215.963 97.987 274.851 136.344"/>
+        <path d="M-266.177 90.103c177.38-30.6 337.276 14.317 479.686 134.75 213.615 180.651 450.778 155.08 556.271 114.139 105.494-40.94 534.118-126.673 720.637-47.864 124.346 52.539 215.963 97.987 274.851 136.343"/>
+        <path d="M-285.873 93.576c177.38-30.6 337.276 14.317 479.686 134.75 213.615 180.651 450.778 155.08 556.271 114.139 105.494-40.94 534.118-126.673 720.637-47.864 124.345 52.539 215.963 97.987 274.851 136.343"/>
+        <path d="M-305.57 97.049c177.382-30.6 337.277 14.317 479.687 134.75 213.615 180.65 450.778 155.08 556.271 114.139 105.493-40.94 534.118-126.673 720.637-47.865 124.345 52.54 215.962 97.988 274.851 136.344"/>
+        <path d="M-325.266 100.522c177.381-30.6 337.277 14.316 479.687 134.75 213.615 180.65 450.777 155.08 556.27 114.139 105.494-40.94 534.119-126.673 720.637-47.865 124.346 52.54 215.963 97.988 274.852 136.344"/>
+        <path d="M-344.962 103.995c177.381-30.6 337.277 14.316 479.687 134.75 213.615 180.65 450.777 155.08 556.27 114.139 105.494-40.94 534.119-126.673 720.637-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M-364.658 107.468c177.381-30.6 337.277 14.316 479.687 134.75 213.615 180.65 450.777 155.08 556.27 114.139 105.494-40.941 534.118-126.673 720.637-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M-384.354 110.94c177.38-30.6 337.276 14.317 479.686 134.751 213.615 180.65 450.778 155.08 556.271 114.139 105.494-40.941 534.118-126.673 720.637-47.865 124.346 52.54 215.963 97.987 274.851 136.344"/>
+        <path d="M-404.05 114.414c177.38-30.6 337.276 14.316 479.686 134.75 213.615 180.65 450.778 155.08 556.271 114.139 105.494-40.941 534.118-126.673 720.637-47.865 124.345 52.54 215.963 97.987 274.851 136.344"/>
+        <path d="M-423.747 117.887c177.382-30.6 337.277 14.316 479.687 134.75 213.615 180.65 450.778 155.08 556.271 114.139 105.493-40.941 534.118-126.673 720.637-47.865 124.345 52.54 215.963 97.987 274.851 136.344"/>
+        <path d="M-443.443 121.36c177.381-30.6 337.277 14.316 479.687 134.75 213.615 180.65 450.778 155.08 556.27 114.139 105.494-40.941 534.119-126.673 720.637-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M-463.139 124.833c177.381-30.6 337.277 14.316 479.687 134.75 213.615 180.65 450.777 155.08 556.27 114.139 105.494-40.941 534.119-126.673 720.637-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M-482.835 128.306c177.381-30.6 337.277 14.316 479.687 134.75 213.615 180.65 450.777 155.08 556.27 114.139 105.494-40.941 534.119-126.674 720.637-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M-502.531 131.778c177.381-30.6 337.277 14.317 479.686 134.75 213.615 180.652 450.778 155.08 556.271 114.14 105.494-40.941 534.118-126.674 720.637-47.865 124.346 52.54 215.963 97.987 274.851 136.344"/>
+        <path d="M-522.227 135.251c177.38-30.6 337.276 14.317 479.686 134.75 213.615 180.652 450.778 155.08 556.271 114.14 105.494-40.941 534.118-126.674 720.637-47.865 124.346 52.54 215.963 97.987 274.851 136.344"/>
+        <path d="M-541.924 138.724c177.382-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.778 155.08 556.271 114.14 105.494-40.941 534.118-126.674 720.637-47.865 124.345 52.54 215.963 97.987 274.851 136.344"/>
+        <path d="M-561.62 142.197c177.381-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.778 155.08 556.271 114.14 105.493-40.941 534.118-126.674 720.637-47.865 124.345 52.54 215.962 97.987 274.851 136.344"/>
+        <path d="M-581.316 145.67c177.381-30.6 337.277 14.317 479.687 134.75C111.986 461.072 349.148 435.5 454.64 394.56c105.494-40.941 534.119-126.674 720.637-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M-601.012 149.143c177.381-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.777 155.08 556.27 114.14 105.494-40.941 534.119-126.674 720.637-47.865 124.346 52.54 215.963 97.987 274.852 136.344"/>
+        <path d="M-620.708 152.616c177.381-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.777 155.08 556.27 114.14 105.494-40.941 534.118-126.674 720.637-47.865 124.346 52.539 215.963 97.987 274.852 136.344"/>
+        <path d="M-640.404 156.09c177.38-30.6 337.276 14.316 479.686 134.75C52.897 471.49 290.06 445.919 395.553 404.978c105.494-40.94 534.118-126.673 720.637-47.864 124.346 52.539 215.963 97.987 274.851 136.344"/>
+        <path d="M-660.1 159.562c177.38-30.6 337.276 14.317 479.686 134.75 213.615 180.651 450.778 155.08 556.271 114.14 105.494-40.941 534.118-126.674 720.637-47.865 124.345 52.539 215.963 97.987 274.851 136.344"/>
+        <path d="M-679.797 163.035c177.382-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.778 155.08 556.271 114.14 105.493-40.942 534.118-126.674 720.637-47.865 124.345 52.539 215.962 97.987 274.851 136.344"/>
+        <path d="M-699.493 166.508c177.381-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.778 155.08 556.27 114.14 105.494-40.942 534.119-126.674 720.637-47.865 124.346 52.539 215.963 97.987 274.852 136.344"/>
+        <path d="M-719.189 169.981c177.381-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.777 155.08 556.27 114.14 105.494-40.942 534.119-126.674 720.637-47.865 124.346 52.539 215.963 97.987 274.852 136.344"/>
+        <path d="M-738.885 173.454c177.381-30.6 337.277 14.317 479.687 134.75 213.615 180.651 450.777 155.08 556.27 114.14 105.494-40.942 534.119-126.674 720.637-47.865 124.346 52.539 215.963 97.987 274.852 136.344"/>
+        <path d="M-758.581 176.927c177.38-30.6 337.277 14.317 479.686 134.75 213.615 180.651 450.778 155.08 556.271 114.139 105.494-40.94 534.118-126.673 720.637-47.864 124.346 52.539 215.963 97.987 274.851 136.344"/>
+        <path d="M-778.277 180.4c177.38-30.6 337.276 14.317 479.686 134.75C-84.976 495.801 152.187 470.23 257.68 429.29c105.494-40.94 534.118-126.673 720.637-47.864 124.346 52.539 215.963 97.987 274.851 136.344"/>
+    </g>
+</svg>
diff --git a/docs/assets/images/lines-bg-2.svg b/docs/assets/images/lines-bg-2.svg
new file mode 100644
index 0000000..42c4afa
--- /dev/null
+++ b/docs/assets/images/lines-bg-2.svg
@@ -0,0 +1,54 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="553" viewBox="0 0 1440 553">
+    <g fill="none" fill-rule="evenodd" stroke="#979797" opacity=".1">
+        <path d="M196.463 545.723c178.34 24.391 336.571-26.078 474.691-151.409 207.18-187.996 445.091-170.717 551.95-133.483 106.857 37.235 538.213 107.956 721.867 22.686 122.437-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M176.657 542.94C354.998 567.33 513.23 516.86 651.35 391.53c207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.411-105.464 269.926-145.853"/>
+        <path d="M156.852 540.156c178.341 24.391 336.572-26.078 474.692-151.409 207.18-187.995 445.09-170.717 551.948-133.482 106.858 37.234 538.214 107.955 721.868 22.685 122.437-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M137.047 537.373c178.34 24.39 336.571-26.079 474.691-151.41 207.18-187.995 445.091-170.716 551.95-133.482 106.857 37.234 538.212 107.956 721.867 22.685 122.436-56.846 212.412-105.464 269.926-145.853"/>
+        <path d="M117.241 534.59c178.341 24.39 336.572-26.08 474.692-151.41 207.18-187.995 445.09-170.717 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.411-105.464 269.925-145.853"/>
+        <path d="M97.436 531.806c178.34 24.39 336.572-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.948-133.482 106.858 37.234 538.214 107.956 721.868 22.686 122.437-56.847 212.412-105.465 269.926-145.854"/>
+        <path d="M77.63 529.022c178.342 24.391 336.572-26.078 474.692-151.409 207.18-187.995 445.091-170.716 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M57.825 526.239c178.341 24.391 336.572-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.956 721.868 22.686 122.436-56.847 212.411-105.465 269.925-145.853"/>
+        <path d="M38.02 523.456c178.34 24.39 336.571-26.08 474.692-151.41 207.18-187.995 445.09-170.716 551.948-133.482 106.858 37.234 538.214 107.955 721.868 22.685 122.437-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M18.214 520.672c178.341 24.391 336.572-26.079 474.692-151.41 207.18-187.995 445.091-170.716 551.949-133.482 106.858 37.234 538.213 107.956 721.868 22.686 122.436-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-1.59 517.889c178.34 24.39 336.57-26.08 474.69-151.41 207.181-187.995 445.092-170.716 551.95-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.411-105.464 269.925-145.853"/>
+        <path d="M-21.396 515.105c178.34 24.391 336.571-26.079 474.691-151.409 207.18-187.996 445.091-170.717 551.95-133.483 106.857 37.234 538.213 107.956 721.867 22.686 122.437-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-41.202 512.322c178.341 24.39 336.572-26.079 474.692-151.41C640.67 172.918 878.58 190.197 985.44 227.43c106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.411-105.464 269.926-145.853"/>
+        <path d="M-61.007 509.538C117.334 533.93 275.565 483.46 413.685 358.13c207.18-187.996 445.09-170.717 551.948-133.483 106.858 37.235 538.214 107.956 721.868 22.686 122.437-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-80.812 506.755c178.34 24.39 336.571-26.079 474.691-151.41C601.06 167.35 838.97 184.63 945.83 221.864c106.857 37.234 538.212 107.955 721.867 22.685 122.437-56.846 212.412-105.464 269.926-145.853"/>
+        <path d="M-100.618 503.971c178.341 24.391 336.572-26.078 474.692-151.409 207.18-187.995 445.09-170.717 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.411-105.464 269.925-145.853"/>
+        <path d="M-120.423 501.188c178.341 24.39 336.572-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.948-133.482 106.858 37.234 538.214 107.956 721.868 22.685 122.437-56.846 212.412-105.464 269.926-145.853"/>
+        <path d="M-140.228 498.404c178.34 24.391 336.571-26.078 474.691-151.409C541.643 159 779.554 176.278 886.412 213.513c106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-160.034 495.62c178.341 24.392 336.572-26.078 474.692-151.408 207.18-187.996 445.09-170.717 551.949-133.483 106.858 37.234 538.213 107.956 721.868 22.686C1710.91 176.568 1800.886 127.95 1858.4 87.56"/>
+        <path d="M-179.84 492.837c178.342 24.391 336.572-26.078 474.693-151.409 207.18-187.995 445.09-170.716 551.948-133.482C953.66 245.18 1385.015 315.9 1568.67 230.63c122.437-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-199.645 490.054c178.342 24.391 336.572-26.079 474.692-151.41 207.18-187.995 445.091-170.716 551.949-133.482 106.858 37.234 538.213 107.956 721.868 22.686C1671.3 171 1761.276 122.383 1818.79 81.995"/>
+        <path d="M-219.45 487.27c178.341 24.392 336.572-26.078 474.692-151.409 207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.411-105.464 269.925-145.853"/>
+        <path d="M-239.255 484.487c178.34 24.391 336.571-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.948-133.482 106.858 37.234 538.214 107.956 721.868 22.686 122.437-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-259.06 481.704c178.34 24.39 336.571-26.08 474.691-151.41C422.811 142.3 660.721 159.578 767.58 196.812c106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.411-105.464 269.926-145.853"/>
+        <path d="M-278.866 478.92c178.341 24.391 336.572-26.079 474.692-151.409 207.18-187.996 445.09-170.717 551.949-133.483 106.857 37.234 538.213 107.956 721.867 22.686 122.437-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-298.671 476.137c178.34 24.39 336.571-26.079 474.691-151.41C383.2 136.733 621.111 154.012 727.97 191.246c106.857 37.234 538.213 107.955 721.867 22.685 122.437-56.846 212.412-105.464 269.926-145.853"/>
+        <path d="M-318.477 473.353c178.341 24.391 336.572-26.078 474.692-151.409 207.18-187.996 445.09-170.717 551.949-133.483 106.858 37.235 538.213 107.956 721.868 22.686 122.436-56.847 212.411-105.465 269.925-145.853"/>
+        <path d="M-338.282 470.57C-159.941 494.96-1.71 444.49 136.41 319.16 343.59 131.166 581.5 148.445 688.358 185.679c106.858 37.234 538.214 107.955 721.868 22.685 122.437-56.846 212.412-105.464 269.926-145.853"/>
+        <path d="M-358.087 467.786c178.34 24.391 336.571-26.078 474.691-151.409 207.18-187.996 445.091-170.717 551.95-133.482 106.857 37.234 538.212 107.955 721.867 22.685 122.436-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-377.893 465.003c178.341 24.39 336.572-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.411-105.464 269.925-145.853"/>
+        <path d="M-397.698 462.22c178.34 24.39 336.571-26.08 474.692-151.41 207.18-187.995 445.09-170.717 551.948-133.482 106.858 37.234 538.214 107.955 721.868 22.685 122.437-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-417.503 459.436c178.34 24.39 336.571-26.079 474.691-151.41C264.368 120.032 502.28 137.31 609.137 174.545c106.858 37.234 538.213 107.956 721.868 22.686 122.436-56.847 212.412-105.465 269.926-145.854"/>
+        <path d="M-437.309 456.652c178.341 24.391 336.572-26.078 474.692-151.409 207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.411-105.464 269.925-145.853"/>
+        <path d="M-457.114 453.869c178.34 24.391 336.571-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.948-133.482 106.858 37.234 538.214 107.956 721.868 22.686 122.437-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-476.92 451.086c178.341 24.39 336.572-26.08 474.692-151.41 207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685C1394.025 132.032 1484 83.415 1541.515 43.026"/>
+        <path d="M-496.725 448.302c178.341 24.391 336.572-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.949-133.482 106.857 37.234 538.213 107.956 721.868 22.686 122.436-56.847 212.411-105.465 269.925-145.853"/>
+        <path d="M-516.53 445.519c178.34 24.39 336.571-26.08 474.691-151.41 207.18-187.995 445.091-170.716 551.95-133.482 106.857 37.234 538.213 107.955 721.867 22.685 122.437-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-536.336 442.735c178.341 24.391 336.572-26.079 474.692-151.409 207.18-187.996 445.09-170.717 551.949-133.483 106.858 37.234 538.213 107.956 721.868 22.686 122.436-56.847 212.411-105.465 269.926-145.853"/>
+        <path d="M-556.141 439.952c178.341 24.39 336.572-26.079 474.692-151.41C125.73 100.548 363.64 117.827 470.499 155.06c106.858 37.234 538.214 107.955 721.868 22.685C1314.804 120.9 1404.78 72.281 1462.293 31.892"/>
+        <path d="M-575.946 437.168c178.34 24.391 336.571-26.079 474.691-151.409 207.18-187.996 445.091-170.717 551.95-133.483 106.857 37.235 538.212 107.956 721.867 22.686 122.436-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-595.752 434.385c178.341 24.39 336.572-26.079 474.692-151.41C86.12 94.98 324.03 112.26 430.889 149.494c106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.411-105.464 269.925-145.853"/>
+        <path d="M-615.557 431.601c178.34 24.391 336.572-26.078 474.692-151.409C66.315 92.196 304.225 109.475 411.083 146.71c106.858 37.234 538.214 107.955 721.868 22.685 122.437-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-635.362 428.818c178.34 24.39 336.571-26.079 474.691-151.41C46.51 89.414 284.42 106.693 391.278 143.927c106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.412-105.464 269.926-145.853"/>
+        <path d="M-655.168 426.034c178.341 24.391 336.572-26.078 474.692-151.409C26.704 86.63 264.614 103.908 371.473 141.143c106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.411-105.464 269.925-145.853"/>
+        <path d="M-674.973 423.25c178.34 24.392 336.571-26.078 474.692-151.408C6.899 83.846 244.809 101.125 351.667 138.359c106.858 37.234 538.214 107.956 721.868 22.686 122.437-56.847 212.412-105.465 269.926-145.854"/>
+        <path d="M-694.779 420.467c178.341 24.391 336.572-26.078 474.692-151.409C-12.907 81.063 225.004 98.342 331.862 135.576 438.72 172.81 870.075 243.53 1053.73 158.26c122.436-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-714.584 417.684c178.341 24.391 336.572-26.079 474.692-151.41C-32.712 78.28 205.198 95.559 312.057 132.793c106.858 37.234 538.213 107.956 721.868 22.686C1156.36 98.63 1246.336 50.013 1303.85 9.625"/>
+        <path d="M-734.39 414.9c178.342 24.392 336.572-26.078 474.692-151.409C-52.518 75.496 185.393 92.775 292.252 130.01c106.857 37.234 538.213 107.955 721.867 22.685C1136.556 95.847 1226.531 47.23 1284.045 6.841"/>
+        <path d="M-754.195 412.117c178.341 24.391 336.572-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.956 721.868 22.686C1116.75 93.064 1206.725 44.446 1264.24 4.058"/>
+        <path d="M-774 409.334c178.341 24.39 336.572-26.08 474.692-151.41C-92.128 69.93 145.782 87.208 252.64 124.442c106.858 37.234 538.214 107.955 721.868 22.685C1096.945 90.28 1186.92 41.663 1244.434 1.274"/>
+    </g>
+</svg>
diff --git a/docs/assets/images/lines-bg-3.svg b/docs/assets/images/lines-bg-3.svg
new file mode 100644
index 0000000..42c4afa
--- /dev/null
+++ b/docs/assets/images/lines-bg-3.svg
@@ -0,0 +1,54 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="553" viewBox="0 0 1440 553">
+    <g fill="none" fill-rule="evenodd" stroke="#979797" opacity=".1">
+        <path d="M196.463 545.723c178.34 24.391 336.571-26.078 474.691-151.409 207.18-187.996 445.091-170.717 551.95-133.483 106.857 37.235 538.213 107.956 721.867 22.686 122.437-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M176.657 542.94C354.998 567.33 513.23 516.86 651.35 391.53c207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.411-105.464 269.926-145.853"/>
+        <path d="M156.852 540.156c178.341 24.391 336.572-26.078 474.692-151.409 207.18-187.995 445.09-170.717 551.948-133.482 106.858 37.234 538.214 107.955 721.868 22.685 122.437-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M137.047 537.373c178.34 24.39 336.571-26.079 474.691-151.41 207.18-187.995 445.091-170.716 551.95-133.482 106.857 37.234 538.212 107.956 721.867 22.685 122.436-56.846 212.412-105.464 269.926-145.853"/>
+        <path d="M117.241 534.59c178.341 24.39 336.572-26.08 474.692-151.41 207.18-187.995 445.09-170.717 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.411-105.464 269.925-145.853"/>
+        <path d="M97.436 531.806c178.34 24.39 336.572-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.948-133.482 106.858 37.234 538.214 107.956 721.868 22.686 122.437-56.847 212.412-105.465 269.926-145.854"/>
+        <path d="M77.63 529.022c178.342 24.391 336.572-26.078 474.692-151.409 207.18-187.995 445.091-170.716 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M57.825 526.239c178.341 24.391 336.572-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.956 721.868 22.686 122.436-56.847 212.411-105.465 269.925-145.853"/>
+        <path d="M38.02 523.456c178.34 24.39 336.571-26.08 474.692-151.41 207.18-187.995 445.09-170.716 551.948-133.482 106.858 37.234 538.214 107.955 721.868 22.685 122.437-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M18.214 520.672c178.341 24.391 336.572-26.079 474.692-151.41 207.18-187.995 445.091-170.716 551.949-133.482 106.858 37.234 538.213 107.956 721.868 22.686 122.436-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-1.59 517.889c178.34 24.39 336.57-26.08 474.69-151.41 207.181-187.995 445.092-170.716 551.95-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.411-105.464 269.925-145.853"/>
+        <path d="M-21.396 515.105c178.34 24.391 336.571-26.079 474.691-151.409 207.18-187.996 445.091-170.717 551.95-133.483 106.857 37.234 538.213 107.956 721.867 22.686 122.437-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-41.202 512.322c178.341 24.39 336.572-26.079 474.692-151.41C640.67 172.918 878.58 190.197 985.44 227.43c106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.411-105.464 269.926-145.853"/>
+        <path d="M-61.007 509.538C117.334 533.93 275.565 483.46 413.685 358.13c207.18-187.996 445.09-170.717 551.948-133.483 106.858 37.235 538.214 107.956 721.868 22.686 122.437-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-80.812 506.755c178.34 24.39 336.571-26.079 474.691-151.41C601.06 167.35 838.97 184.63 945.83 221.864c106.857 37.234 538.212 107.955 721.867 22.685 122.437-56.846 212.412-105.464 269.926-145.853"/>
+        <path d="M-100.618 503.971c178.341 24.391 336.572-26.078 474.692-151.409 207.18-187.995 445.09-170.717 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.411-105.464 269.925-145.853"/>
+        <path d="M-120.423 501.188c178.341 24.39 336.572-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.948-133.482 106.858 37.234 538.214 107.956 721.868 22.685 122.437-56.846 212.412-105.464 269.926-145.853"/>
+        <path d="M-140.228 498.404c178.34 24.391 336.571-26.078 474.691-151.409C541.643 159 779.554 176.278 886.412 213.513c106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-160.034 495.62c178.341 24.392 336.572-26.078 474.692-151.408 207.18-187.996 445.09-170.717 551.949-133.483 106.858 37.234 538.213 107.956 721.868 22.686C1710.91 176.568 1800.886 127.95 1858.4 87.56"/>
+        <path d="M-179.84 492.837c178.342 24.391 336.572-26.078 474.693-151.409 207.18-187.995 445.09-170.716 551.948-133.482C953.66 245.18 1385.015 315.9 1568.67 230.63c122.437-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-199.645 490.054c178.342 24.391 336.572-26.079 474.692-151.41 207.18-187.995 445.091-170.716 551.949-133.482 106.858 37.234 538.213 107.956 721.868 22.686C1671.3 171 1761.276 122.383 1818.79 81.995"/>
+        <path d="M-219.45 487.27c178.341 24.392 336.572-26.078 474.692-151.409 207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.411-105.464 269.925-145.853"/>
+        <path d="M-239.255 484.487c178.34 24.391 336.571-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.948-133.482 106.858 37.234 538.214 107.956 721.868 22.686 122.437-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-259.06 481.704c178.34 24.39 336.571-26.08 474.691-151.41C422.811 142.3 660.721 159.578 767.58 196.812c106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.411-105.464 269.926-145.853"/>
+        <path d="M-278.866 478.92c178.341 24.391 336.572-26.079 474.692-151.409 207.18-187.996 445.09-170.717 551.949-133.483 106.857 37.234 538.213 107.956 721.867 22.686 122.437-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-298.671 476.137c178.34 24.39 336.571-26.079 474.691-151.41C383.2 136.733 621.111 154.012 727.97 191.246c106.857 37.234 538.213 107.955 721.867 22.685 122.437-56.846 212.412-105.464 269.926-145.853"/>
+        <path d="M-318.477 473.353c178.341 24.391 336.572-26.078 474.692-151.409 207.18-187.996 445.09-170.717 551.949-133.483 106.858 37.235 538.213 107.956 721.868 22.686 122.436-56.847 212.411-105.465 269.925-145.853"/>
+        <path d="M-338.282 470.57C-159.941 494.96-1.71 444.49 136.41 319.16 343.59 131.166 581.5 148.445 688.358 185.679c106.858 37.234 538.214 107.955 721.868 22.685 122.437-56.846 212.412-105.464 269.926-145.853"/>
+        <path d="M-358.087 467.786c178.34 24.391 336.571-26.078 474.691-151.409 207.18-187.996 445.091-170.717 551.95-133.482 106.857 37.234 538.212 107.955 721.867 22.685 122.436-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-377.893 465.003c178.341 24.39 336.572-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.411-105.464 269.925-145.853"/>
+        <path d="M-397.698 462.22c178.34 24.39 336.571-26.08 474.692-151.41 207.18-187.995 445.09-170.717 551.948-133.482 106.858 37.234 538.214 107.955 721.868 22.685 122.437-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-417.503 459.436c178.34 24.39 336.571-26.079 474.691-151.41C264.368 120.032 502.28 137.31 609.137 174.545c106.858 37.234 538.213 107.956 721.868 22.686 122.436-56.847 212.412-105.465 269.926-145.854"/>
+        <path d="M-437.309 456.652c178.341 24.391 336.572-26.078 474.692-151.409 207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.411-105.464 269.925-145.853"/>
+        <path d="M-457.114 453.869c178.34 24.391 336.571-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.948-133.482 106.858 37.234 538.214 107.956 721.868 22.686 122.437-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-476.92 451.086c178.341 24.39 336.572-26.08 474.692-151.41 207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.955 721.868 22.685C1394.025 132.032 1484 83.415 1541.515 43.026"/>
+        <path d="M-496.725 448.302c178.341 24.391 336.572-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.949-133.482 106.857 37.234 538.213 107.956 721.868 22.686 122.436-56.847 212.411-105.465 269.925-145.853"/>
+        <path d="M-516.53 445.519c178.34 24.39 336.571-26.08 474.691-151.41 207.18-187.995 445.091-170.716 551.95-133.482 106.857 37.234 538.213 107.955 721.867 22.685 122.437-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-536.336 442.735c178.341 24.391 336.572-26.079 474.692-151.409 207.18-187.996 445.09-170.717 551.949-133.483 106.858 37.234 538.213 107.956 721.868 22.686 122.436-56.847 212.411-105.465 269.926-145.853"/>
+        <path d="M-556.141 439.952c178.341 24.39 336.572-26.079 474.692-151.41C125.73 100.548 363.64 117.827 470.499 155.06c106.858 37.234 538.214 107.955 721.868 22.685C1314.804 120.9 1404.78 72.281 1462.293 31.892"/>
+        <path d="M-575.946 437.168c178.34 24.391 336.571-26.079 474.691-151.409 207.18-187.996 445.091-170.717 551.95-133.483 106.857 37.235 538.212 107.956 721.867 22.686 122.436-56.847 212.412-105.465 269.926-145.853"/>
+        <path d="M-595.752 434.385c178.341 24.39 336.572-26.079 474.692-151.41C86.12 94.98 324.03 112.26 430.889 149.494c106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.411-105.464 269.925-145.853"/>
+        <path d="M-615.557 431.601c178.34 24.391 336.572-26.078 474.692-151.409C66.315 92.196 304.225 109.475 411.083 146.71c106.858 37.234 538.214 107.955 721.868 22.685 122.437-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-635.362 428.818c178.34 24.39 336.571-26.079 474.691-151.41C46.51 89.414 284.42 106.693 391.278 143.927c106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.846 212.412-105.464 269.926-145.853"/>
+        <path d="M-655.168 426.034c178.341 24.391 336.572-26.078 474.692-151.409C26.704 86.63 264.614 103.908 371.473 141.143c106.858 37.234 538.213 107.955 721.868 22.685 122.436-56.847 212.411-105.464 269.925-145.853"/>
+        <path d="M-674.973 423.25c178.34 24.392 336.571-26.078 474.692-151.408C6.899 83.846 244.809 101.125 351.667 138.359c106.858 37.234 538.214 107.956 721.868 22.686 122.437-56.847 212.412-105.465 269.926-145.854"/>
+        <path d="M-694.779 420.467c178.341 24.391 336.572-26.078 474.692-151.409C-12.907 81.063 225.004 98.342 331.862 135.576 438.72 172.81 870.075 243.53 1053.73 158.26c122.436-56.847 212.412-105.464 269.926-145.853"/>
+        <path d="M-714.584 417.684c178.341 24.391 336.572-26.079 474.692-151.41C-32.712 78.28 205.198 95.559 312.057 132.793c106.858 37.234 538.213 107.956 721.868 22.686C1156.36 98.63 1246.336 50.013 1303.85 9.625"/>
+        <path d="M-734.39 414.9c178.342 24.392 336.572-26.078 474.692-151.409C-52.518 75.496 185.393 92.775 292.252 130.01c106.857 37.234 538.213 107.955 721.867 22.685C1136.556 95.847 1226.531 47.23 1284.045 6.841"/>
+        <path d="M-754.195 412.117c178.341 24.391 336.572-26.079 474.692-151.41 207.18-187.995 445.09-170.716 551.949-133.482 106.858 37.234 538.213 107.956 721.868 22.686C1116.75 93.064 1206.725 44.446 1264.24 4.058"/>
+        <path d="M-774 409.334c178.341 24.39 336.572-26.08 474.692-151.41C-92.128 69.93 145.782 87.208 252.64 124.442c106.858 37.234 538.214 107.955 721.868 22.685C1096.945 90.28 1186.92 41.663 1244.434 1.274"/>
+    </g>
+</svg>
diff --git a/docs/assets/images/lines-bg-4.svg b/docs/assets/images/lines-bg-4.svg
new file mode 100644
index 0000000..87b0a9b
--- /dev/null
+++ b/docs/assets/images/lines-bg-4.svg
@@ -0,0 +1,54 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="1440" height="973" viewBox="0 0 1440 973">
+    <g fill="none" fill-rule="evenodd" stroke="#979797" opacity=".06">
+        <path d="M1087.77 102.125C914.927 152.38 790.92 262.896 715.745 433.67 602.985 689.833 378.618 770.826 265.85 780.258c-112.768 9.433-535.598 120.267-668.67 272.941-88.715 101.783-151.124 182.837-187.229 243.16"/>
+        <path d="M1106.995 96.612C934.152 146.868 810.144 257.383 734.97 428.158 622.21 684.32 397.843 765.313 285.075 774.746c-112.769 9.432-535.599 120.266-668.67 272.94-88.716 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1126.22 91.1c-172.843 50.255-296.85 160.77-372.024 331.545C641.436 678.807 417.068 759.8 304.3 769.233c-112.769 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1145.446 85.586C972.603 135.842 848.594 246.358 773.42 417.132 660.66 673.294 436.294 754.288 323.525 763.72c-112.768 9.432-535.598 120.266-668.67 272.941-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1164.671 80.074C991.828 130.33 867.82 240.845 792.646 411.62 679.886 667.782 455.519 748.775 342.75 758.207c-112.768 9.433-535.598 120.267-668.67 272.941-88.715 101.783-151.124 182.837-187.229 243.16"/>
+        <path d="M1183.896 74.56c-172.843 50.257-296.851 160.772-372.025 331.547-112.76 256.162-337.127 337.155-449.895 346.588-112.769 9.432-535.599 120.266-668.67 272.94-88.716 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1203.122 69.048C1030.278 119.304 906.27 229.82 831.096 400.594 718.336 656.756 493.97 737.75 381.201 747.182c-112.769 9.432-535.599 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1222.347 63.535c-172.843 50.256-296.852 160.772-372.025 331.546-112.76 256.162-337.127 337.156-449.896 346.588-112.769 9.433-535.598 120.266-668.67 272.941-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1241.572 58.023C1068.73 108.279 944.72 218.794 869.547 389.569 756.787 645.73 532.42 726.724 419.65 736.156c-112.768 9.433-535.598 120.267-668.67 272.941-88.715 101.783-151.125 182.837-187.229 243.16"/>
+        <path d="M1260.797 52.51c-172.843 50.256-296.851 160.771-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.124 182.837-187.229 243.161"/>
+        <path d="M1280.023 46.997C1107.179 97.253 983.17 207.77 907.997 378.543 795.237 634.705 570.87 715.698 458.102 725.131c-112.769 9.432-535.599 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1299.248 41.484C1126.405 91.74 1002.396 202.256 927.223 373.03c-112.76 256.162-337.128 337.156-449.896 346.588-112.769 9.433-535.598 120.266-668.67 272.941-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1318.473 35.972c-172.843 50.256-296.852 160.771-372.025 331.546C833.688 623.68 609.32 704.673 496.552 714.105c-112.768 9.433-535.598 120.267-668.67 272.941-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1337.698 30.459c-172.843 50.256-296.851 160.771-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.124 182.837-187.229 243.161"/>
+        <path d="M1356.923 24.946c-172.843 50.256-296.851 160.772-372.025 331.546-112.76 256.162-337.127 337.155-449.895 346.588-112.769 9.432-535.599 120.266-668.67 272.94-88.716 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1376.149 19.433c-172.843 50.256-296.852 160.772-372.025 331.546-112.76 256.162-337.128 337.156-449.896 346.588C441.459 707 18.63 817.833-114.442 970.508c-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1395.374 13.92c-172.843 50.257-296.852 160.772-372.025 331.547-112.76 256.162-337.127 337.155-449.896 346.587-112.768 9.433-535.598 120.267-668.67 272.941-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1414.6 8.408c-172.844 50.256-296.852 160.771-372.026 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.124 182.837-187.229 243.161"/>
+        <path d="M1433.824 2.895c-172.843 50.256-296.851 160.772-372.025 331.546C949.04 590.603 724.672 671.596 611.904 681.03c-112.769 9.432-535.599 120.266-668.67 272.94-88.716 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1453.05-2.618c-172.844 50.256-296.852 160.772-372.025 331.546-112.76 256.162-337.128 337.156-449.896 346.588C518.36 684.95 95.53 795.782-37.541 948.457c-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1472.275-8.13c-172.843 50.256-296.852 160.771-372.025 331.546C987.49 579.578 763.123 660.57 650.354 670.003c-112.768 9.433-535.598 120.267-668.67 272.941-88.715 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1491.5-13.643c-172.843 50.256-296.851 160.771-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588C556.811 673.923 133.981 784.757.91 937.43c-88.715 101.784-151.125 182.837-187.229 243.161"/>
+        <path d="M1510.725-19.156C1337.882 31.1 1213.874 141.616 1138.7 312.39c-112.76 256.162-337.127 337.155-449.895 346.588-112.769 9.432-535.599 120.266-668.67 272.94-88.716 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1529.95-24.669c-172.843 50.256-296.851 160.772-372.025 331.546-112.76 256.162-337.127 337.156-449.895 346.588C595.26 662.898 172.43 773.731 39.36 926.406c-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1549.176-30.181c-172.843 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.128 337.155-449.896 346.587-112.769 9.433-535.598 120.267-668.67 272.941-88.715 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1568.401-35.694c-172.843 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.229 243.161"/>
+        <path d="M1587.626-41.207C1414.783 9.05 1290.775 119.565 1215.601 290.34c-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94C8.32 1011.652-54.089 1092.705-90.194 1153.029"/>
+        <path d="M1606.852-46.72C1434.008 3.536 1310 114.052 1234.826 284.826 1122.066 540.988 897.7 621.982 784.931 631.414c-112.769 9.433-535.599 120.266-668.67 272.941-88.715 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1626.077-52.232c-172.843 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.128 337.155-449.896 346.587-112.769 9.433-535.598 120.267-668.67 272.941-88.715 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1645.302-57.745C1472.459-7.49 1348.45 103.026 1273.277 273.8 1160.517 529.963 936.15 610.956 823.38 620.389c-112.768 9.432-535.598 120.266-668.67 272.94C65.996 995.114 3.586 1076.167-32.52 1136.49"/>
+        <path d="M1664.527-63.258c-172.843 50.256-296.851 160.772-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94C85.221 989.6 22.812 1070.655-13.293 1130.978"/>
+        <path d="M1683.752-68.77C1510.91-18.516 1386.901 92 1311.727 262.774 1198.967 518.937 974.6 599.931 861.832 609.363c-112.769 9.433-535.599 120.266-668.67 272.941-88.716 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1702.978-74.283c-172.844 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.128 337.155-449.896 346.587-112.769 9.433-535.598 120.267-668.67 272.941-88.715 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1722.203-79.796C1549.36-29.54 1425.35 80.975 1350.178 251.75c-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1741.428-85.309c-172.843 50.256-296.851 160.772-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.124 182.838-187.229 243.161"/>
+        <path d="M1760.653-90.822C1587.81-40.566 1463.802 69.95 1388.628 240.724c-112.76 256.162-337.127 337.156-449.895 346.588-112.769 9.433-535.599 120.266-668.67 272.941-88.716 101.783-151.125 182.837-187.23 243.16"/>
+        <path d="M1779.879-96.334c-172.844 50.256-296.852 160.771-372.026 331.546-112.76 256.162-337.127 337.155-449.895 346.587-112.769 9.433-535.598 120.267-668.67 272.941-88.715 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1799.104-101.847c-172.843 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.769 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1818.33-107.36c-172.844 50.256-296.852 160.772-372.026 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.838-187.229 243.161"/>
+        <path d="M1837.554-112.873C1664.711-62.616 1540.703 47.9 1465.53 218.674c-112.76 256.161-337.127 337.155-449.896 346.587-112.768 9.433-535.598 120.266-668.67 272.941-88.715 101.783-151.124 182.837-187.229 243.16"/>
+        <path d="M1856.78-118.385C1683.936-68.13 1559.928 42.386 1484.754 213.16c-112.76 256.162-337.127 337.155-449.895 346.587-112.769 9.433-535.599 120.267-668.67 272.941-88.715 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1876.005-123.898c-172.843 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.128 337.155-449.896 346.588-112.769 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+        <path d="M1895.23-129.41c-172.843 50.255-296.852 160.77-372.025 331.545-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.838-187.23 243.161"/>
+        <path d="M1914.455-134.924c-172.843 50.257-296.851 160.772-372.025 331.547-112.76 256.161-337.127 337.155-449.896 346.587-112.768 9.433-535.598 120.266-668.67 272.941-88.715 101.783-151.124 182.837-187.229 243.16"/>
+        <path d="M1933.68-140.436C1760.838-90.18 1636.83 20.335 1561.656 191.11c-112.76 256.162-337.127 337.155-449.895 346.587C998.99 547.13 576.16 657.964 443.09 810.638c-88.716 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M1952.906-145.949c-172.843 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.128 337.155-449.896 346.588-112.769 9.432-535.598 120.266-668.67 272.94C373.6 906.91 311.19 987.963 275.084 1048.287"/>
+        <path d="M1972.131-151.462c-172.843 50.256-296.852 160.772-372.025 331.546-112.76 256.162-337.127 337.155-449.896 346.588-112.768 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.838-187.23 243.161"/>
+        <path d="M1991.356-156.975c-172.843 50.257-296.851 160.772-372.025 331.547-112.76 256.162-337.127 337.155-449.896 346.587-112.768 9.433-535.598 120.266-668.67 272.941-88.715 101.783-151.124 182.837-187.229 243.16"/>
+        <path d="M2010.581-162.487c-172.843 50.256-296.851 160.771-372.025 331.546-112.76 256.162-337.127 337.155-449.895 346.587-112.769 9.433-535.599 120.267-668.67 272.941-88.716 101.784-151.125 182.837-187.23 243.16"/>
+        <path d="M2029.807-168c-172.844 50.256-296.852 160.771-372.025 331.546-112.76 256.162-337.128 337.155-449.896 346.588-112.769 9.432-535.598 120.266-668.67 272.94-88.715 101.784-151.125 182.837-187.23 243.161"/>
+    </g>
+</svg>
diff --git a/docs/assets/images/menu-icon.svg b/docs/assets/images/menu-icon.svg
new file mode 100644
index 0000000..0bf1e7f
--- /dev/null
+++ b/docs/assets/images/menu-icon.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="18" height="12" viewBox="0 0 18 12">
+    <path fill="#333" d="M0 12h18v-2H0v2zm0-5h18V5H0v2zm0-7v2h18V0H0z"/>
+</svg>
diff --git a/docs/assets/images/mousepad-blob.svg b/docs/assets/images/mousepad-blob.svg
new file mode 100644
index 0000000..a05769b
--- /dev/null
+++ b/docs/assets/images/mousepad-blob.svg
@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="216" height="382" viewBox="0 0 216 382">
+    <defs>
+        <linearGradient id="a" x1="50%" x2="50%" y1="0%" y2="100%">
+            <stop offset="0%" stop-color="#9634B2"/>
+            <stop offset="100%" stop-color="#713C80"/>
+        </linearGradient>
+    </defs>
+    <path fill="url(#a)" fill-rule="evenodd" d="M1419.757 436.537l160.517 46.028c48.154 13.808 75.997 64.038 62.189 112.192l-46.028 160.517c-13.808 48.154-64.038 75.997-112.192 62.189l-160.517-46.028c-48.154-13.808-75.997-64.038-62.189-112.192l46.028-160.517c13.808-48.154 64.038-75.997 112.192-62.189z" opacity=".7" transform="translate(-1258 -433)"/>
+</svg>
diff --git a/docs/assets/images/piece-of-paper-with-folded-top-right-corner.svg b/docs/assets/images/piece-of-paper-with-folded-top-right-corner.svg
new file mode 100644
index 0000000..aa493a7
--- /dev/null
+++ b/docs/assets/images/piece-of-paper-with-folded-top-right-corner.svg
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="177.42053"
+   height="229.022"
+   viewBox="0 0 177.42053 229.022"
+   version="1.1"
+   id="svg24"
+   sodipodi:docname="piece-of-paper-with-folded-top-right-corner.svg"
+   inkscape:version="0.92.1 r15371">
+  <metadata
+     id="metadata28">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="2482"
+     inkscape:window-height="1057"
+     id="namedview26"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="1.026087"
+     inkscape:cx="89"
+     inkscape:cy="114.946"
+     inkscape:window-x="-8"
+     inkscape:window-y="-8"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg24" />
+  <defs
+     id="defs4">
+    <path
+       id="a"
+       d="M 0,6.37 H 177.418 V 235.385 H 0 Z"
+       inkscape:connector-curvature="0" />
+    <path
+       id="c"
+       d="m 1.588,6.374 h 65.06 V 71.43 H 1.588 Z"
+       inkscape:connector-curvature="0" />
+  </defs>
+  <g
+     id="g22"
+     style="fill:none;fill-rule:evenodd"
+     transform="translate(0,-0.92398933)">
+    <g
+       transform="translate(0,-5.446)"
+       id="g11">
+      <mask
+         id="b"
+         fill="#fff">
+        <use
+           xlink:href="#a"
+           id="use6"
+           x="0"
+           y="0"
+           width="100%"
+           height="100%" />
+      </mask>
+      <path
+         d="m 7.027,11.692 c -0.942,0 -1.703,0.762 -1.703,1.703 v 214.962 c 0,0.942 0.761,1.703 1.703,1.703 h 163.37 c 0.935,0 1.704,-0.761 1.704,-1.703 V 69.867 L 113.919,11.692 Z m 163.37,223.699 H 7.028 C 3.15,235.39 0,232.227 0,228.357 V 13.395 C 0,9.532 3.15,6.37 7.027,6.37 h 108 a 2.64,2.64 0 0 1 1.883,0.782 l 59.732,59.732 c 0.492,0.499 0.776,1.184 0.776,1.883 v 159.591 c 0,3.87 -3.15,7.034 -7.02,7.034 z"
+         mask="url(#b)"
+         id="path9"
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff" />
+    </g>
+    <g
+       transform="translate(110.77,-5.446)"
+       id="g18">
+      <mask
+         id="d"
+         fill="#fff">
+        <use
+           xlink:href="#c"
+           id="use13"
+           x="0"
+           y="0"
+           width="100%"
+           height="100%" />
+      </mask>
+      <path
+         d="m 6.919,15.458 v 48.94 c 0,0.94 0.761,1.702 1.703,1.702 h 48.94 L 6.918,15.458 Z M 63.986,71.43 H 8.622 c -3.87,0 -7.034,-3.157 -7.034,-7.034 V 9.033 c 0,-1.08 0.65,-2.049 1.648,-2.457 A 2.68,2.68 0 0 1 6.144,7.15 l 59.732,59.732 c 0.754,0.762 0.983,1.904 0.574,2.915 a 2.69,2.69 0 0 1 -2.464,1.634 z"
+         mask="url(#d)"
+         id="path16"
+         inkscape:connector-curvature="0"
+         style="fill:#ffffff" />
+    </g>
+    <path
+       d="M 88.71,46.81 H 33.978 a 2.671,2.671 0 0 1 -2.665,-2.665 2.671,2.671 0 0 1 2.665,-2.665 h 54.734 a 2.671,2.671 0 0 1 2.665,2.665 2.671,2.671 0 0 1 -2.665,2.666 m 11.702,30.674 h -66.44 a 2.6655,2.6655 0 0 1 0,-5.331 h 66.44 a 2.671,2.671 0 0 1 2.666,2.665 2.671,2.671 0 0 1 -2.666,2.666 m 44.473,30.667 H 33.972 a 2.67,2.67 0 0 1 -2.658,-2.666 2.67,2.67 0 0 1 2.658,-2.665 h 110.915 a 2.667,2.667 0 0 1 0,5.33 m 0,61.335 H 33.972 a 2.67,2.67 0 0 1 -2.658,-2.665 2.67,2.67 0 0 1 2.65 [...]
+       id="path20"
+       inkscape:connector-curvature="0"
+       style="fill:#ffffff" />
+  </g>
+</svg>
diff --git a/docs/assets/images/scala.svg b/docs/assets/images/scala.svg
new file mode 100644
index 0000000..5f27789
--- /dev/null
+++ b/docs/assets/images/scala.svg
@@ -0,0 +1,31 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="43" height="73" viewBox="0 0 43 73">
+    <defs>
+        <linearGradient id="a" x1=".171%" x2="99.819%" y1="49.649%" y2="49.649%">
+            <stop offset="0%" stop-color="#656565"/>
+            <stop offset="100%" stop-color="#010101"/>
+        </linearGradient>
+        <linearGradient id="b" x1=".171%" x2="99.819%" y1="49.82%" y2="49.82%">
+            <stop offset="0%" stop-color="#656565"/>
+            <stop offset="100%" stop-color="#010101"/>
+        </linearGradient>
+        <linearGradient id="c" x1=".171%" x2="99.819%" y1="50.052%" y2="50.052%">
+            <stop offset="0%" stop-color="#9F1C20"/>
+            <stop offset="100%" stop-color="#ED2224"/>
+        </linearGradient>
+        <linearGradient id="d" x1=".171%" x2="99.819%" y1="50.259%" y2="50.259%">
+            <stop offset="0%" stop-color="#9F1C20"/>
+            <stop offset="100%" stop-color="#ED2224"/>
+        </linearGradient>
+        <linearGradient id="e" x1=".171%" x2="99.819%" y1="50.44%" y2="50.44%">
+            <stop offset="0%" stop-color="#9F1C20"/>
+            <stop offset="100%" stop-color="#ED2224"/>
+        </linearGradient>
+    </defs>
+    <g fill="none" fill-rule="nonzero">
+        <path fill="url(#a)" d="M.61 27.854s41.78 4.178 41.78 11.142V22.283s0-6.963-41.78-11.141v16.712z"/>
+        <path fill="url(#b)" d="M.61 50.138s41.78 4.178 41.78 11.141V44.567s0-6.964-41.78-11.142v16.713z"/>
+        <path fill="url(#c)" d="M42.39 0v16.713s0 6.963-41.78 11.141V11.142S42.39 6.964 42.39 0"/>
+        <path fill="url(#d)" d="M.61 33.425s41.78-4.178 41.78-11.142v16.713s0 6.964-41.78 11.142V33.425z"/>
+        <path fill="url(#e)" d="M.61 72.421V55.71s41.78-4.179 41.78-11.142v16.712s0 6.964-41.78 11.142"/>
+    </g>
+</svg>
diff --git a/docs/assets/images/search.svg b/docs/assets/images/search.svg
new file mode 100644
index 0000000..4123a57
--- /dev/null
+++ b/docs/assets/images/search.svg
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="18px" height="19px" viewBox="0 0 18 19" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <!-- Generator: sketchtool 53.2 (72643) - https://sketchapp.com -->
+    <title>76A07A59-5A01-45B5-86ED-1007B13A770C</title>
+    <desc>Created with sketchtool.</desc>
+    <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="Article-320" transform="translate(-248.000000, -22.000000)" fill="#333" fill-rule="nonzero">
+            <g id="screen">
+                <g id="GitHub-icon" transform="translate(248.000000, 19.000000)">
+                    <path d="M6.6146307,16.2292614 C2.96147085,16.2292614 0,13.2677905 0,9.6146307 C0,5.96147085 2.96147085,3 6.6146307,3 C10.2677905,3 13.2292614,5.96147085 13.2292614,9.6146307 C13.2292614,11.4412106 12.4888937,13.0948683 11.291881,14.291881 L17.8421457,20.9358099 C18.0561908,21.149855 18.0509881,21.4930606 17.8360963,21.7079524 C17.6197064,21.9243423 17.2755046,21.9255525 17.0639538,21.7140017 L10.4488725,15.0052562 C9.36728942,15.7759493 8.04389847,16.2292614 6.614630 [...]
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>
\ No newline at end of file
diff --git a/docs/assets/images/violent-blob.svg b/docs/assets/images/violent-blob.svg
new file mode 100644
index 0000000..4bef98b
--- /dev/null
+++ b/docs/assets/images/violent-blob.svg
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 735 673" style="enable-background:new 0 0 735 673;" xml:space="preserve">
+<style type="text/css">
+	.st0{opacity:0.85;}
+	.st1{opacity:0.85;fill:url(#Rectangle-3_2_);}
+	.st2{opacity:0.85;fill:url(#Rectangle-3_3_);}
+</style>
+<g id="Page-1" class="st0">
+	<g id="Group" transform="translate(-55.973403, -60.591451)">
+		
+			<linearGradient id="Rectangle-3_2_" gradientUnits="userSpaceOnUse" x1="3.5474" y1="693.9244" x2="3.5474" y2="692.9244" gradientTransform="matrix(715.9998 0 0 -661.9999 -2125.9568 459438.9375)">
+			<stop  offset="0" style="stop-color:#C07670"/>
+			<stop  offset="1" style="stop-color:#8C413D"/>
+		</linearGradient>
+		<path id="Rectangle-3" class="st1" d="M213.3,78.8C334-1.9,784,213.5,771.8,294.2S709.6,709.5,588.1,722
+			c-121.5,12.5-408.1-95.2-496.5-203.6S92.7,159.6,213.3,78.8z"/>
+		
+			<linearGradient id="Rectangle-3_3_" gradientUnits="userSpaceOnUse" x1="3.5511" y1="693.9073" x2="3.5511" y2="692.9073" gradientTransform="matrix(745.4993 -131.4516 -121.5537 -689.3654 82073.4297 478888.8438)">
+			<stop  offset="0" style="stop-color:#AA6FB7"/>
+			<stop  offset="1" style="stop-color:#713C80"/>
+		</linearGradient>
+		<path id="Rectangle-3_1_" class="st2" d="M168.1,121.7c110.8-106.2,619,35.5,621,121.7c2,86.2,11.6,443.9-112.7,479.3
+			S233.9,698.4,122,601.9S57.3,227.9,168.1,121.7z"/>
+	</g>
+</g>
+</svg>
diff --git a/docs/assets/images/watermelon-blob.svg b/docs/assets/images/watermelon-blob.svg
new file mode 100644
index 0000000..c2fe445
--- /dev/null
+++ b/docs/assets/images/watermelon-blob.svg
@@ -0,0 +1,9 @@
+<svg xmlns="http://www.w3.org/2000/svg" width="63" height="91" viewBox="0 0 63 91">
+    <defs>
+        <linearGradient id="a" x1="50%" x2="50%" y1="0%" y2="100%">
+            <stop offset="0%" stop-color="#F1474E"/>
+            <stop offset="100%" stop-color="#DF2226"/>
+        </linearGradient>
+    </defs>
+    <path fill="url(#a)" fill-rule="evenodd" d="M67.752 1154.058l24.137 48.02c4.961 9.869.982 21.89-8.887 26.851a20 20 0 0 1-8.982 2.13H26c-11.046 0-20-8.953-20-20a20 20 0 0 1 2.093-8.905l23.882-48.02c4.919-9.89 16.924-13.92 26.814-9.001a20 20 0 0 1 8.963 8.925z" transform="rotate(-7 -9310.93 893.495)"/>
+</svg>
diff --git a/docs/assets/js/anchor.min.js b/docs/assets/js/anchor.min.js
new file mode 100644
index 0000000..e302d89
--- /dev/null
+++ b/docs/assets/js/anchor.min.js
@@ -0,0 +1,9 @@
+// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
+//
+// AnchorJS - v4.2.0 - 2019-01-01
+// https://github.com/bryanbraun/anchorjs
+// Copyright (c) 2019 Bryan Braun; Licensed MIT
+//
+// @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt Expat
+!function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function f(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.ariaLabel=A.hasOwnProperty("ariaLabel")?A.ariaLabel:"Anchor",A.class=A.hasOwnProperty( [...]
+// @license-end
\ No newline at end of file
diff --git a/docs/assets/js/code-copy-to-clipboard.js b/docs/assets/js/code-copy-to-clipboard.js
new file mode 100644
index 0000000..3fd42b2
--- /dev/null
+++ b/docs/assets/js/code-copy-to-clipboard.js
@@ -0,0 +1,70 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+
+const BUTTON_CLASSNAME = 'copy-to-clipboard-button'
+const BUTTON_CLASSNAME_SUCCESS = 'copy-to-clipboard-button__success'
+
+const TEMPLATE = document.createElement('button')
+TEMPLATE.classList.add(BUTTON_CLASSNAME)
+TEMPLATE.title = 'Copy to clipboard'
+TEMPLATE.type = 'button'
+
+const SECOND = 1000
+const RESULT_DISPLAY_DURATION = 0.5 * SECOND
+
+/**
+ * @param {HTMLElement?} el Element to copy text from
+ * @returns {boolean} Copy success/failure
+ */
+function copyCode(el) {
+	if (!el) return
+	if (!el.matches('code')) return
+
+	const range = document.createRange()
+	range.selectNode(el)
+	window.getSelection().addRange(range)
+
+	try {
+		return document.execCommand('copy')
+	} catch (err) {} finally {
+		window.getSelection().removeAllRanges()		
+	}
+}
+
+function init() {
+	for (const code of document.querySelectorAll('pre>code')) {
+		try {
+			const container = code.closest('.listingblock .content')
+			if (!container) break
+			const button = TEMPLATE.cloneNode(true)
+			container.appendChild(button)			
+		} catch (err) {}
+	}
+	document.addEventListener('click', e => {
+		if (e.target.classList.contains(BUTTON_CLASSNAME)) {
+			const result = copyCode(e.target.parentElement.querySelector('code'))
+			if (result) {
+				e.target.innerText = '✓'
+				e.target.classList.add(BUTTON_CLASSNAME_SUCCESS)
+				setTimeout(() => {
+					e.target.innerText = TEMPLATE.textContent
+					e.target.classList.remove(BUTTON_CLASSNAME_SUCCESS)
+				}, RESULT_DISPLAY_DURATION)
+			}
+		}
+	})
+}
+
+window.addEventListener('load', init)
diff --git a/docs/assets/js/code-tabs.js b/docs/assets/js/code-tabs.js
new file mode 100644
index 0000000..6d8118a
--- /dev/null
+++ b/docs/assets/js/code-tabs.js
@@ -0,0 +1,155 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+
+const TAB_BUTTON = document.createRange().createContextualFragment(`
+    <button class='code-tabs__tab'></button>
+`)
+
+const getAllCodeTabs = () => document.querySelectorAll('code-tabs')
+
+/**
+ * @typedef CodeTabsState
+ * @prop {string?} currentTab
+ * @prop {string[]} tabs
+ * @prop {number?} boundingClientRectTop
+ */
+
+/**
+ * @typedef {number} ScrollState
+ */
+
+class CodeTabs {
+    /** @param {HTMLElement} el */
+    constructor(el) {
+        this.el = el
+        this.el.codeTabs = this
+        /**
+         * @type {CodeTabsState}
+         */
+        this._state = {tabs: []}
+    }
+    get state() {
+        return this._state
+    }
+    /**
+     * @param {CodeTabsState} newState
+     */
+    set state(newState) {
+        const oldState = this._state
+        this._state = newState
+        this._render(oldState, newState)
+    }
+    connectedCallback() {
+        this._tabElements = this.el.querySelectorAll('code-tab')
+        this.state = {
+            currentTab: this._tabElements[0].dataset.tab,
+            tabs: [...this._tabElements].map(el => el.dataset.tab),
+        }
+    }
+    /**
+     * @private
+     * @param {CodeTabsState} oldState
+     * @param {CodeTabsState} newState
+     */
+    _render(oldState, newState) {
+        if (!oldState.tabs.length && newState.tabs.length) {
+            /** @type {HTMLElement} */
+            this.el.prepend(newState.tabs.reduce((nav, tab, i) => {
+                const button = TAB_BUTTON.firstElementChild.cloneNode()
+                button.dataset.tab = tab
+                button.innerText = tab
+                button.onclick = () => {
+                    const scrollState = this._rememberScrollState()
+                    this._openTab(tab)
+                    this._restoreScrollState(scrollState)
+                }
+                if (this._tabElements[i].dataset.unavailable) {
+                    button.classList.add('grey')      
+                }
+
+                this._tabElements[i].button = button
+                nav.appendChild(button)
+                return nav
+            }, document.createElement('NAV')))
+            this.el.classList.add('code-tabs__initialized')
+        }
+        if (oldState.currentTab !== newState.currentTab) {
+            for (const tab of this._tabElements) {
+                const hidden = tab.dataset.tab !== newState.currentTab
+                if (hidden) {
+                    tab.setAttribute('hidden', 'hidden')
+                } else {
+                    tab.removeAttribute('hidden')
+                }
+                tab.button.classList.toggle('active', !hidden)
+            }
+        }
+    }
+    /** 
+     * @private
+     * @param {string} tab
+     */
+    _openTab(tab, emitEvent = true) {
+        if (!this.state.tabs.includes(tab)) return
+        this.state = Object.assign({}, this.state, {currentTab: tab})
+        if (emitEvent) this.el.dispatchEvent(new CustomEvent('tabopen', {
+            bubbles: true,
+            detail: {tab}
+        }))
+    }
+    /** 
+     * @param {string} tab
+     */
+    openTab(tab) {
+        this._openTab(tab, false)
+    }
+
+    /**
+     * @private
+     * @returns {ScrollState}
+     */
+    _rememberScrollState() {
+        return this.el.getBoundingClientRect().top
+    }
+
+    /**
+     * @private
+     * @param {ScrollState} scrollState
+     * @returns {void}
+     */
+    _restoreScrollState(scrollState) {
+        const currentRectTop = this.el.getBoundingClientRect().top
+        const delta = currentRectTop - scrollState
+        document.scrollingElement.scrollBy(0, delta)
+    }
+}
+
+/**
+ * @param {NodeListOf<Element>} tabs
+ */
+const setupSameLanguageSync = (tabs) => {
+    document.addEventListener('tabopen', (e) => {
+        [...tabs].filter(tab => tab !== e.target).forEach(tab => {
+            tab.codeTabs.openTab(e.detail.tab)
+        })
+    })
+}
+
+// Edge does not support custom elements V1
+for (const el of getAllCodeTabs()) {
+    const instance = new CodeTabs(el)
+    instance.connectedCallback()
+}
+setupSameLanguageSync(getAllCodeTabs())
diff --git a/docs/assets/js/docs-menu.js b/docs/assets/js/docs-menu.js
new file mode 100644
index 0000000..8e598da
--- /dev/null
+++ b/docs/assets/js/docs-menu.js
@@ -0,0 +1,64 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+
+const button = document.querySelector('button.menu')
+const overlay = document.querySelector('.left-nav__overlay')
+
+const eventTypes = {
+    show: 'leftNavigationShow',
+    hide: 'leftNavigationHide'
+}
+
+/**
+ * @param {keyof eventTypes} type
+ */
+const emit = type => {
+    if (!CustomEvent) return
+    document.dispatchEvent(new CustomEvent(type, {bubbles: true}))
+}
+
+/**
+ * @param {boolean} force
+ */
+const toggleMenu = (force) => {
+    const body = document.querySelector('body')
+    const HIDE_CLASS = 'hide-left-nav'
+    body.classList.toggle(HIDE_CLASS, force)
+    emit(eventTypes[body.classList.contains(HIDE_CLASS) ? 'hide' : 'show'])
+}
+
+export const hideLeftNav = () => {
+    toggleMenu(true, false)
+}
+
+if (button && overlay) {
+    const query = window.matchMedia('(max-width: 990px)')
+
+    button.addEventListener('click', () => toggleMenu())
+    overlay.addEventListener('click', () => toggleMenu())
+    query.addListener((e) => {
+        toggleMenu(e.matches)
+    })
+    toggleMenu(query.matches)
+}
+
+document.addEventListener('click', e => {
+    if (e.target.matches('.left-nav button')) {
+        e.target.classList.toggle('expanded')
+        e.target.classList.toggle('collapsed')
+        e.target.nextElementSibling.classList.toggle('expanded')
+        e.target.nextElementSibling.classList.toggle('collapsed')
+    }
+})
diff --git a/docs/assets/js/index.js b/docs/assets/js/index.js
new file mode 100644
index 0000000..0fa36f7
--- /dev/null
+++ b/docs/assets/js/index.js
@@ -0,0 +1,51 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+
+import './code-tabs.js?1'
+import {hideLeftNav} from './docs-menu.js'
+//import {hideTopNav} from './top-navigation.js'
+import './page-nav.js'
+
+
+
+
+document.addEventListener('topNavigationShow', hideLeftNav)
+document.addEventListener('leftNavigationShow', hideTopNav)
+
+
+
+
+// enables search with Swiftype widget
+jQuery(document).ready(function(){
+
+    var customRenderFunction = function(document_type, item) {
+        var out = '<a href="' + Swiftype.htmlEscape(item['url']) + '" class="st-search-result-link">' + item.highlight['title'] + '</a>';
+        return out.concat('<p class="url">' + String(item['url']).replace("https://www.", '') + '</p><p class="body">' + item.highlight['body'] + '</p>');
+    }
+    
+/*    jQuery("#search-input").swiftype({
+        fetchFields: { 'page': ['url'] },
+        renderFunction: customRenderFunction,
+        highlightFields: {
+            'page': {
+                'title': {'size': 60, 'fallback': true },
+                'body': { 'size': 100, 'fallback':true }
+            }
+        },
+        engineKey: '_t6sDkq6YsFC_12W6UH2'
+    });
+    */
+    
+});
diff --git a/docs/assets/js/page-nav.js b/docs/assets/js/page-nav.js
new file mode 100644
index 0000000..8f48464
--- /dev/null
+++ b/docs/assets/js/page-nav.js
@@ -0,0 +1,37 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+
+const rightNav = document.querySelector('.right-nav .sectlevel1')
+
+if (IntersectionObserver && rightNav) {
+    const tocAnchors = [...rightNav.querySelectorAll('a[href]')]
+    let last;
+    tocAnchors.forEach((a, i, all) => {
+        const target = document.querySelector(`${a.hash}`)
+        if (!target) return
+        const observer = new IntersectionObserver((entries) => {
+            entries.forEach(entry => {
+                a.classList.toggle('visible', entry.isIntersecting)
+                if (entry.isIntersecting) last = a
+
+                const firstVisible = rightNav.querySelector('.visible')
+                tocAnchors.forEach(a => a.classList.remove('active'))
+                if (firstVisible) firstVisible.classList.add('active')
+                else if (last) last.classList.add('active')
+            })
+        });
+        observer.observe(target)
+    })
+}
diff --git a/docs/assets/js/top-navigation.js b/docs/assets/js/top-navigation.js
new file mode 100644
index 0000000..291ae92
--- /dev/null
+++ b/docs/assets/js/top-navigation.js
@@ -0,0 +1,92 @@
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements.  See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License.  You may obtain a copy of the License at
+//
+//       http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+
+const query = window.matchMedia('(max-width: 450px)')
+const header = document.querySelector('header')
+const search = document.querySelector('header .search input')
+
+let state = {
+    narrowMode: false,
+    showSearch: false,
+    showNav: false
+}
+
+const eventTypes = {
+    navShow: 'topNavigationShow',
+    navHide: 'topNavigationHide'
+}
+
+/**
+ * @param {keyof eventTypes} type
+ */
+const emit = type => {
+    if (!CustomEvent) return
+    header.dispatchEvent(new CustomEvent(type, {bubbles: true}))
+}
+
+/**
+ * @param {typeof state} newState
+ */
+const render = (newState) => {
+    if (state.narrowMode !== newState.narrowMode)
+        header.classList.toggle('narrow-header')
+    if (state.showSearch !== newState.showSearch) {
+        header.classList.toggle('show-search')
+        search.value = ''
+        if (newState.showSearch) search.focus()
+    }
+    if (state.showNav !== newState.showNav) {
+        header.classList.toggle('show-nav')
+        emit(eventTypes[newState.showNav ? 'navShow' : 'navHide'])        
+    }
+    state = newState
+}
+
+render(Object.assign({}, state, {narrowMode: query.matches}))
+
+query.addListener((e) => {
+    render(Object.assign({}, state, {
+        narrowMode: e.matches,
+        showSearch: false,
+        showNav: false
+    }))
+})
+
+document.querySelector('.top-nav-toggle').addEventListener('click', () => {
+    render(Object.assign({}, state, {
+        showNav: !state.showNav,
+        showSearch: false
+    }))
+})
+
+document.querySelector('.search-toggle').addEventListener('click', () => {
+    render(Object.assign({}, state, {
+        showSearch: !state.showSearch,
+        showNav: false
+    }))
+})
+
+search.addEventListener('blur', () => {
+    render(Object.assign({}, state, {
+        showSearch: false
+    }))
+})
+
+export const hideTopNav = () => {
+    render(Object.assign({}, state, {
+        showNav: false,
+        showSearch: false
+    }))
+}
diff --git a/docs/favicon.ico b/docs/favicon.ico
new file mode 100644
index 0000000..62d5ea6
Binary files /dev/null and b/docs/favicon.ico differ
diff --git a/docs/run.sh b/docs/run.sh
new file mode 100644
index 0000000..bcbe32c
--- /dev/null
+++ b/docs/run.sh
@@ -0,0 +1,23 @@
+#!/bin/bash
+
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+rm -rf _site
+rm -rf .jekyll-cache
+
+bundle exec jekyll s -lI --force_polling --trace